From d55d3fcd7676c87b2ba7a83930d63a428a9665f7 Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Thu, 12 Sep 2019 15:03:57 +0200 Subject: [PATCH 001/208] [FIX] beesdoo_shift : Error when saving a temporary exempt Add missing sequence in database. --- beesdoo_shift/__openerp__.py | 2 +- beesdoo_shift/migrations/9.0.1.2.1/post-migrate.py | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 beesdoo_shift/migrations/9.0.1.2.1/post-migrate.py diff --git a/beesdoo_shift/__openerp__.py b/beesdoo_shift/__openerp__.py index 97ee7a6..c5920b2 100644 --- a/beesdoo_shift/__openerp__.py +++ b/beesdoo_shift/__openerp__.py @@ -13,7 +13,7 @@ 'website': "https://github.com/beescoop/Obeesdoo", 'category': 'Cooperative management', - 'version': '9.0.1.2.0', + 'version': '9.0.1.2.1', 'depends': ['beesdoo_base'], diff --git a/beesdoo_shift/migrations/9.0.1.2.1/post-migrate.py b/beesdoo_shift/migrations/9.0.1.2.1/post-migrate.py new file mode 100644 index 0000000..5db024b --- /dev/null +++ b/beesdoo_shift/migrations/9.0.1.2.1/post-migrate.py @@ -0,0 +1,11 @@ +# coding: utf-8 + + +def migrate(cr, version): + """Fix bug occuring when trying to save a temporary exempt + (missing sequence in database). """ + cr.execute( + """ + CREATE SEQUENCE IF NOT EXISTS beesdoo_website_shift_config_settings_id_seq + """ + ) From 1292201c27c6619499a4a1a105c341c364adce62 Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Mon, 16 Sep 2019 11:21:41 +0200 Subject: [PATCH 002/208] [FIX] beesdoo_shift : Error when saving a temporary exempt Add beesdoo_shift_temporary_exemption_id_seq. --- beesdoo_shift/__openerp__.py | 2 +- .../migrations/9.0.1.2.3/post-migrate.py | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 beesdoo_shift/migrations/9.0.1.2.3/post-migrate.py diff --git a/beesdoo_shift/__openerp__.py b/beesdoo_shift/__openerp__.py index c5920b2..3344656 100644 --- a/beesdoo_shift/__openerp__.py +++ b/beesdoo_shift/__openerp__.py @@ -13,7 +13,7 @@ 'website': "https://github.com/beescoop/Obeesdoo", 'category': 'Cooperative management', - 'version': '9.0.1.2.1', + 'version': '9.0.1.2.3', 'depends': ['beesdoo_base'], diff --git a/beesdoo_shift/migrations/9.0.1.2.3/post-migrate.py b/beesdoo_shift/migrations/9.0.1.2.3/post-migrate.py new file mode 100644 index 0000000..88297a5 --- /dev/null +++ b/beesdoo_shift/migrations/9.0.1.2.3/post-migrate.py @@ -0,0 +1,16 @@ +# coding: utf-8 + + +def migrate(cr, version): + """Fix bug occuring when trying to save a temporary exempt + (missing sequence in database). """ + cr.execute( + """ + CREATE SEQUENCE IF NOT EXISTS beesdoo_website_shift_config_settings_id_seq + """ + ) + cr.execute( + """ + CREATE SEQUENCE IF NOT EXISTS beesdoo_shift_temporary_exemption_id_seq + """ + ) From 2581f31838afd0bfff6a23b44ad229c51fd991d9 Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Thu, 2 Jan 2020 16:53:38 +0100 Subject: [PATCH 003/208] [FIX] b_shift : next_countdown computation When the next_countdown is the same day than the current one, it should be the one displayed (and not the one 28 days later). --- beesdoo_shift/models/cooperative_status.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/beesdoo_shift/models/cooperative_status.py b/beesdoo_shift/models/cooperative_status.py index 069637d..29ac02f 100644 --- a/beesdoo_shift/models/cooperative_status.py +++ b/beesdoo_shift/models/cooperative_status.py @@ -137,7 +137,7 @@ class CooperativeStatus(models.Model): date = rec.today counter = rec.sr # Simulate the countdown - while counter >= 0: + while counter > 0: date = add_days_delta(date, 1) date = self._next_countdown_date(rec.irregular_start_date, date) @@ -154,7 +154,9 @@ class CooperativeStatus(models.Model): continue else: counter -= 1 - rec.future_alert_date = date + rec.future_alert_date = self._next_countdown_date( + rec.irregular_start_date, date + ) @api.depends('today', 'irregular_start_date', 'holiday_start_time', 'holiday_end_time', 'temporary_exempt_start_date', @@ -181,18 +183,19 @@ class CooperativeStatus(models.Model): date = rec.today next_countdown_date = False while not next_countdown_date: - date = add_days_delta(date, 1) date = self._next_countdown_date(rec.irregular_start_date, date) # Check holidays if (rec.holiday_start_time and rec.holiday_end_time and date >= rec.holiday_start_time and date <= rec.holiday_end_time): + date = add_days_delta(date, 1) continue # Check temporary exemption elif (rec.temporary_exempt_start_date and rec.temporary_exempt_end_date and date >= rec.temporary_exempt_start_date and date <= rec.temporary_exempt_end_date): + date = add_days_delta(date, 1) continue else: next_countdown_date = date @@ -208,6 +211,8 @@ class CooperativeStatus(models.Model): today_dt = fields.Date.from_string(today) irregular_start_dt = fields.Date.from_string(irregular_start_date) delta = (today_dt - irregular_start_dt).days + if not delta % PERIOD: + return today return add_days_delta(today, PERIOD - (delta % PERIOD)) def _set_regular_status(self, grace_delay, alert_delay): From 47b1eff4ab49db06c72222f1285b3514cda24f65 Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Mon, 23 Dec 2019 12:08:56 +0100 Subject: [PATCH 004/208] [ADD] b_shift : weekly summary email --- beesdoo_shift/__openerp__.py | 1 + beesdoo_shift/data/cron.xml | 19 +- beesdoo_shift/data/mail_template.xml | 58 + beesdoo_shift/i18n/fr.po | 1836 +++++++++++++++++++++++++ beesdoo_shift/i18n/fr_BE.po | 1837 ++++++++++++++++++++++++++ beesdoo_shift/models/task.py | 45 +- 6 files changed, 3786 insertions(+), 10 deletions(-) create mode 100644 beesdoo_shift/data/mail_template.xml create mode 100644 beesdoo_shift/i18n/fr.po create mode 100644 beesdoo_shift/i18n/fr_BE.po diff --git a/beesdoo_shift/__openerp__.py b/beesdoo_shift/__openerp__.py index 3344656..f3f4fe0 100644 --- a/beesdoo_shift/__openerp__.py +++ b/beesdoo_shift/__openerp__.py @@ -21,6 +21,7 @@ "data/stage.xml", "data/system_parameter.xml", "data/cron.xml", + "data/mail_template.xml", "security/group.xml", "security/ir.model.access.csv", "views/task_template.xml", diff --git a/beesdoo_shift/data/cron.xml b/beesdoo_shift/data/cron.xml index a67f050..87bcf2d 100644 --- a/beesdoo_shift/data/cron.xml +++ b/beesdoo_shift/data/cron.xml @@ -23,7 +23,7 @@ () - + Compute Shift Counter 4 @@ -35,5 +35,20 @@ () + + + Send weekly shift summary + 7 + days + -1 + + + beesdoo.shift.shift + _cron_send_weekly_emails + () + + - \ No newline at end of file + diff --git a/beesdoo_shift/data/mail_template.xml b/beesdoo_shift/data/mail_template.xml new file mode 100644 index 0000000..5e5e7fa --- /dev/null +++ b/beesdoo_shift/data/mail_template.xml @@ -0,0 +1,58 @@ + + + + + + Shift Summary + Your next shift (${format_tz(object.start_time,object.worker_id.tz or 'Europe/Brussels','%d.%m.%Y - %H:%M')}) + ${object.worker_id.company_id.email} + ${object.replaced_id.id or object.worker_id.id|safe} + + + ${object.worker_id.lang} + + +

Hello ${object.worker_id.name},

+ +

You are awaited the ${format_tz(object.start_time,object.worker_id.tz or 'Europe/Brussels','%d.%m.%Y')} + for the shift starting at ${format_tz(object.start_time,object.worker_id.tz or 'Europe/Brussels','%H:%M')}. + +

Please contact us at ${object.worker_id.company_id.email} if you have any trouble attending the shift. +

+
+

Sustainably yours,

+

${object.worker_id.company_id.name}.

+ + % if object.worker_id.company_id.street: + ${object.worker_id.company_id.street} + % endif + % if object.worker_id.company_id.street2: + ${object.worker_id.company_id.street2}
+ % endif + % if object.worker_id.company_id.city or object.worker_id.company_id.zip: + ${object.worker_id.company_id.zip} ${object.worker_id.company_id.city}
+ % endif + % if object.worker_id.company_id.country_id: + ${object.worker_id.company_id.state_id and ('%s, ' % object.worker_id.company_id.state_id.name) or ''} ${object.worker_id.company_id.country_id.name or ''}
+ % endif + % if object.worker_id.company_id.phone: + Phone:  ${object.worker_id.company_id.phone} + % endif + + % if object.worker_id.company_id.website: + + %endif + % if object.worker_id.company_id.logo_url: +
+ +
+ %endif + + ]]>
+
+
+
diff --git a/beesdoo_shift/i18n/fr.po b/beesdoo_shift/i18n/fr.po new file mode 100644 index 0000000..e86d39c --- /dev/null +++ b/beesdoo_shift/i18n/fr.po @@ -0,0 +1,1836 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * beesdoo_shift +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-24 12:06+0000\n" +"PO-Revision-Date: 2019-12-24 12:06+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: beesdoo_shift +#: model:mail.template,body_html:beesdoo_shift.email_template_non_validated_sheet +msgid "\n" +"
\n" +"\n" +"

${object.day}\n" +"

The attendance sheet for ${object.time_slot} is not validated.\n" +"

Please, do it as soon as possible so as to update workers' status.\n" +"

\n" +"\n" +"
\n" +" " +msgstr "\n" +"
\n" +"\n" +"

${object.day}\n" +"

The attendance sheet for ${object.time_slot} is not validated.\n" +"

Please, do it as soon as possible so as to update workers' status.\n" +"

\n" +"\n" +"
\n" +" " + +#. module: beesdoo_shift +#: model:mail.template,body_html:beesdoo_shift.email_template_shift_summary +msgid "\n" +"
\n" +"\n" +"

Hello ${object.worker_id.name},

\n" +"\n" +"

You are awaited the ${format_tz(object.start_time,object.worker_id.tz or 'Europe/Brussels','%d.%m.%Y')}\n" +" for the shift starting at ${format_tz(object.start_time,object.worker_id.tz or 'Europe/Brussels','%H:%M')}.\n" +"\n" +"

Please contact us at ${object.worker_id.company_id.email} if you have any trouble attending the shift.\n" +"

\n" +"
\n" +"

Sustainably yours,

\n" +"

${object.worker_id.company_id.name}.

\n" +"\n" +" % if object.worker_id.company_id.street:\n" +" ${object.worker_id.company_id.street}\n" +" % endif\n" +" % if object.worker_id.company_id.street2:\n" +" ${object.worker_id.company_id.street2}
\n" +" % endif\n" +" % if object.worker_id.company_id.city or object.worker_id.company_id.zip:\n" +" ${object.worker_id.company_id.zip} ${object.worker_id.company_id.city}
\n" +" % endif\n" +" % if object.worker_id.company_id.country_id:\n" +" ${object.worker_id.company_id.state_id and ('%s, ' % object.worker_id.company_id.state_id.name) or ''} ${object.worker_id.company_id.country_id.name or ''}
\n" +" % endif\n" +" % if object.worker_id.company_id.phone:\n" +" Phone:  ${object.worker_id.company_id.phone}\n" +" % endif\n" +"\n" +" % if object.worker_id.company_id.website:\n" +" \n" +" %endif\n" +" % if object.worker_id.company_id.logo_url:\n" +"
\n" +" \n" +"
\n" +" %endif\n" +"
\n" +" " +msgstr "\n" +"
\n" +"\n" +"

Bonjour ${object.worker_id.name},

\n" +"\n" +"

Vous êtes attendu·e au magasin le ${format_tz(object.start_time,object.worker_id.tz or 'Europe/Brussels','%d.%m.%Y')} à ${format_tz(object.start_time,object.worker_id.tz or 'Europe/Brussels','%H:%M')}.\n" +"\n" +"

En cas d'indisponibilité, vous pouvez nous contacter à l'adresse suivante : ${object.worker_id.company_id.email}.\n" +"

\n" +"
\n" +"

Coopérativement vôtre,

\n" +"

${object.worker_id.company_id.name}.

\n" +"\n" +" % if object.worker_id.company_id.street:\n" +" ${object.worker_id.company_id.street}\n" +" % endif\n" +" % if object.worker_id.company_id.street2:\n" +" ${object.worker_id.company_id.street2}
\n" +" % endif\n" +" % if object.worker_id.company_id.city or object.worker_id.company_id.zip:\n" +" ${object.worker_id.company_id.zip} ${object.worker_id.company_id.city}
\n" +" % endif\n" +" % if object.worker_id.company_id.country_id:\n" +" ${object.worker_id.company_id.state_id and ('%s, ' % object.worker_id.company_id.state_id.name) or ''} ${object.worker_id.company_id.country_id.name or ''}
\n" +" % endif\n" +" % if object.worker_id.company_id.phone:\n" +" Phone:  ${object.worker_id.company_id.phone}\n" +" % endif\n" +"\n" +" % if object.worker_id.company_id.website:\n" +" \n" +" %endif\n" +" % if object.worker_id.company_id.logo_url:\n" +"
\n" +" \n" +"
\n" +" %endif\n" +"
\n" +" " + +#. module: beesdoo_shift +#: model:mail.template,body_html:beesdoo_shift.email_template_non_attendance +msgid "\n" +"
\n" +"\n" +"

Hello ${object.worker_id.name},

\n" +"\n" +"

You have been recorded as non-attended during your last shift (${object.start_time}).\n" +" % if object.worker_id.replaced_id:\n" +"

${object.worker_id.replaced_id.name} should have replaced you, but didn't come.
\n" +" % endif\n" +"\n" +"

Your status have been updated to \"${object.worker_id.state}\".\n" +"

If you have any question regarding this non-attendance, feel free to contact us.\n" +"

\n" +"
\n" +"

Sustainably yours,

\n" +"

${object.worker_id.company_id.name}.

\n" +"\n" +" % if object.worker_id.company_id.street:\n" +" ${object.worker_id.company_id.street}\n" +" % endif\n" +" % if object.worker_id.company_id.street2:\n" +" ${object.worker_id.company_id.street2}
\n" +" % endif\n" +" % if object.worker_id.company_id.city or object.worker_id.company_id.zip:\n" +" ${object.worker_id.company_id.zip} ${object.worker_id.company_id.city}
\n" +" % endif\n" +" % if object.worker_id.company_id.country_id:\n" +" ${object.worker_id.company_id.state_id and ('%s, ' % object.worker_id.company_id.state_id.name) or ''} ${object.worker_id.company_id.country_id.name or ''}
\n" +" % endif\n" +" % if object.worker_id.company_id.phone:\n" +" Phone:  ${object.worker_id.company_id.phone}\n" +" % endif\n" +"\n" +" % if object.worker_id.company_id.website:\n" +" \n" +" %endif\n" +" % if object.worker_id.company_id.logo_url:\n" +"
\n" +" \n" +"
\n" +" %endif\n" +"
\n" +" " +msgstr "\n" +"
\n" +"\n" +"

Hello ${object.worker_id.name},

\n" +"\n" +"

You have been recorded as non-attended during your last shift (${object.start_time}).\n" +" % if object.worker_id.replaced_id:\n" +"

${object.worker_id.replaced_id.name} should have replaced you, but didn't come.
\n" +" % endif\n" +"\n" +"

Your status have been updated to \"${object.worker_id.state}\".\n" +"

If you have any question regarding this non-attendance, feel free to contact us.\n" +"

\n" +"
\n" +"

Sustainably yours,

\n" +"

${object.worker_id.company_id.name}.

\n" +"\n" +" % if object.worker_id.company_id.street:\n" +" ${object.worker_id.company_id.street}\n" +" % endif\n" +" % if object.worker_id.company_id.street2:\n" +" ${object.worker_id.company_id.street2}
\n" +" % endif\n" +" % if object.worker_id.company_id.city or object.worker_id.company_id.zip:\n" +" ${object.worker_id.company_id.zip} ${object.worker_id.company_id.city}
\n" +" % endif\n" +" % if object.worker_id.company_id.country_id:\n" +" ${object.worker_id.company_id.state_id and ('%s, ' % object.worker_id.company_id.state_id.name) or ''} ${object.worker_id.company_id.country_id.name or ''}
\n" +" % endif\n" +" % if object.worker_id.company_id.phone:\n" +" Phone:  ${object.worker_id.company_id.phone}\n" +" % endif\n" +"\n" +" % if object.worker_id.company_id.website:\n" +" \n" +" %endif\n" +" % if object.worker_id.company_id.logo_url:\n" +"
\n" +" \n" +"
\n" +" %endif\n" +"
\n" +" " + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/models/planning.py:192 +#, python-format +msgid " is already assigned to " +msgstr " is already assigned to " + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_issue_count +msgid "# Issues" +msgstr "Nb. d'incidents" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search +msgid "4 next days" +msgstr "4 next days" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_kanban +msgid "
\n" +" Recurring Workers" +msgstr "
\n" +" Recurring Workers" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_needaction +msgid "Action Needed" +msgstr "A besoin d'une action" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_daynumber_active +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_active +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_type_active +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_active +msgid "Active" +msgstr "Actif" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_sheet_added +msgid "Added Shift" +msgstr "Added Shift" + +#. module: beesdoo_shift +#: model:ir.model.fields,help:beesdoo_shift.field_cooperative_status_time_extension +msgid "Addtional days to the automatic extension, 5 mean that you have a total of 15 extension days of default one is set to 10" +msgstr "Addtional days to the automatic extension, 5 mean that you have a total of 15 extension days of default one is set to 10" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.journal_form_view +msgid "Affected cooperator" +msgstr "Affected cooperator" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_age +msgid "Age" +msgstr "Age" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_alert_start_time +msgid "Alert Start Day" +msgstr "Alert Start Day" + +#. module: beesdoo_shift +#: selection:cooperative.status,status:0 +msgid "Alerte" +msgstr "Alerte" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_generation_view_form +msgid "Apply for Days" +msgstr "Apply for Days" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_unsubscribed +msgid "Are you sure to unsubscribe this cooperator" +msgstr "Are you sure to unsubscribe this cooperator" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.subscribe_coop_wizard_view_form +msgid "Are you sure to unsubscribe this cooperator ?" +msgstr "Are you sure to unsubscribe this cooperator ?" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search +msgid "Assigned" +msgstr "Assigned" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_sheet +msgid "Attendance sheet" +msgstr "Attendance sheet" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_extension_auto +#: model:ir.ui.view,arch_db:beesdoo_shift.super_coop_partner_inherited_view_form +msgid "Auto Extension" +msgstr "Auto Extension" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_calendar +#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_calendar +msgid "Calendar View" +msgstr "Vue calendrier" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_can_shop +msgid "Can shop" +msgstr "Can shop" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.assign_super_coop_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.extension_coop_wizard_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.holiday_coop_wizard_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.planning_instanciate_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.subscribe_coop_wizard_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_generation_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.temporary_exemption_wizard_view_form +msgid "Cancel" +msgstr "Annuler" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_history_change +msgid "Change" +msgstr "Change" + +#. module: beesdoo_shift +#: model:ir.actions.act_window,name:beesdoo_shift.act_assign_new_super_coop +msgid "Change Super Coop" +msgstr "Change Super Coop" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_sheet_validate +msgid "Check the user name and validate sheet.\n" +" Useless for users in group_cooperative_admin" +msgstr "Check the user name and validate sheet.\n" +" Useless for users in group_cooperative_admin" + +#. module: beesdoo_shift +#: model:ir.model.fields,help:beesdoo_shift.field_res_users_old_member +msgid "Check this box if this cooperator is no more an effective member." +msgstr "Check this box if this cooperator is no more an effective member." + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_child_eater_ids +msgid "Child eater ids" +msgstr "Child eater ids" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.coop_status_form_view +msgid "Clear History" +msgstr "Clear History" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_stage_code +msgid "Code" +msgstr "Code" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_color +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_stage_color +msgid "Color" +msgstr "Couleur" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_color +msgid "Color Index" +msgstr "Couleur" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_is_compensation +msgid "Compensation shift" +msgstr "Compensation shift" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_sc +msgid "Compteur shift de compensation" +msgstr "Compteur shift de compensation" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_sr +msgid "Compteur shift regulier" +msgstr "Compteur shift regulier" + +#. module: beesdoo_shift +#: model:ir.ui.menu,name:beesdoo_shift.menu_configuration_top +msgid "Configuration" +msgstr "Configuration" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.assign_super_coop_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.extension_coop_wizard_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.holiday_coop_wizard_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.planning_instanciate_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.subscribe_coop_wizard_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_generation_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.temporary_exemption_wizard_view_form +msgid "Confirm" +msgstr "Confirmer" + +#. module: beesdoo_shift +#: model:res.groups,name:beesdoo_shift.group_cooperative_admin +msgid "Cooperative Admin" +msgstr "Cooperative Admin" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_status +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_partner_state +#: model:ir.ui.menu,name:beesdoo_shift.menu_status +msgid "Cooperative Status" +msgstr "Cooperative Status" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_partner_cooperative_status_ids +msgid "Cooperative status ids" +msgstr "Cooperative status ids" + +#. module: beesdoo_shift +#: model:ir.actions.act_window,name:beesdoo_shift.action_coop_status +msgid "Cooperator Status" +msgstr "Cooperator Status" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_cooperator_type +msgid "Cooperator Type" +msgstr "Type de coopérateur" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_action_mixin_cooperator_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_extension_cooperator_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_holiday_cooperator_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_cooperator_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_temporary_exemption_cooperator_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_cooperator_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_history_cooperator_id +msgid "Cooperator id" +msgstr "Cooperator id" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_sheet_shift +msgid "Copy of an actual shift into an attendance sheet" +msgstr "Copy of an actual shift into an attendance sheet" + +#. module: beesdoo_shift +#: selection:cooperative.status.history,type:0 +msgid "Counter Change" +msgstr "Counter Change" + +#. module: beesdoo_shift +#: model:ir.actions.act_window,name:beesdoo_shift.action_journal +msgid "Counter Journal" +msgstr "Counter Journal" + +#. module: beesdoo_shift +#: model:ir.ui.menu,name:beesdoo_shift.menu_journal +msgid "Counter Update Journal" +msgstr "Counter Update Journal" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.coop_status_form_view +msgid "Counter and Status" +msgstr "Counter and Status" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_assign_super_coop_create_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_planning_create_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_create_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_line_create_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_daynumber_create_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_extension_create_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_holiday_create_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_journal_create_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_planning_create_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_create_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_stage_create_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_create_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_create_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_temporary_exemption_create_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_type_create_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_exempt_reason_create_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_create_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_history_create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_assign_super_coop_create_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_planning_create_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_create_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_line_create_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_daynumber_create_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_extension_create_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_holiday_create_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_journal_create_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_planning_create_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_create_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_stage_create_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_create_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_create_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_temporary_exemption_create_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_type_create_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_exempt_reason_create_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_create_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_history_create_date +msgid "Created on" +msgstr "Créé le" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.subscribe_coop_wizard_view_form +msgid "Current worker has more than one shift, subscribing him to a new shift will erase all previous shifts." +msgstr "Current worker has more than one shift, subscribing him to a new shift will erase all previous shifts." + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_generation_view_form +msgid "Daily Schedule" +msgstr "Daily Schedule" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_journal_date +#: model:ir.ui.view,arch_db:beesdoo_shift.coop_status_form_view +msgid "Date" +msgstr "Date" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_info_session_date +msgid "Date of information session" +msgstr "Date of information session" + +#. module: beesdoo_shift +#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_shift_message_last_post +msgid "Date of the last message posted on the record." +msgstr "Date du dernier message posté sur cet enregistrement" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_day_nb_id +#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search +msgid "Day" +msgstr "Jour" + +#. module: beesdoo_shift +#: model:ir.actions.act_window,name:beesdoo_shift.action_day_number +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_daynumber_number +msgid "Day Number" +msgstr "Day Number" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_day_ids +msgid "Day ids" +msgstr "Day ids" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_kanban +msgid "Delete" +msgstr "Supprimer" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_property_delivery_carrier_id +msgid "Delivery Method" +msgstr "Méthode de livraison" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_type_description +#: model:ir.ui.view,arch_db:beesdoo_shift.type_view_form +msgid "Description" +msgstr "Description" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_assign_super_coop_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_planning_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_line_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_action_mixin_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_daynumber_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_extension_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_holiday_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_journal_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_planning_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_stage_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_temporary_exemption_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_type_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_exempt_reason_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_history_display_name +msgid "Display Name" +msgstr "Nom affiché" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_duration +msgid "Duration" +msgstr "Durée" + +#. module: beesdoo_shift +#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_template_duration +msgid "Duration in Hour" +msgstr "Duration in Hour" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_eater +msgid "Eater/Worker" +msgstr "Eater/Worker" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_shift_view_kanban +msgid "Edit Shift" +msgstr "Edit Shift" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_kanban +msgid "Edit Shift\n" +" Template" +msgstr "Edit Shift\n" +" Template" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_effective_date +msgid "Effective date" +msgstr "Date effective" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_shift +msgid "Email Thread" +msgstr "Discussion par courriel" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_end_date +msgid "End date" +msgstr "End date" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_holiday_holiday_end_day +msgid "End date for the holiday (included)" +msgstr "End date for the holiday (included)" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_line_end_time +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_end_time +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_end_time +msgid "End time" +msgstr "End time" + +#. module: beesdoo_shift +#: model:ir.actions.act_window,name:beesdoo_shift.action_exempt_reason +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_exempt_reason_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_temporary_exemption_temporary_exempt_reason_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_exempt_reason_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_temporary_exempt_reason_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_partner_exempt_reason_id +#: model:ir.ui.menu,name:beesdoo_shift.menu_exempt_reason +msgid "Exempt Reason" +msgstr "Raison d'exemption" + +#. module: beesdoo_shift +#: selection:beesdoo.shift.subscribe,working_mode:0 +#: selection:cooperative.status,status:0 +#: selection:cooperative.status,working_mode:0 +msgid "Exempted" +msgstr "Exempted" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_sheet_expected +msgid "Expected Shift" +msgstr "Expected Shift" + +#. module: beesdoo_shift +#: selection:cooperative.status,status:0 +msgid "Extension" +msgstr "Extension" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_time_extension +msgid "Extension Days NB" +msgstr "Extension Days NB" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_extension_start_time +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_partner_extension_start_time +msgid "Extension Start Day" +msgstr "Extension Start Day" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_extension_extension_days +msgid "Extension days" +msgstr "Extension days" + +#. module: beesdoo_shift +#: model:ir.model.fields,help:beesdoo_shift.field_cooperative_status_today +msgid "Field that allow to compute field and store them even if they are based on the current date" +msgstr "Field that allow to compute field and store them even if they are based on the current date" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_planning_date_start +msgid "First Day of planning" +msgstr "First Day of planning" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_info_session +msgid "Followed an information session" +msgstr "Followed an information session" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_follower_ids +msgid "Followers" +msgstr "Abonnés" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_channel_ids +msgid "Followers (Channels)" +msgstr "Abonnés (Canaux)" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_partner_ids +msgid "Followers (Partners)" +msgstr "Abonnés (Partenaires)" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.coop_status_form_view +msgid "For testing purpose only" +msgstr "For testing purpose only" + +#. module: beesdoo_shift +#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_daynumber_number +msgid "From 1 to N, When you will instanciate your planning, Day 1 will be the start date of the instance, Day 2 the second, etc..." +msgstr "From 1 to N, When you will instanciate your planning, Day 1 will be the start date of the instance, Day 2 the second, etc..." + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_future_alert_date +msgid "Future alert date" +msgstr "Future alert date" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_gender +msgid "Gender" +msgstr "Genre" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.coop_status_form_view +msgid "General information" +msgstr "General information" + +#. module: beesdoo_shift +#: model:ir.actions.act_window,name:beesdoo_shift.action_generate_shift_template_wizard +msgid "Generate Shift Template" +msgstr "Generate Shift Template" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.type_view_form +msgid "Generate shift Templates" +msgstr "Generate shift Templates" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.planning_view_form +msgid "Generate shifts" +msgstr "Generate shifts" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/wizard/instanciate_planning.py:20 +#, python-format +msgid "Generated Shift" +msgstr "Generated Shift" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/wizard/batch_template.py:37 +#, python-format +msgid "Generated Shift Template" +msgstr "Generated Shift Template" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search +msgid "Group By" +msgstr "Regrouper par" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.coop_status_form_view +msgid "History" +msgstr "Historique" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_history_ids +msgid "History ids" +msgstr "History ids" + +#. module: beesdoo_shift +#: selection:cooperative.status,status:0 +msgid "Holidays" +msgstr "Holidays" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_holiday_end_time +msgid "Holidays End Day" +msgstr "Holidays End Day" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_holiday_start_time +msgid "Holidays Start Day" +msgstr "Holidays Start Day" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_assign_super_coop_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_planning_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_line_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_action_mixin_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_daynumber_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_extension_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_holiday_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_journal_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_planning_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_stage_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_temporary_exemption_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_type_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_exempt_reason_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_history_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_id +msgid "ID" +msgstr "ID" + +#. module: beesdoo_shift +#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_shift_message_unread +msgid "If checked new messages require your attention." +msgstr "Si coché, de nouveaux messages demandent votre attention." + +#. module: beesdoo_shift +#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_shift_message_needaction +msgid "If checked, new messages require your attention." +msgstr "si elle est cochée, de nouveaux messages requièrent votre attention." + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_info_session +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_partner_info_session +msgid "Information Session ?" +msgstr "Information Session ?" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_info_session_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_partner_info_session_date +msgid "Information Session Date" +msgstr "Information Session Date" + +#. module: beesdoo_shift +#: model:ir.actions.act_window,name:beesdoo_shift.action_generate_shift_wizard +msgid "Instanciate Planning Action" +msgstr "Instanciate Planning Action" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_irregular_absence_counter +msgid "Irregular absence counter" +msgstr "Irregular absence counter" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_irregular_absence_date +msgid "Irregular absence date" +msgstr "Irregular absence date" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_irregular_start_date +msgid "Irregular start date" +msgstr "Irregular start date" + +#. module: beesdoo_shift +#: selection:beesdoo.shift.subscribe,working_mode:0 +#: selection:cooperative.status,working_mode:0 +msgid "Irregular worker" +msgstr "Irregular worker" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_is_follower +msgid "Is Follower" +msgstr "Est un abonné" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search +msgid "J-1" +msgstr "J-1" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search +msgid "J-2" +msgstr "J-2" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search +msgid "J-3" +msgstr "J-3" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search +msgid "J-4" +msgstr "J-4" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search +msgid "J-5" +msgstr "J-5" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_last_post +msgid "Last Message Date" +msgstr "Date du dernier message" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_assign_super_coop___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_planning___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_line___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_action_mixin___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_daynumber___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_extension___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_holiday___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_journal___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_planning___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_stage___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_temporary_exemption___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_type___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_exempt_reason___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_history___last_update +msgid "Last Modified on" +msgstr "Dernière modification le" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_assign_super_coop_write_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_planning_write_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_line_write_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_write_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_daynumber_write_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_extension_write_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_holiday_write_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_journal_write_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_planning_write_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_write_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_stage_write_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_write_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_write_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_temporary_exemption_write_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_type_write_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_exempt_reason_write_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_history_write_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_write_uid +msgid "Last Updated by" +msgstr "Mis à jour par" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_assign_super_coop_write_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_planning_write_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_line_write_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_write_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_daynumber_write_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_extension_write_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_holiday_write_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_journal_write_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_planning_write_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_write_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_stage_write_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_write_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_write_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_temporary_exemption_write_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_type_write_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_exempt_reason_write_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_history_write_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_write_date +msgid "Last Updated on" +msgstr "Mis à jour le" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_last_printed +msgid "Last printed on" +msgstr "Last printed on" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_line_ids +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_journal_line_ids +msgid "Line ids" +msgstr "Line ids" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/models/cooperative_status.py:451 +#: model:ir.ui.view,arch_db:beesdoo_shift.super_coop_partner_inherited_view_form +#, python-format +msgid "Manual Extension" +msgstr "Manual Extension" + +#. module: beesdoo_shift +#: model:ir.model.fields,help:beesdoo_shift.field_cooperative_status_unsubscribed +msgid "Manually unsubscribed" +msgstr "Manually unsubscribed" + +#. module: beesdoo_shift +#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_template_worker_nb +msgid "Max number of worker for this task" +msgstr "Max number of worker for this task" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_member_card_ids +msgid "Member card ids" +msgstr "Member card ids" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_ids +msgid "Messages" +msgstr "Messages" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search +msgid "My Shift" +msgstr "Mes shifts" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_search +#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search +msgid "My Team Shift" +msgstr "My Team Shift" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_daynumber_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_planning_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_stage_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_type_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_exempt_reason_name +msgid "Name" +msgstr "Nom" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_assign_super_coop_super_coop_id +msgid "New Super Cooperative" +msgstr "New Super Cooperative" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_next_countdown_date +msgid "Next countdown date" +msgstr "Next countdown date" + +#. module: beesdoo_shift +#: model:mail.template,subject:beesdoo_shift.email_template_non_attendance +msgid "Non-attendance to your last shift." +msgstr "Non-attendance to your last shift." + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_needaction_counter +msgid "Number of Actions" +msgstr "Nombre d'Actions" + +#. module: beesdoo_shift +#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_shift_message_needaction_counter +msgid "Number of messages which requires an action" +msgstr "Nombre de messages demandant une action" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_nb_shifts +msgid "Number of shifts" +msgstr "Number of shifts" + +#. module: beesdoo_shift +#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_shift_message_unread_counter +msgid "Number of unread messages" +msgstr "Nombre de messages non lus" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_worker_nb +msgid "Number of worker" +msgstr "Number of worker" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_old_member +msgid "Old cooperator" +msgstr "Ancien cooperateur" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_parent_barcode +msgid "Parent Barcode" +msgstr "Parent Barcode" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_parent_eater_id +msgid "Parent Worker" +msgstr "Parent Worker" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_res_partner +msgid "Partner" +msgstr "Partenaire" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_search +msgid "Place Available" +msgstr "Place Available" + +#. module: beesdoo_shift +#: model:ir.ui.menu,name:beesdoo_shift.menu_task_top +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_search +msgid "Planning" +msgstr "Planning" + +#. module: beesdoo_shift +#: model:ir.actions.act_window,name:beesdoo_shift.action_planning +#: model:ir.actions.act_window,name:beesdoo_shift.action_shift_template +msgid "Planning Action" +msgstr "Planning Action" + +#. module: beesdoo_shift +#: model:res.groups,name:beesdoo_shift.group_planning_management +msgid "Planning Management" +msgstr "Planning Management" + +#. module: beesdoo_shift +#: model:ir.ui.menu,name:beesdoo_shift.menu_planning +msgid "Planning Week" +msgstr "Planning Week" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_planning_planning_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_planning_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_planning_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_planning_id +msgid "Planning id" +msgstr "Planning id" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_member_card_to_be_printed +msgid "Print BEES card?" +msgstr "Print BEES card?" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_website_private +msgid "Private Profile" +msgstr "Profil privé" + +#. module: beesdoo_shift +#: model:res.groups,comment:beesdoo_shift.group_shift_attendance +msgid "Read only sur worker.info " +msgstr "Read only sur worker.info + Delay de Grâce" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_worker_ids +msgid "Recurrent worker assigned" +msgstr "Recurrent worker assigned" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_form +msgid "Recurring Workers" +msgstr "Recurring Workers" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/models/cooperative_status.py:469 +#, python-format +msgid "Register Holiday" +msgstr "Register Holiday" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.super_coop_partner_inherited_view_form +msgid "Register Holidays" +msgstr "Register Holidays" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_shift_view_kanban +msgid "Regular Shift" +msgstr "Regular Shift" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_is_regular +msgid "Regular shift" +msgstr "Regular shift" + +#. module: beesdoo_shift +#: selection:beesdoo.shift.subscribe,working_mode:0 +#: selection:cooperative.status,working_mode:0 +msgid "Regular worker" +msgstr "Regular worker" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_remaining_worker +msgid "Remaining Place" +msgstr "Remaining Place" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_replaced_id +msgid "Replaced id" +msgstr "Replaced id" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_reset_compensation_counter +msgid "Reset compensation counter" +msgstr "Reset compensation counter" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_reset_counter +msgid "Reset counter" +msgstr "Reset counter" + +#. module: beesdoo_shift +#: selection:cooperative.status,status:0 +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_resigning +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_resigning +msgid "Resigning" +msgstr "Resigning" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_revert_info +msgid "Revert info" +msgstr "Revert info" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.journal_form_view +msgid "Run again for this day" +msgstr "Run again for this day" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_planning_sequence +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_stage_sequence +msgid "Sequence" +msgstr "Séquence" + +#. module: beesdoo_shift +#: model:ir.ui.menu,name:beesdoo_shift.menu_task +msgid "Shift" +msgstr "Shift" + +#. module: beesdoo_shift +#: model:ir.actions.act_window,name:beesdoo_shift.action_task_attendance +#: model:ir.ui.menu,name:beesdoo_shift.menu_task_attendance +#: model:res.groups,name:beesdoo_shift.group_shift_attendance +msgid "Shift Attendance" +msgstr "Shift Attendance" + +#. module: beesdoo_shift +#: model:ir.ui.menu,name:beesdoo_shift.menu_configuration_day +msgid "Shift Day" +msgstr "Shift Day" + +#. module: beesdoo_shift +#: model:ir.ui.menu,name:beesdoo_shift.menu_root +#: model:res.groups,name:beesdoo_shift.group_shift_management +msgid "Shift Management" +msgstr "Shift Management" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search +msgid "Shift Template" +msgstr "Shift Template" + +#. module: beesdoo_shift +#: model:ir.actions.act_window,name:beesdoo_shift.action_type +#: model:ir.ui.menu,name:beesdoo_shift.menu_configuration_type +msgid "Shift Type" +msgstr "Shift Type" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_shift_id +msgid "Shift id" +msgstr "Shift id" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_assign_super_coop_shift_ids +msgid "Shift ids" +msgstr "Shift ids" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.planning_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.planning_view_tree +msgid "Shifts Template" +msgstr "Shifts Template" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_stage_id +msgid "Stage id" +msgstr "Stage id" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_irregular_start_date +msgid "Start Date" +msgstr "Date de début" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_start_date +msgid "Start date" +msgstr "Start date" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_extension_extension_start_date +msgid "Start date for the extension" +msgstr "Start date for the extension" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_holiday_holiday_start_day +msgid "Start date for the holiday" +msgstr "Start date for the holiday" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_line_start_time +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_start_time +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_start_time +msgid "Start time" +msgstr "Start time" + +#. module: beesdoo_shift +#: model:ir.ui.menu,name:beesdoo_shift.menu_status_top +#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search +msgid "Status" +msgstr "Statut" + +#. module: beesdoo_shift +#: selection:cooperative.status.history,type:0 +msgid "Status Change" +msgstr "Status Change" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_history_status_id +msgid "Status id" +msgstr "Status id" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_shift_view_kanban +msgid "Status:" +msgstr "Statut :" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/models/cooperative_status.py:434 +#, python-format +msgid "Subscribe Cooperator" +msgstr "Subscribe Cooperator" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.super_coop_partner_inherited_view_form +msgid "Subscribe to shift" +msgstr "Subscribe to shift" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.super_coop_partner_inherited_view_form +msgid "Subscribed Shift" +msgstr "Subscribed Shift" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_partner_subscribed_shift_ids +msgid "Subscribed shift ids" +msgstr "Subscribed shift ids" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_shift_view_kanban +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_kanban +msgid "Super Coop:" +msgstr "Super Coop:" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_super_coop_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_super_coop_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_super +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_partner_super +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_super +msgid "Super Cooperative" +msgstr "Super Cooperative" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_super +msgid "Super Cooperator" +msgstr "Super Cooperator" + +#. module: beesdoo_shift +#: selection:cooperative.status,status:0 +msgid "Suspended" +msgstr "Suspended" + +#. module: beesdoo_shift +#: model:ir.actions.act_window,name:beesdoo_shift.action_task +msgid "Task Action" +msgstr "Task Action" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_task_type_id +msgid "Task Type" +msgstr "Task Type" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_task_template_id +msgid "Task template id" +msgstr "Task template id" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_planning_task_template_ids +msgid "Task template ids" +msgstr "Task template ids" + +#. module: beesdoo_shift +#: model:ir.ui.menu,name:beesdoo_shift.menu_template_top +msgid "Templates" +msgstr "Modèles" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/models/cooperative_status.py:480 +#: model:ir.ui.view,arch_db:beesdoo_shift.coop_status_form_view +#: model:ir.ui.view,arch_db:beesdoo_shift.super_coop_partner_inherited_view_form +#, python-format +msgid "Temporary Exemption" +msgstr "Temporary Exemption" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_temporary_exemption_temporary_exempt_end_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_temporary_exempt_end_date +msgid "Temporary exempt end date" +msgstr "Temporary exempt end date" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_temporary_exemption_temporary_exempt_start_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_temporary_exempt_start_date +msgid "Temporary exempt start date" +msgstr "Temporary exempt start date" + +#. module: beesdoo_shift +#: model:ir.model.fields,help:beesdoo_shift.field_res_users_website_url +msgid "The full URL to access the document through the website." +msgstr "L'URL complète afin d'accéder au document à travers le site web." + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/models/task.py:236 +#, python-format +msgid "The worker has not a proper working mode define, please check the worker is subscribed" +msgstr "The worker has not a proper working mode define, please check the worker is subscribed" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/wizard/subscribe.py:105 +#, python-format +msgid "There is no remaining space for this shift" +msgstr "There is no remaining space for this shift" + +#. module: beesdoo_shift +#: model:ir.model.fields,help:beesdoo_shift.field_res_users_property_delivery_carrier_id +msgid "This delivery method will be used when invoicing from picking." +msgstr "Cette méthode de livraison sera utilisée lorsqu'on facturera sur base du colisage." + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.coop_status_form_view +msgid "Timing information" +msgstr "Timing information" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_today +#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search +msgid "Today" +msgstr "Aujourd'hui" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/models/cooperative_status.py:463 +#, python-format +msgid "Trigger Grace Delay" +msgstr "Trigger Grace Delay" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_task_type_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_history_type +#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search +msgid "Type" +msgstr "Type" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_type_id +msgid "Type id" +msgstr "Type id" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_shift_view_kanban +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_kanban +msgid "Type:" +msgstr "Type :" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search +msgid "Unassigned" +msgstr "Non assigné" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_unread +msgid "Unread Messages" +msgstr "Messages non lus" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_unread_counter +msgid "Unread Messages Counter" +msgstr "Compteur de messages non lus" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.super_coop_partner_inherited_view_form +msgid "Unsubscribe" +msgstr "Se désabonner" + +#. module: beesdoo_shift +#: selection:cooperative.status,status:0 +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_unsubscribed +msgid "Unsubscribed" +msgstr "Unsubscribed" + +#. module: beesdoo_shift +#: selection:cooperative.status,status:0 +msgid "Up to Date" +msgstr "Up to Date" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_history_user_id +msgid "User" +msgstr "Utilisateur" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_res_users +msgid "Users" +msgstr "Utilisateurs" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_website_published +msgid "Visible in Website" +msgstr "Visible sur le site web" + +#. module: beesdoo_shift +#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_subscribe_resigning +#: model:ir.model.fields,help:beesdoo_shift.field_cooperative_status_resigning +msgid "Want to leave the beescoop" +msgstr "Want to leave the beescoop" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/models/planning.py:197 +#, python-format +msgid "Warning" +msgstr "Warning" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_website_message_ids +msgid "Website Messages" +msgstr "Messages du site web" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_website_description +msgid "Website Partner Full Description" +msgstr "Description complète du site web partenaire" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_website_short_description +msgid "Website Partner Short Description" +msgstr "Description courte du site web partenaire" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_website_url +msgid "Website URL" +msgstr "URL du site" + +#. module: beesdoo_shift +#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_shift_website_message_ids +msgid "Website communication history" +msgstr "Historique de communication du site web" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_website_meta_description +msgid "Website meta description" +msgstr "Méta description du site web" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_website_meta_keywords +msgid "Website meta keywords" +msgstr "Mots clefs du site web" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_website_meta_title +msgid "Website meta title" +msgstr "Titre du site web" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_search +msgid "Week Day" +msgstr "Week Day" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_line_wizard_id +msgid "Wizard id" +msgstr "Wizard id" + +#. module: beesdoo_shift +#: model:ir.actions.act_window,name:beesdoo_shift.action_worker +#: model:ir.ui.menu,name:beesdoo_shift.menu_worker +#: model:ir.ui.menu,name:beesdoo_shift.menu_worker_top +msgid "Worker" +msgstr "Worker" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_kanban +msgid "Worker Number:" +msgstr "Worker Number:" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_worker_id +msgid "Worker id" +msgstr "Worker id" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_worker_name +msgid "Worker name" +msgstr "Worker name" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_line_worker_nb +msgid "Worker nb" +msgstr "Worker nb" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_shift_view_kanban +msgid "Worker:" +msgstr "Worker:" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_working_mode +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_working_mode +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_working_mode +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_partner_working_mode +msgid "Working mode" +msgstr "Working mode" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/models/task.py:20 +#, python-format +msgid "You Cannot delete Task Stage" +msgstr "You Cannot delete Task Stage" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/models/cooperative_status.py:408 +#: sql_constraint:beesdoo.shift.journal:0 +#, python-format +msgid "You can only create one journal per day" +msgstr "You can only create one journal per day" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/models/cooperative_status.py:353 +#: sql_constraint:cooperative.status:0 +#, python-format +msgid "You can only set one cooperator status per cooperator" +msgstr "You can only set one cooperator status per cooperator" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/models/task.py:195 +#, python-format +msgid "You cannot change to the status %s if the is no worker defined on the shift" +msgstr "You cannot change to the status %s if the is no worker defined on the shift" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/wizard/holiday.py:17 +#, python-format +msgid "You cannot encode new holidays since the previous holidays encoded are not over yet" +msgstr "You cannot encode new holidays since the previous holidays encoded are not over yet" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/wizard/temporary_exemption.py:18 +#, python-format +msgid "You cannot encode new temporary exemptuon since the previous one are not over yet" +msgstr "You cannot encode new temporary exemptuon since the previous one are not over yet" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/wizard/subscribe.py:15 +#, python-format +msgid "You cannot perform this operation on yourself" +msgstr "You cannot perform this operation on yourself" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/models/cooperative_status.py:415 +#, python-format +msgid "You don't have the access to perform this action" +msgstr "You don't have the access to perform this action" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/wizard/subscribe.py:13 +#, python-format +msgid "You don't have the required access for this operation." +msgstr "You don't have the required access for this operation." + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/wizard/extension.py:29 +#, python-format +msgid "You should not make a manual extension when the grace delay has not been triggered yet" +msgstr "You should not make a manual extension when the grace delay has not been triggered yet" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/wizard/extension.py:34 +#, python-format +msgid "You should not start a manual extension during the grace delay" +msgstr "You should not start a manual extension during the grace delay" + +#. module: beesdoo_shift +#: model:mail.template,subject:beesdoo_shift.email_template_shift_summary +msgid "Your next shift (${format_tz(object.start_time,object.worker_id.tz or 'Europe/Brussels','%d.%m.%Y - %H:%M')})" +msgstr "Votre prochain shift (${format_tz(object.start_time,object.worker_id.tz or 'Europe/Brussels','%d.%m.%Y - %H:%M')})" + +#. module: beesdoo_shift +#: model:mail.template,subject:beesdoo_shift.email_template_non_validated_sheet +msgid "[${object.day}] Non-validated sheet ${object.time_slot}" +msgstr "[${object.day}] Non-validated sheet ${object.time_slot}" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesddoo_shift_assign_super_coop +msgid "beesddoo.shift.assign_super_coop" +msgstr "beesddoo.shift.assign_super_coop" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesddoo_shift_generate_planning +msgid "beesddoo.shift.generate_planning" +msgstr "beesddoo.shift.generate_planning" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesddoo_shift_generate_shift_template +msgid "beesddoo.shift.generate_shift_template" +msgstr "beesddoo.shift.generate_shift_template" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesddoo_shift_generate_shift_template_line +msgid "beesddoo.shift.generate_shift_template.line" +msgstr "beesddoo.shift.generate_shift_template.line" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_action_mixin +msgid "beesdoo.shift.action_mixin" +msgstr "beesdoo.shift.action_mixin" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_config_settings +msgid "beesdoo.shift.config.settings" +msgstr "beesdoo.shift.config.settings" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_daynumber +msgid "beesdoo.shift.daynumber" +msgstr "beesdoo.shift.daynumber" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_extension +msgid "beesdoo.shift.extension" +msgstr "beesdoo.shift.extension" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_holiday +msgid "beesdoo.shift.holiday" +msgstr "beesdoo.shift.holiday" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_journal +msgid "beesdoo.shift.journal" +msgstr "beesdoo.shift.journal" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_planning +msgid "beesdoo.shift.planning" +msgstr "beesdoo.shift.planning" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_stage +msgid "beesdoo.shift.stage" +msgstr "beesdoo.shift.stage" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_subscribe +msgid "beesdoo.shift.subscribe" +msgstr "beesdoo.shift.subscribe" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_template +msgid "beesdoo.shift.template" +msgstr "beesdoo.shift.template" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_temporary_exemption +msgid "beesdoo.shift.temporary_exemption" +msgstr "beesdoo.shift.temporary_exemption" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_type +msgid "beesdoo.shift.type" +msgstr "beesdoo.shift.type" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_cooperative_exempt_reason +msgid "cooperative.exempt.reason" +msgstr "cooperative.exempt.reason" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_cooperative_status +msgid "cooperative.status" +msgstr "cooperative.status" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_cooperative_status_history +msgid "cooperative.status.history" +msgstr "cooperative.status.history" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.planning_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_form +msgid "name" +msgstr "nom" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.assign_super_coop_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.extension_coop_wizard_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.planning_instanciate_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.subscribe_coop_wizard_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_generation_view_form +msgid "or" +msgstr "ou" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_self +msgid "unknown" +msgstr "inconnu" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/models/planning.py:141 +#, python-format +msgid "you cannot assign more worker then the number maximal define on the template" +msgstr "you cannot assign more worker then the number maximal define on the template" diff --git a/beesdoo_shift/i18n/fr_BE.po b/beesdoo_shift/i18n/fr_BE.po new file mode 100644 index 0000000..b19a476 --- /dev/null +++ b/beesdoo_shift/i18n/fr_BE.po @@ -0,0 +1,1837 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * beesdoo_shift +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-24 12:06+0000\n" +"PO-Revision-Date: 2019-12-24 12:06+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: beesdoo_shift +#: model:mail.template,body_html:beesdoo_shift.email_template_non_validated_sheet +msgid "\n" +"
\n" +"\n" +"

${object.day}\n" +"

The attendance sheet for ${object.time_slot} is not validated.\n" +"

Please, do it as soon as possible so as to update workers' status.\n" +"

\n" +"\n" +"
\n" +" " +msgstr "\n" +"
\n" +"\n" +"

${object.day}\n" +"

The attendance sheet for ${object.time_slot} is not validated.\n" +"

Please, do it as soon as possible so as to update workers' status.\n" +"

\n" +"\n" +"
\n" +" " + +#. module: beesdoo_shift +#: model:mail.template,body_html:beesdoo_shift.email_template_shift_summary +msgid "\n" +"
\n" +"\n" +"

Hello ${object.worker_id.name},

\n" +"\n" +"

You are awaited the ${format_tz(object.start_time,object.worker_id.tz or 'Europe/Brussels','%d.%m.%Y')}\n" +" for the shift starting at ${format_tz(object.start_time,object.worker_id.tz or 'Europe/Brussels','%H:%M')}.\n" +"\n" +"

Please contact us at ${object.worker_id.company_id.email} if you have any trouble attending the shift.\n" +"

\n" +"
\n" +"

Sustainably yours,

\n" +"

${object.worker_id.company_id.name}.

\n" +"\n" +" % if object.worker_id.company_id.street:\n" +" ${object.worker_id.company_id.street}\n" +" % endif\n" +" % if object.worker_id.company_id.street2:\n" +" ${object.worker_id.company_id.street2}
\n" +" % endif\n" +" % if object.worker_id.company_id.city or object.worker_id.company_id.zip:\n" +" ${object.worker_id.company_id.zip} ${object.worker_id.company_id.city}
\n" +" % endif\n" +" % if object.worker_id.company_id.country_id:\n" +" ${object.worker_id.company_id.state_id and ('%s, ' % object.worker_id.company_id.state_id.name) or ''} ${object.worker_id.company_id.country_id.name or ''}
\n" +" % endif\n" +" % if object.worker_id.company_id.phone:\n" +" Phone:  ${object.worker_id.company_id.phone}\n" +" % endif\n" +"\n" +" % if object.worker_id.company_id.website:\n" +" \n" +" %endif\n" +" % if object.worker_id.company_id.logo_url:\n" +"
\n" +" \n" +"
\n" +" %endif\n" +"
\n" +" " +msgstr "\n" +"
\n" +"\n" +"

Bonjour ${object.worker_id.name},

\n" +"\n" +"

Vous êtes attendu·e au magasin le ${format_tz(object.start_time,object.worker_id.tz or 'Europe/Brussels','%d.%m.%Y')} à ${format_tz(object.start_time,object.worker_id.tz or 'Europe/Brussels','%H:%M')}.\n" +"\n" +"

En cas d'indisponibilité, vous pouvez nous contacter à l'adresse suivante : ${object.worker_id.company_id.email}.\n" +"

\n" +"
\n" +"

Coopérativement vôtre,

\n" +"

${object.worker_id.company_id.name}.

\n" +"\n" +" % if object.worker_id.company_id.street:\n" +" ${object.worker_id.company_id.street}\n" +" % endif\n" +" % if object.worker_id.company_id.street2:\n" +" ${object.worker_id.company_id.street2}
\n" +" % endif\n" +" % if object.worker_id.company_id.city or object.worker_id.company_id.zip:\n" +" ${object.worker_id.company_id.zip} ${object.worker_id.company_id.city}
\n" +" % endif\n" +" % if object.worker_id.company_id.country_id:\n" +" ${object.worker_id.company_id.state_id and ('%s, ' % object.worker_id.company_id.state_id.name) or ''} ${object.worker_id.company_id.country_id.name or ''}
\n" +" % endif\n" +" % if object.worker_id.company_id.phone:\n" +" Phone:  ${object.worker_id.company_id.phone}\n" +" % endif\n" +"\n" +" % if object.worker_id.company_id.website:\n" +" \n" +" %endif\n" +" % if object.worker_id.company_id.logo_url:\n" +"
\n" +" \n" +"
\n" +" %endif\n" +"
\n" +" " + +#. module: beesdoo_shift +#: model:mail.template,body_html:beesdoo_shift.email_template_non_attendance +msgid "\n" +"
\n" +"\n" +"

Hello ${object.worker_id.name},

\n" +"\n" +"

You have been recorded as non-attended during your last shift (${object.start_time}).\n" +" % if object.worker_id.replaced_id:\n" +"

${object.worker_id.replaced_id.name} should have replaced you, but didn't come.
\n" +" % endif\n" +"\n" +"

Your status have been updated to \"${object.worker_id.state}\".\n" +"

If you have any question regarding this non-attendance, feel free to contact us.\n" +"

\n" +"
\n" +"

Sustainably yours,

\n" +"

${object.worker_id.company_id.name}.

\n" +"\n" +" % if object.worker_id.company_id.street:\n" +" ${object.worker_id.company_id.street}\n" +" % endif\n" +" % if object.worker_id.company_id.street2:\n" +" ${object.worker_id.company_id.street2}
\n" +" % endif\n" +" % if object.worker_id.company_id.city or object.worker_id.company_id.zip:\n" +" ${object.worker_id.company_id.zip} ${object.worker_id.company_id.city}
\n" +" % endif\n" +" % if object.worker_id.company_id.country_id:\n" +" ${object.worker_id.company_id.state_id and ('%s, ' % object.worker_id.company_id.state_id.name) or ''} ${object.worker_id.company_id.country_id.name or ''}
\n" +" % endif\n" +" % if object.worker_id.company_id.phone:\n" +" Phone:  ${object.worker_id.company_id.phone}\n" +" % endif\n" +"\n" +" % if object.worker_id.company_id.website:\n" +" \n" +" %endif\n" +" % if object.worker_id.company_id.logo_url:\n" +"
\n" +" \n" +"
\n" +" %endif\n" +"
\n" +" " +msgstr "\n" +"
\n" +"\n" +"

Hello ${object.worker_id.name},

\n" +"\n" +"

You have been recorded as non-attended during your last shift (${object.start_time}).\n" +" % if object.worker_id.replaced_id:\n" +"

${object.worker_id.replaced_id.name} should have replaced you, but didn't come.
\n" +" % endif\n" +"\n" +"

Your status have been updated to \"${object.worker_id.state}\".\n" +"

If you have any question regarding this non-attendance, feel free to contact us.\n" +"

\n" +"
\n" +"

Sustainably yours,

\n" +"

${object.worker_id.company_id.name}.

\n" +"\n" +" % if object.worker_id.company_id.street:\n" +" ${object.worker_id.company_id.street}\n" +" % endif\n" +" % if object.worker_id.company_id.street2:\n" +" ${object.worker_id.company_id.street2}
\n" +" % endif\n" +" % if object.worker_id.company_id.city or object.worker_id.company_id.zip:\n" +" ${object.worker_id.company_id.zip} ${object.worker_id.company_id.city}
\n" +" % endif\n" +" % if object.worker_id.company_id.country_id:\n" +" ${object.worker_id.company_id.state_id and ('%s, ' % object.worker_id.company_id.state_id.name) or ''} ${object.worker_id.company_id.country_id.name or ''}
\n" +" % endif\n" +" % if object.worker_id.company_id.phone:\n" +" Phone:  ${object.worker_id.company_id.phone}\n" +" % endif\n" +"\n" +" % if object.worker_id.company_id.website:\n" +" \n" +" %endif\n" +" % if object.worker_id.company_id.logo_url:\n" +"
\n" +" \n" +"
\n" +" %endif\n" +"
\n" +" " + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/models/planning.py:192 +#, python-format +msgid " is already assigned to " +msgstr " is already assigned to " + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_issue_count +msgid "# Issues" +msgstr "Nb. d'incidents" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search +msgid "4 next days" +msgstr "4 next days" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_kanban +msgid "
\n" +" Recurring Workers" +msgstr "
\n" +" Recurring Workers" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_needaction +msgid "Action Needed" +msgstr "A besoin d'une action" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_daynumber_active +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_active +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_type_active +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_active +msgid "Active" +msgstr "Actif" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_sheet_added +msgid "Added Shift" +msgstr "Added Shift" + +#. module: beesdoo_shift +#: model:ir.model.fields,help:beesdoo_shift.field_cooperative_status_time_extension +msgid "Addtional days to the automatic extension, 5 mean that you have a total of 15 extension days of default one is set to 10" +msgstr "Addtional days to the automatic extension, 5 mean that you have a total of 15 extension days of default one is set to 10" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.journal_form_view +msgid "Affected cooperator" +msgstr "Affected cooperator" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_age +msgid "Age" +msgstr "Age" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_alert_start_time +msgid "Alert Start Day" +msgstr "Alert Start Day" + +#. module: beesdoo_shift +#: selection:cooperative.status,status:0 +msgid "Alerte" +msgstr "Alerte" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_generation_view_form +msgid "Apply for Days" +msgstr "Apply for Days" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_unsubscribed +msgid "Are you sure to unsubscribe this cooperator" +msgstr "Are you sure to unsubscribe this cooperator" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.subscribe_coop_wizard_view_form +msgid "Are you sure to unsubscribe this cooperator ?" +msgstr "Are you sure to unsubscribe this cooperator ?" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search +msgid "Assigned" +msgstr "Assigned" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_sheet +msgid "Attendance sheet" +msgstr "Attendance sheet" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_extension_auto +#: model:ir.ui.view,arch_db:beesdoo_shift.super_coop_partner_inherited_view_form +msgid "Auto Extension" +msgstr "Auto Extension" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_calendar +#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_calendar +msgid "Calendar View" +msgstr "Vue calendrier" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_can_shop +msgid "Can shop" +msgstr "Can shop" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.assign_super_coop_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.extension_coop_wizard_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.holiday_coop_wizard_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.planning_instanciate_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.subscribe_coop_wizard_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_generation_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.temporary_exemption_wizard_view_form +msgid "Cancel" +msgstr "Annuler" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_history_change +msgid "Change" +msgstr "Change" + +#. module: beesdoo_shift +#: model:ir.actions.act_window,name:beesdoo_shift.act_assign_new_super_coop +msgid "Change Super Coop" +msgstr "Change Super Coop" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_sheet_validate +msgid "Check the user name and validate sheet.\n" +" Useless for users in group_cooperative_admin" +msgstr "Check the user name and validate sheet.\n" +" Useless for users in group_cooperative_admin" + +#. module: beesdoo_shift +#: model:ir.model.fields,help:beesdoo_shift.field_res_users_old_member +msgid "Check this box if this cooperator is no more an effective member." +msgstr "Check this box if this cooperator is no more an effective member." + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_child_eater_ids +msgid "Child eater ids" +msgstr "Child eater ids" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.coop_status_form_view +msgid "Clear History" +msgstr "Clear History" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_stage_code +msgid "Code" +msgstr "Code" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_color +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_stage_color +msgid "Color" +msgstr "Couleur" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_color +msgid "Color Index" +msgstr "Couleur" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_is_compensation +msgid "Compensation shift" +msgstr "Compensation shift" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_sc +msgid "Compteur shift de compensation" +msgstr "Compteur shift de compensation" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_sr +msgid "Compteur shift regulier" +msgstr "Compteur shift regulier" + +#. module: beesdoo_shift +#: model:ir.ui.menu,name:beesdoo_shift.menu_configuration_top +msgid "Configuration" +msgstr "Configuration" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.assign_super_coop_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.extension_coop_wizard_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.holiday_coop_wizard_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.planning_instanciate_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.subscribe_coop_wizard_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_generation_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.temporary_exemption_wizard_view_form +msgid "Confirm" +msgstr "Confirmer" + +#. module: beesdoo_shift +#: model:res.groups,name:beesdoo_shift.group_cooperative_admin +msgid "Cooperative Admin" +msgstr "Cooperative Admin" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_status +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_partner_state +#: model:ir.ui.menu,name:beesdoo_shift.menu_status +msgid "Cooperative Status" +msgstr "Cooperative Status" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_partner_cooperative_status_ids +msgid "Cooperative status ids" +msgstr "Cooperative status ids" + +#. module: beesdoo_shift +#: model:ir.actions.act_window,name:beesdoo_shift.action_coop_status +msgid "Cooperator Status" +msgstr "Cooperator Status" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_cooperator_type +msgid "Cooperator Type" +msgstr "Type de coopérateur" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_action_mixin_cooperator_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_extension_cooperator_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_holiday_cooperator_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_cooperator_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_temporary_exemption_cooperator_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_cooperator_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_history_cooperator_id +msgid "Cooperator id" +msgstr "Cooperator id" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_sheet_shift +msgid "Copy of an actual shift into an attendance sheet" +msgstr "Copy of an actual shift into an attendance sheet" + +#. module: beesdoo_shift +#: selection:cooperative.status.history,type:0 +msgid "Counter Change" +msgstr "Counter Change" + +#. module: beesdoo_shift +#: model:ir.actions.act_window,name:beesdoo_shift.action_journal +msgid "Counter Journal" +msgstr "Counter Journal" + +#. module: beesdoo_shift +#: model:ir.ui.menu,name:beesdoo_shift.menu_journal +msgid "Counter Update Journal" +msgstr "Counter Update Journal" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.coop_status_form_view +msgid "Counter and Status" +msgstr "Counter and Status" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_assign_super_coop_create_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_planning_create_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_create_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_line_create_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_daynumber_create_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_extension_create_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_holiday_create_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_journal_create_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_planning_create_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_create_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_stage_create_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_create_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_create_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_temporary_exemption_create_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_type_create_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_exempt_reason_create_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_create_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_history_create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_assign_super_coop_create_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_planning_create_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_create_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_line_create_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_daynumber_create_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_extension_create_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_holiday_create_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_journal_create_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_planning_create_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_create_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_stage_create_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_create_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_create_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_temporary_exemption_create_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_type_create_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_exempt_reason_create_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_create_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_history_create_date +msgid "Created on" +msgstr "Créé le" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.subscribe_coop_wizard_view_form +msgid "Current worker has more than one shift, subscribing him to a new shift will erase all previous shifts." +msgstr "Current worker has more than one shift, subscribing him to a new shift will erase all previous shifts." + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_generation_view_form +msgid "Daily Schedule" +msgstr "Daily Schedule" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_journal_date +#: model:ir.ui.view,arch_db:beesdoo_shift.coop_status_form_view +msgid "Date" +msgstr "Date" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_info_session_date +msgid "Date of information session" +msgstr "Date of information session" + +#. module: beesdoo_shift +#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_shift_message_last_post +msgid "Date of the last message posted on the record." +msgstr "Date du dernier message posté sur cet enregistrement" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_day_nb_id +#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search +msgid "Day" +msgstr "Jour" + +#. module: beesdoo_shift +#: model:ir.actions.act_window,name:beesdoo_shift.action_day_number +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_daynumber_number +msgid "Day Number" +msgstr "Day Number" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_day_ids +msgid "Day ids" +msgstr "Day ids" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_kanban +msgid "Delete" +msgstr "Supprimer" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_property_delivery_carrier_id +msgid "Delivery Method" +msgstr "Méthode de livraison" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_type_description +#: model:ir.ui.view,arch_db:beesdoo_shift.type_view_form +msgid "Description" +msgstr "Description" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_assign_super_coop_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_planning_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_line_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_action_mixin_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_daynumber_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_extension_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_holiday_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_journal_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_planning_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_stage_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_temporary_exemption_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_type_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_exempt_reason_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_display_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_history_display_name +msgid "Display Name" +msgstr "Nom affiché" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_duration +msgid "Duration" +msgstr "Durée" + +#. module: beesdoo_shift +#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_template_duration +msgid "Duration in Hour" +msgstr "Duration in Hour" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_eater +msgid "Eater/Worker" +msgstr "Eater/Worker" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_shift_view_kanban +msgid "Edit Shift" +msgstr "Edit Shift" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_kanban +msgid "Edit Shift\n" +" Template" +msgstr "Edit Shift\n" +" Template" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_effective_date +msgid "Effective date" +msgstr "Date effective" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_shift +msgid "Email Thread" +msgstr "Discussion par courriel" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_end_date +msgid "End date" +msgstr "End date" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_holiday_holiday_end_day +msgid "End date for the holiday (included)" +msgstr "End date for the holiday (included)" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_line_end_time +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_end_time +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_end_time +msgid "End time" +msgstr "End time" + +#. module: beesdoo_shift +#: model:ir.actions.act_window,name:beesdoo_shift.action_exempt_reason +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_exempt_reason_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_temporary_exemption_temporary_exempt_reason_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_exempt_reason_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_temporary_exempt_reason_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_partner_exempt_reason_id +#: model:ir.ui.menu,name:beesdoo_shift.menu_exempt_reason +msgid "Exempt Reason" +msgstr "Raison d'exemption" + +#. module: beesdoo_shift +#: selection:beesdoo.shift.subscribe,working_mode:0 +#: selection:cooperative.status,status:0 +#: selection:cooperative.status,working_mode:0 +msgid "Exempted" +msgstr "Exempted" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_sheet_expected +msgid "Expected Shift" +msgstr "Expected Shift" + +#. module: beesdoo_shift +#: selection:cooperative.status,status:0 +msgid "Extension" +msgstr "Extension" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_time_extension +msgid "Extension Days NB" +msgstr "Extension Days NB" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_extension_start_time +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_partner_extension_start_time +msgid "Extension Start Day" +msgstr "Extension Start Day" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_extension_extension_days +msgid "Extension days" +msgstr "Extension days" + +#. module: beesdoo_shift +#: model:ir.model.fields,help:beesdoo_shift.field_cooperative_status_today +msgid "Field that allow to compute field and store them even if they are based on the current date" +msgstr "Field that allow to compute field and store them even if they are based on the current date" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_planning_date_start +msgid "First Day of planning" +msgstr "First Day of planning" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_info_session +msgid "Followed an information session" +msgstr "Followed an information session" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_follower_ids +msgid "Followers" +msgstr "Abonnés" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_channel_ids +msgid "Followers (Channels)" +msgstr "Abonnés (Canaux)" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_partner_ids +msgid "Followers (Partners)" +msgstr "Abonnés (Partenaires)" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.coop_status_form_view +msgid "For testing purpose only" +msgstr "For testing purpose only" + +#. module: beesdoo_shift +#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_daynumber_number +msgid "From 1 to N, When you will instanciate your planning, Day 1 will be the start date of the instance, Day 2 the second, etc..." +msgstr "From 1 to N, When you will instanciate your planning, Day 1 will be the start date of the instance, Day 2 the second, etc..." + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_future_alert_date +msgid "Future alert date" +msgstr "Future alert date" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_gender +msgid "Gender" +msgstr "Genre" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.coop_status_form_view +msgid "General information" +msgstr "General information" + +#. module: beesdoo_shift +#: model:ir.actions.act_window,name:beesdoo_shift.action_generate_shift_template_wizard +msgid "Generate Shift Template" +msgstr "Generate Shift Template" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.type_view_form +msgid "Generate shift Templates" +msgstr "Generate shift Templates" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.planning_view_form +msgid "Generate shifts" +msgstr "Generate shifts" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/wizard/instanciate_planning.py:20 +#, python-format +msgid "Generated Shift" +msgstr "Generated Shift" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/wizard/batch_template.py:37 +#, python-format +msgid "Generated Shift Template" +msgstr "Generated Shift Template" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search +msgid "Group By" +msgstr "Regrouper par" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.coop_status_form_view +msgid "History" +msgstr "Historique" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_history_ids +msgid "History ids" +msgstr "History ids" + +#. module: beesdoo_shift +#: selection:cooperative.status,status:0 +msgid "Holidays" +msgstr "Holidays" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_holiday_end_time +msgid "Holidays End Day" +msgstr "Holidays End Day" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_holiday_start_time +msgid "Holidays Start Day" +msgstr "Holidays Start Day" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_assign_super_coop_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_planning_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_line_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_action_mixin_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_daynumber_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_extension_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_holiday_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_journal_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_planning_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_stage_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_temporary_exemption_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_type_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_exempt_reason_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_history_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_id +msgid "ID" +msgstr "ID" + +#. module: beesdoo_shift +#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_shift_message_unread +msgid "If checked new messages require your attention." +msgstr "Si coché, de nouveaux messages demandent votre attention." + +#. module: beesdoo_shift +#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_shift_message_needaction +msgid "If checked, new messages require your attention." +msgstr "si elle est cochée, de nouveaux messages requièrent votre attention." + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_info_session +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_partner_info_session +msgid "Information Session ?" +msgstr "Information Session ?" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_info_session_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_partner_info_session_date +msgid "Information Session Date" +msgstr "Information Session Date" + +#. module: beesdoo_shift +#: model:ir.actions.act_window,name:beesdoo_shift.action_generate_shift_wizard +msgid "Instanciate Planning Action" +msgstr "Instanciate Planning Action" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_irregular_absence_counter +msgid "Irregular absence counter" +msgstr "Irregular absence counter" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_irregular_absence_date +msgid "Irregular absence date" +msgstr "Irregular absence date" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_irregular_start_date +msgid "Irregular start date" +msgstr "Irregular start date" + +#. module: beesdoo_shift +#: selection:beesdoo.shift.subscribe,working_mode:0 +#: selection:cooperative.status,working_mode:0 +msgid "Irregular worker" +msgstr "Irregular worker" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_is_follower +msgid "Is Follower" +msgstr "Est un abonné" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search +msgid "J-1" +msgstr "J-1" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search +msgid "J-2" +msgstr "J-2" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search +msgid "J-3" +msgstr "J-3" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search +msgid "J-4" +msgstr "J-4" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search +msgid "J-5" +msgstr "J-5" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_last_post +msgid "Last Message Date" +msgstr "Date du dernier message" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_assign_super_coop___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_planning___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_line___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_action_mixin___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_daynumber___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_extension___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_holiday___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_journal___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_planning___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_stage___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_temporary_exemption___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_type___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_exempt_reason___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status___last_update +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_history___last_update +msgid "Last Modified on" +msgstr "Dernière modification le" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_assign_super_coop_write_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_planning_write_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_line_write_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_write_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_daynumber_write_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_extension_write_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_holiday_write_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_journal_write_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_planning_write_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_write_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_stage_write_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_write_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_write_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_temporary_exemption_write_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_type_write_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_exempt_reason_write_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_history_write_uid +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_write_uid +msgid "Last Updated by" +msgstr "Mis à jour par" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_assign_super_coop_write_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_planning_write_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_line_write_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_write_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_daynumber_write_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_extension_write_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_holiday_write_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_journal_write_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_planning_write_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_write_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_stage_write_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_write_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_write_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_temporary_exemption_write_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_type_write_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_exempt_reason_write_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_history_write_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_write_date +msgid "Last Updated on" +msgstr "Mis à jour le" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_last_printed +msgid "Last printed on" +msgstr "Last printed on" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_line_ids +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_journal_line_ids +msgid "Line ids" +msgstr "Line ids" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/models/cooperative_status.py:451 +#: model:ir.ui.view,arch_db:beesdoo_shift.super_coop_partner_inherited_view_form +#, python-format +msgid "Manual Extension" +msgstr "Manual Extension" + +#. module: beesdoo_shift +#: model:ir.model.fields,help:beesdoo_shift.field_cooperative_status_unsubscribed +msgid "Manually unsubscribed" +msgstr "Manually unsubscribed" + +#. module: beesdoo_shift +#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_template_worker_nb +msgid "Max number of worker for this task" +msgstr "Max number of worker for this task" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_member_card_ids +msgid "Member card ids" +msgstr "Member card ids" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_ids +msgid "Messages" +msgstr "Messages" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search +msgid "My Shift" +msgstr "Mes shifts" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_search +#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search +msgid "My Team Shift" +msgstr "My Team Shift" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_daynumber_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_planning_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_stage_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_type_name +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_exempt_reason_name +msgid "Name" +msgstr "Nom" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_assign_super_coop_super_coop_id +msgid "New Super Cooperative" +msgstr "New Super Cooperative" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_next_countdown_date +msgid "Next countdown date" +msgstr "Next countdown date" + +#. module: beesdoo_shift +#: model:mail.template,subject:beesdoo_shift.email_template_non_attendance +msgid "Non-attendance to your last shift." +msgstr "Non-attendance to your last shift." + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_needaction_counter +msgid "Number of Actions" +msgstr "Nombre d'Actions" + +#. module: beesdoo_shift +#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_shift_message_needaction_counter +msgid "Number of messages which requires an action" +msgstr "Nombre de messages demandant une action" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_nb_shifts +msgid "Number of shifts" +msgstr "Number of shifts" + +#. module: beesdoo_shift +#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_shift_message_unread_counter +msgid "Number of unread messages" +msgstr "Nombre de messages non lus" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_worker_nb +msgid "Number of worker" +msgstr "Number of worker" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_old_member +msgid "Old cooperator" +msgstr "Ancien cooperateur" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_parent_barcode +msgid "Parent Barcode" +msgstr "Parent Barcode" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_parent_eater_id +msgid "Parent Worker" +msgstr "Parent Worker" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_res_partner +msgid "Partner" +msgstr "Partenaire" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_search +msgid "Place Available" +msgstr "Place Available" + +#. module: beesdoo_shift +#: model:ir.ui.menu,name:beesdoo_shift.menu_task_top +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_search +msgid "Planning" +msgstr "Planning" + +#. module: beesdoo_shift +#: model:ir.actions.act_window,name:beesdoo_shift.action_planning +#: model:ir.actions.act_window,name:beesdoo_shift.action_shift_template +msgid "Planning Action" +msgstr "Planning Action" + +#. module: beesdoo_shift +#: model:res.groups,name:beesdoo_shift.group_planning_management +msgid "Planning Management" +msgstr "Planning Management" + +#. module: beesdoo_shift +#: model:ir.ui.menu,name:beesdoo_shift.menu_planning +msgid "Planning Week" +msgstr "Planning Week" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_planning_planning_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_planning_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_planning_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_planning_id +msgid "Planning id" +msgstr "Planning id" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_member_card_to_be_printed +msgid "Print BEES card?" +msgstr "Print BEES card?" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_website_private +msgid "Private Profile" +msgstr "Profil privé" + +#. module: beesdoo_shift +#: model:res.groups,comment:beesdoo_shift.group_shift_attendance +msgid "Read only sur worker.info " +msgstr "Read only sur worker.info + Delay de Grâce" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_worker_ids +msgid "Recurrent worker assigned" +msgstr "Recurrent worker assigned" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_form +msgid "Recurring Workers" +msgstr "Recurring Workers" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/models/cooperative_status.py:469 +#, python-format +msgid "Register Holiday" +msgstr "Register Holiday" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.super_coop_partner_inherited_view_form +msgid "Register Holidays" +msgstr "Register Holidays" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_shift_view_kanban +msgid "Regular Shift" +msgstr "Regular Shift" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_is_regular +msgid "Regular shift" +msgstr "Regular shift" + +#. module: beesdoo_shift +#: selection:beesdoo.shift.subscribe,working_mode:0 +#: selection:cooperative.status,working_mode:0 +msgid "Regular worker" +msgstr "Regular worker" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_remaining_worker +msgid "Remaining Place" +msgstr "Remaining Place" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_replaced_id +msgid "Replaced id" +msgstr "Replaced id" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_reset_compensation_counter +msgid "Reset compensation counter" +msgstr "Reset compensation counter" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_reset_counter +msgid "Reset counter" +msgstr "Reset counter" + +#. module: beesdoo_shift +#: selection:cooperative.status,status:0 +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_resigning +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_resigning +msgid "Resigning" +msgstr "Resigning" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_revert_info +msgid "Revert info" +msgstr "Revert info" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.journal_form_view +msgid "Run again for this day" +msgstr "Run again for this day" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_planning_sequence +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_stage_sequence +msgid "Sequence" +msgstr "Séquence" + +#. module: beesdoo_shift +#: model:ir.ui.menu,name:beesdoo_shift.menu_task +msgid "Shift" +msgstr "Shift" + +#. module: beesdoo_shift +#: model:ir.actions.act_window,name:beesdoo_shift.action_task_attendance +#: model:ir.ui.menu,name:beesdoo_shift.menu_task_attendance +#: model:res.groups,name:beesdoo_shift.group_shift_attendance +msgid "Shift Attendance" +msgstr "Shift Attendance" + +#. module: beesdoo_shift +#: model:ir.ui.menu,name:beesdoo_shift.menu_configuration_day +msgid "Shift Day" +msgstr "Shift Day" + +#. module: beesdoo_shift +#: model:ir.ui.menu,name:beesdoo_shift.menu_root +#: model:res.groups,name:beesdoo_shift.group_shift_management +msgid "Shift Management" +msgstr "Shift Management" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search +msgid "Shift Template" +msgstr "Shift Template" + +#. module: beesdoo_shift +#: model:ir.actions.act_window,name:beesdoo_shift.action_type +#: model:ir.ui.menu,name:beesdoo_shift.menu_configuration_type +msgid "Shift Type" +msgstr "Shift Type" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_shift_id +msgid "Shift id" +msgstr "Shift id" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_assign_super_coop_shift_ids +msgid "Shift ids" +msgstr "Shift ids" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.planning_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.planning_view_tree +msgid "Shifts Template" +msgstr "Shifts Template" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_stage_id +msgid "Stage id" +msgstr "Stage id" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_irregular_start_date +msgid "Start Date" +msgstr "Date de début" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_start_date +msgid "Start date" +msgstr "Start date" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_extension_extension_start_date +msgid "Start date for the extension" +msgstr "Start date for the extension" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_holiday_holiday_start_day +msgid "Start date for the holiday" +msgstr "Start date for the holiday" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_line_start_time +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_start_time +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_start_time +msgid "Start time" +msgstr "Start time" + +#. module: beesdoo_shift +#: model:ir.ui.menu,name:beesdoo_shift.menu_status_top +#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search +msgid "Status" +msgstr "Statut" + +#. module: beesdoo_shift +#: selection:cooperative.status.history,type:0 +msgid "Status Change" +msgstr "Status Change" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_history_status_id +msgid "Status id" +msgstr "Status id" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_shift_view_kanban +msgid "Status:" +msgstr "Statut :" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/models/cooperative_status.py:434 +#, python-format +msgid "Subscribe Cooperator" +msgstr "Subscribe Cooperator" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.super_coop_partner_inherited_view_form +msgid "Subscribe to shift" +msgstr "Subscribe to shift" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.super_coop_partner_inherited_view_form +msgid "Subscribed Shift" +msgstr "Subscribed Shift" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_partner_subscribed_shift_ids +msgid "Subscribed shift ids" +msgstr "Subscribed shift ids" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_shift_view_kanban +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_kanban +msgid "Super Coop:" +msgstr "Super Coop:" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_super_coop_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_super_coop_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_super +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_partner_super +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_super +msgid "Super Cooperative" +msgstr "Super Cooperative" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_super +msgid "Super Cooperator" +msgstr "Super Cooperator" + +#. module: beesdoo_shift +#: selection:cooperative.status,status:0 +msgid "Suspended" +msgstr "Suspended" + +#. module: beesdoo_shift +#: model:ir.actions.act_window,name:beesdoo_shift.action_task +msgid "Task Action" +msgstr "Task Action" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_task_type_id +msgid "Task Type" +msgstr "Task Type" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_task_template_id +msgid "Task template id" +msgstr "Task template id" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_planning_task_template_ids +msgid "Task template ids" +msgstr "Task template ids" + +#. module: beesdoo_shift +#: model:ir.ui.menu,name:beesdoo_shift.menu_template_top +msgid "Templates" +msgstr "Modèles" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/models/cooperative_status.py:480 +#: model:ir.ui.view,arch_db:beesdoo_shift.coop_status_form_view +#: model:ir.ui.view,arch_db:beesdoo_shift.super_coop_partner_inherited_view_form +#, python-format +msgid "Temporary Exemption" +msgstr "Temporary Exemption" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_temporary_exemption_temporary_exempt_end_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_temporary_exempt_end_date +msgid "Temporary exempt end date" +msgstr "Temporary exempt end date" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_temporary_exemption_temporary_exempt_start_date +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_temporary_exempt_start_date +msgid "Temporary exempt start date" +msgstr "Temporary exempt start date" + +#. module: beesdoo_shift +#: model:ir.model.fields,help:beesdoo_shift.field_res_users_website_url +msgid "The full URL to access the document through the website." +msgstr "L'URL complète afin d'accéder au document à travers le site web." + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/models/task.py:236 +#, python-format +msgid "The worker has not a proper working mode define, please check the worker is subscribed" +msgstr "The worker has not a proper working mode define, please check the worker is subscribed" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/wizard/subscribe.py:105 +#, python-format +msgid "There is no remaining space for this shift" +msgstr "There is no remaining space for this shift" + +#. module: beesdoo_shift +#: model:ir.model.fields,help:beesdoo_shift.field_res_users_property_delivery_carrier_id +msgid "This delivery method will be used when invoicing from picking." +msgstr "Cette méthode de livraison sera utilisée lorsqu'on facturera sur base du colisage." + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.coop_status_form_view +msgid "Timing information" +msgstr "Timing information" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_today +#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search +msgid "Today" +msgstr "Aujourd'hui" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/models/cooperative_status.py:463 +#, python-format +msgid "Trigger Grace Delay" +msgstr "Trigger Grace Delay" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_task_type_id +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_history_type +#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search +msgid "Type" +msgstr "Type" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_type_id +msgid "Type id" +msgstr "Type id" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_shift_view_kanban +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_kanban +msgid "Type:" +msgstr "Type :" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search +msgid "Unassigned" +msgstr "Non assigné" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_unread +msgid "Unread Messages" +msgstr "Messages non lus" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_unread_counter +msgid "Unread Messages Counter" +msgstr "Compteur de messages non lus" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.super_coop_partner_inherited_view_form +msgid "Unsubscribe" +msgstr "Se désabonner" + +#. module: beesdoo_shift +#: selection:cooperative.status,status:0 +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_unsubscribed +msgid "Unsubscribed" +msgstr "Unsubscribed" + +#. module: beesdoo_shift +#: selection:cooperative.status,status:0 +msgid "Up to Date" +msgstr "Up to Date" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_history_user_id +msgid "User" +msgstr "Utilisateur" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_res_users +msgid "Users" +msgstr "Utilisateurs" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_website_published +msgid "Visible in Website" +msgstr "Visible sur le site web" + +#. module: beesdoo_shift +#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_subscribe_resigning +#: model:ir.model.fields,help:beesdoo_shift.field_cooperative_status_resigning +msgid "Want to leave the beescoop" +msgstr "Want to leave the beescoop" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/models/planning.py:197 +#, python-format +msgid "Warning" +msgstr "Warning" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_website_message_ids +msgid "Website Messages" +msgstr "Messages du site web" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_website_description +msgid "Website Partner Full Description" +msgstr "Description complète du site web partenaire" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_website_short_description +msgid "Website Partner Short Description" +msgstr "Description courte du site web partenaire" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_website_url +msgid "Website URL" +msgstr "URL du site" + +#. module: beesdoo_shift +#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_shift_website_message_ids +msgid "Website communication history" +msgstr "Historique de communication du site web" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_website_meta_description +msgid "Website meta description" +msgstr "Méta description du site web" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_website_meta_keywords +msgid "Website meta keywords" +msgstr "Mots clefs du site web" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_website_meta_title +msgid "Website meta title" +msgstr "Titre du site web" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_search +msgid "Week Day" +msgstr "Week Day" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_line_wizard_id +msgid "Wizard id" +msgstr "Wizard id" + +#. module: beesdoo_shift +#: model:ir.actions.act_window,name:beesdoo_shift.action_worker +#: model:ir.ui.menu,name:beesdoo_shift.menu_worker +#: model:ir.ui.menu,name:beesdoo_shift.menu_worker_top +msgid "Worker" +msgstr "Worker" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_kanban +msgid "Worker Number:" +msgstr "Worker Number:" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_worker_id +msgid "Worker id" +msgstr "Worker id" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_worker_name +msgid "Worker name" +msgstr "Worker name" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_line_worker_nb +msgid "Worker nb" +msgstr "Worker nb" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.task_shift_view_kanban +msgid "Worker:" +msgstr "Worker:" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_working_mode +#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_working_mode +#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_working_mode +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_partner_working_mode +msgid "Working mode" +msgstr "Working mode" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/models/task.py:20 +#, python-format +msgid "You Cannot delete Task Stage" +msgstr "You Cannot delete Task Stage" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/models/cooperative_status.py:408 +#: sql_constraint:beesdoo.shift.journal:0 +#, python-format +msgid "You can only create one journal per day" +msgstr "You can only create one journal per day" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/models/cooperative_status.py:353 +#: sql_constraint:cooperative.status:0 +#, python-format +msgid "You can only set one cooperator status per cooperator" +msgstr "You can only set one cooperator status per cooperator" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/models/task.py:195 +#, python-format +msgid "You cannot change to the status %s if the is no worker defined on the shift" +msgstr "You cannot change to the status %s if the is no worker defined on the shift" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/wizard/holiday.py:17 +#, python-format +msgid "You cannot encode new holidays since the previous holidays encoded are not over yet" +msgstr "You cannot encode new holidays since the previous holidays encoded are not over yet" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/wizard/temporary_exemption.py:18 +#, python-format +msgid "You cannot encode new temporary exemptuon since the previous one are not over yet" +msgstr "You cannot encode new temporary exemptuon since the previous one are not over yet" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/wizard/subscribe.py:15 +#, python-format +msgid "You cannot perform this operation on yourself" +msgstr "You cannot perform this operation on yourself" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/models/cooperative_status.py:415 +#, python-format +msgid "You don't have the access to perform this action" +msgstr "You don't have the access to perform this action" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/wizard/subscribe.py:13 +#, python-format +msgid "You don't have the required access for this operation." +msgstr "You don't have the required access for this operation." + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/wizard/extension.py:29 +#, python-format +msgid "You should not make a manual extension when the grace delay has not been triggered yet" +msgstr "You should not make a manual extension when the grace delay has not been triggered yet" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/wizard/extension.py:34 +#, python-format +msgid "You should not start a manual extension during the grace delay" +msgstr "You should not start a manual extension during the grace delay" + +#. module: beesdoo_shift +#: model:mail.template,subject:beesdoo_shift.email_template_shift_summary +msgid "Your next shift (${format_tz(object.start_time,object.worker_id.tz or 'Europe/Brussels','%d.%m.%Y - %H:%M')})" +msgstr "Votre prochain shift (${format_tz(object.start_time,object.worker_id.tz or 'Europe/Brussels','%d.%m.%Y - %H:%M')})" + +#. module: beesdoo_shift +#: model:mail.template,subject:beesdoo_shift.email_template_non_validated_sheet +msgid "[${object.day}] Non-validated sheet ${object.time_slot}" +msgstr "[${object.day}] Non-validated sheet ${object.time_slot}" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesddoo_shift_assign_super_coop +msgid "beesddoo.shift.assign_super_coop" +msgstr "beesddoo.shift.assign_super_coop" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesddoo_shift_generate_planning +msgid "beesddoo.shift.generate_planning" +msgstr "beesddoo.shift.generate_planning" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesddoo_shift_generate_shift_template +msgid "beesddoo.shift.generate_shift_template" +msgstr "beesddoo.shift.generate_shift_template" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesddoo_shift_generate_shift_template_line +msgid "beesddoo.shift.generate_shift_template.line" +msgstr "beesddoo.shift.generate_shift_template.line" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_action_mixin +msgid "beesdoo.shift.action_mixin" +msgstr "beesdoo.shift.action_mixin" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_config_settings +msgid "beesdoo.shift.config.settings" +msgstr "beesdoo.shift.config.settings" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_daynumber +msgid "beesdoo.shift.daynumber" +msgstr "beesdoo.shift.daynumber" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_extension +msgid "beesdoo.shift.extension" +msgstr "beesdoo.shift.extension" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_holiday +msgid "beesdoo.shift.holiday" +msgstr "beesdoo.shift.holiday" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_journal +msgid "beesdoo.shift.journal" +msgstr "beesdoo.shift.journal" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_planning +msgid "beesdoo.shift.planning" +msgstr "beesdoo.shift.planning" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_stage +msgid "beesdoo.shift.stage" +msgstr "beesdoo.shift.stage" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_subscribe +msgid "beesdoo.shift.subscribe" +msgstr "beesdoo.shift.subscribe" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_template +msgid "beesdoo.shift.template" +msgstr "beesdoo.shift.template" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_temporary_exemption +msgid "beesdoo.shift.temporary_exemption" +msgstr "beesdoo.shift.temporary_exemption" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_type +msgid "beesdoo.shift.type" +msgstr "beesdoo.shift.type" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_cooperative_exempt_reason +msgid "cooperative.exempt.reason" +msgstr "cooperative.exempt.reason" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_cooperative_status +msgid "cooperative.status" +msgstr "cooperative.status" + +#. module: beesdoo_shift +#: model:ir.model,name:beesdoo_shift.model_cooperative_status_history +msgid "cooperative.status.history" +msgstr "cooperative.status.history" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.planning_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_form +msgid "name" +msgstr "nom" + +#. module: beesdoo_shift +#: model:ir.ui.view,arch_db:beesdoo_shift.assign_super_coop_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.extension_coop_wizard_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.planning_instanciate_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.subscribe_coop_wizard_view_form +#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_generation_view_form +msgid "or" +msgstr "ou" + +#. module: beesdoo_shift +#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_self +msgid "unknown" +msgstr "inconnu" + +#. module: beesdoo_shift +#: code:addons/beesdoo_shift/models/planning.py:141 +#, python-format +msgid "you cannot assign more worker then the number maximal define on the template" +msgstr "you cannot assign more worker then the number maximal define on the template" + diff --git a/beesdoo_shift/models/task.py b/beesdoo_shift/models/task.py index ac81bfa..8e4a638 100644 --- a/beesdoo_shift/models/task.py +++ b/beesdoo_shift/models/task.py @@ -1,7 +1,10 @@ # -*- coding: utf-8 -*- -from openerp import models, fields, api, _ -from openerp.exceptions import UserError, ValidationError import json +from datetime import datetime, timedelta + +from openerp import _, api, fields, models +from openerp.exceptions import UserError, ValidationError + class TaskStage(models.Model): _name = 'beesdoo.shift.stage' @@ -180,20 +183,20 @@ class Task(models.Model): self.ensure_one() self._revert() update = int(self.env['ir.config_parameter'].get_param('always_update', False)) - + new_stage = self.env['beesdoo.shift.stage'].browse(new_stage) data = {} DONE = self.env.ref('beesdoo_shift.done') ABSENT = self.env.ref('beesdoo_shift.absent') EXCUSED = self.env.ref('beesdoo_shift.excused') NECESSITY = self.env.ref('beesdoo_shift.excused_necessity') - + if not (self.worker_id or self.replaced_id) and new_stage in (DONE, ABSENT, EXCUSED, NECESSITY): raise UserError(_("You cannot change to the status %s if the is no worker defined on the shift") % new_stage.name) - + if update or not (self.worker_id or self.replaced_id): return - + if self.worker_id.working_mode == 'regular': if not self.replaced_id: #No replacement case status = self.worker_id.cooperative_status_ids[0] @@ -207,14 +210,14 @@ class Task(models.Model): data['sc'] = 1 else: data['sr'] = 1 - + if new_stage == ABSENT and not self.replaced_id: data['sr'] = - 1 if status.sr <= 0: data['sc'] = -1 if new_stage == ABSENT and self.replaced_id: data['sr'] = -1 - + if new_stage == EXCUSED: data['sr'] = -1 @@ -233,3 +236,29 @@ class Task(models.Model): raise UserError(_("The worker has not a proper working mode define, please check the worker is subscribed")) status.sudo()._change_counter(data) self._set_revert_info(data, status) + + @api.model + def _cron_send_weekly_emails(self): + """ + Send a summary email for all workers + if they have a shift planned during the week. + """ + tasks = self.env["beesdoo.shift.shift"] + shift_summary_mail_template = self.env.ref( + "beesdoo_shift.email_template_shift_summary", False + ) + + start_time = datetime.now() + timedelta(days=1) + end_time = datetime.now() + timedelta(days=7) + + confirmed_tasks = tasks.search( + [ + ("start_time", ">", start_time.strftime("%Y-%m-%d 00:00:01")), + ("start_time", "<", end_time.strftime("%Y-%m-%d 23:59:59")), + ("worker_id", "!=", False), + ("stage_id", "=", self.env.ref("beesdoo_shift.open").id), + ] + ) + + for rec in confirmed_tasks: + shift_summary_mail_template.send_mail(rec.id, True) From 9cf0861c690096f68f503059a2c95e98ce5e4349 Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Tue, 7 Jan 2020 13:49:23 +0100 Subject: [PATCH 005/208] [FIX] b_shift : automatic unsubscribe from next shifts Doesn't unsubscribe from present shift anymore when worker is changing to "unsubscribed" status. You cannot change future shifts status anymore. --- beesdoo_shift/models/cooperative_status.py | 6 +-- beesdoo_shift/models/task.py | 45 ++++++++++++++++------ 2 files changed, 37 insertions(+), 14 deletions(-) diff --git a/beesdoo_shift/models/cooperative_status.py b/beesdoo_shift/models/cooperative_status.py index 29ac02f..494636a 100644 --- a/beesdoo_shift/models/cooperative_status.py +++ b/beesdoo_shift/models/cooperative_status.py @@ -320,10 +320,10 @@ class CooperativeStatus(models.Model): [('super_coop_id', 'in', self.cooperator_id.user_ids.ids)] ) task_tpls.write({'super_coop_id': False}) - # Remove worker for future task (remove also supercoop) - # TODO: Add one day otherwise unsubscribed from the shift you were absent + # Remove worker for future tasks (remove also supercoop) self.env['beesdoo.shift.shift'].sudo().unsubscribe_from_today( - [self.cooperator_id.id], today=fields.Date.today()) + [self.cooperator_id.id], now=fields.Datetime.now() + ) def _change_counter(self, data): self.sc += data.get('sc', 0) diff --git a/beesdoo_shift/models/task.py b/beesdoo_shift/models/task.py index 8e4a638..756beeb 100644 --- a/beesdoo_shift/models/task.py +++ b/beesdoo_shift/models/task.py @@ -62,6 +62,16 @@ class Task(models.Model): "Compensation Shift." ) + @api.constrains("state") + def _lock_future_task(self): + start_time_dt = fields.Datetime.from_string(self.start_time) + if datetime.now() < start_time_dt: + if self.state in ["done", "absent_2", "absent_1", "absent_0"]: + raise UserError(_( + "You cannot set shift state to 'present' " + "or 'absent' for a future shift." + )) + @api.constrains('is_regular', 'is_compensation') def _check_compensation(self): for task in self: @@ -107,19 +117,32 @@ class Task(models.Model): #TODO button to replaced someone @api.model - def unsubscribe_from_today(self, worker_ids, today=None, end_date=None): - today = today or fields.Date.today() - today += ' 00:00:00' - if end_date: - end_date += ' 23:59:59' - # date_domain = [('worker_id', 'in', worker_ids), ('start_time', '>=', today)] - date_domain = [('start_time', '>=', today)] - if end_date: - date_domain.append(('end_time', '<=', end_date)) - to_unsubscribe = self.search([('worker_id', 'in', worker_ids)] + date_domain) + def unsubscribe_from_today(self, worker_ids, today=None, end_date=None, now=None): + """ + Unsubscribe workers from *worker_ids* from all shift that start *today* and later. + If *end_date* is given, unsubscribe workers from shift between *today* and *end_date*. + If *now* is given workers are unsubscribed from all shifts starting *now* and later. + If *now* is given, *end_date* is not taken into account. + + :type today: fields.Date + :type end_date: fields.Date + :type now: fields.Datetime + """ + if now: + if len(now) != 19: + raise UserError (_("'Now' must be a datetime.")) + date_domain = [('start_time', '>', now)] + else: + today = today or fields.Date.today() + today += ' 00:00:00' + date_domain = [('start_time', '>', today)] + if end_date: + end_date += ' 23:59:59' + date_domain.append(('end_time', '<=', end_date)) + to_unsubscribe = self.search([('worker_id', 'in', worker_ids)] + date_domain) to_unsubscribe.write({'worker_id': False}) - # What about replacement ? + # Remove worker, replaced_id and regular to_unsubscribe_replace = self.search([('replaced_id', 'in', worker_ids)] + date_domain) to_unsubscribe_replace.write({'worker_id': False, 'replaced_id': False}) From 41ff7de51eae57ea8cd68b6cae7eb753eeed3b52 Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Fri, 10 Jan 2020 18:05:43 +0100 Subject: [PATCH 006/208] Revert "[FIX] b_shift : automatic unsubscribe from next shifts" This reverts commit 796753a5edaea9883501b54920083a3693b083bf. --- beesdoo_shift/models/cooperative_status.py | 6 +-- beesdoo_shift/models/task.py | 45 ++++++---------------- 2 files changed, 14 insertions(+), 37 deletions(-) diff --git a/beesdoo_shift/models/cooperative_status.py b/beesdoo_shift/models/cooperative_status.py index 494636a..29ac02f 100644 --- a/beesdoo_shift/models/cooperative_status.py +++ b/beesdoo_shift/models/cooperative_status.py @@ -320,10 +320,10 @@ class CooperativeStatus(models.Model): [('super_coop_id', 'in', self.cooperator_id.user_ids.ids)] ) task_tpls.write({'super_coop_id': False}) - # Remove worker for future tasks (remove also supercoop) + # Remove worker for future task (remove also supercoop) + # TODO: Add one day otherwise unsubscribed from the shift you were absent self.env['beesdoo.shift.shift'].sudo().unsubscribe_from_today( - [self.cooperator_id.id], now=fields.Datetime.now() - ) + [self.cooperator_id.id], today=fields.Date.today()) def _change_counter(self, data): self.sc += data.get('sc', 0) diff --git a/beesdoo_shift/models/task.py b/beesdoo_shift/models/task.py index 756beeb..8e4a638 100644 --- a/beesdoo_shift/models/task.py +++ b/beesdoo_shift/models/task.py @@ -62,16 +62,6 @@ class Task(models.Model): "Compensation Shift." ) - @api.constrains("state") - def _lock_future_task(self): - start_time_dt = fields.Datetime.from_string(self.start_time) - if datetime.now() < start_time_dt: - if self.state in ["done", "absent_2", "absent_1", "absent_0"]: - raise UserError(_( - "You cannot set shift state to 'present' " - "or 'absent' for a future shift." - )) - @api.constrains('is_regular', 'is_compensation') def _check_compensation(self): for task in self: @@ -117,32 +107,19 @@ class Task(models.Model): #TODO button to replaced someone @api.model - def unsubscribe_from_today(self, worker_ids, today=None, end_date=None, now=None): - """ - Unsubscribe workers from *worker_ids* from all shift that start *today* and later. - If *end_date* is given, unsubscribe workers from shift between *today* and *end_date*. - If *now* is given workers are unsubscribed from all shifts starting *now* and later. - If *now* is given, *end_date* is not taken into account. - - :type today: fields.Date - :type end_date: fields.Date - :type now: fields.Datetime - """ - if now: - if len(now) != 19: - raise UserError (_("'Now' must be a datetime.")) - date_domain = [('start_time', '>', now)] - else: - today = today or fields.Date.today() - today += ' 00:00:00' - date_domain = [('start_time', '>', today)] - if end_date: - end_date += ' 23:59:59' - date_domain.append(('end_time', '<=', end_date)) - + def unsubscribe_from_today(self, worker_ids, today=None, end_date=None): + today = today or fields.Date.today() + today += ' 00:00:00' + if end_date: + end_date += ' 23:59:59' + # date_domain = [('worker_id', 'in', worker_ids), ('start_time', '>=', today)] + date_domain = [('start_time', '>=', today)] + if end_date: + date_domain.append(('end_time', '<=', end_date)) to_unsubscribe = self.search([('worker_id', 'in', worker_ids)] + date_domain) - to_unsubscribe.write({'worker_id': False}) + to_unsubscribe.write({'worker_id': False}) + # What about replacement ? # Remove worker, replaced_id and regular to_unsubscribe_replace = self.search([('replaced_id', 'in', worker_ids)] + date_domain) to_unsubscribe_replace.write({'worker_id': False, 'replaced_id': False}) From 0d2f032f2af22f19ef1f32864480d88b892fc530 Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Tue, 5 Nov 2019 10:52:43 +0100 Subject: [PATCH 007/208] [FIX] b_shift : warning messages --- beesdoo_shift/models/task.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/beesdoo_shift/models/task.py b/beesdoo_shift/models/task.py index 8e4a638..f8c3aef 100644 --- a/beesdoo_shift/models/task.py +++ b/beesdoo_shift/models/task.py @@ -190,9 +190,8 @@ class Task(models.Model): ABSENT = self.env.ref('beesdoo_shift.absent') EXCUSED = self.env.ref('beesdoo_shift.excused') NECESSITY = self.env.ref('beesdoo_shift.excused_necessity') - if not (self.worker_id or self.replaced_id) and new_stage in (DONE, ABSENT, EXCUSED, NECESSITY): - raise UserError(_("You cannot change to the status %s if the is no worker defined on the shift") % new_stage.name) + raise UserError(_("You cannot change to the status %s if no worker is defined for the shift") % new_stage.name) if update or not (self.worker_id or self.replaced_id): return @@ -233,7 +232,7 @@ class Task(models.Model): data['irregular_absence_counter'] = -1 else: - raise UserError(_("The worker has not a proper working mode define, please check the worker is subscribed")) + raise UserError(_("Working mode is not properly defined. Please check if the worker is subscribed")) status.sudo()._change_counter(data) self._set_revert_info(data, status) From 625fd77dbd0e3097daaa31a83ee076df963d886e Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Fri, 22 Nov 2019 14:55:28 +0100 Subject: [PATCH 008/208] [IMP] b_shift : shift start_time, end_time required --- beesdoo_shift/models/task.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/beesdoo_shift/models/task.py b/beesdoo_shift/models/task.py index f8c3aef..903f830 100644 --- a/beesdoo_shift/models/task.py +++ b/beesdoo_shift/models/task.py @@ -37,8 +37,8 @@ class Task(models.Model): ('working_mode', 'in', ('regular', 'irregular')), ('state', 'not in', ('unsubscribed', 'resigning')), ]) - start_time = fields.Datetime(track_visibility='always', index=True) - end_time = fields.Datetime(track_visibility='always') + start_time = fields.Datetime(track_visibility='always', index=True, required=True) + end_time = fields.Datetime(track_visibility='always', required=True) stage_id = fields.Many2one('beesdoo.shift.stage', required=True, track_visibility='onchange', default=lambda self: self.env.ref('beesdoo_shift.open')) super_coop_id = fields.Many2one('res.users', string="Super Cooperative", domain=[('partner_id.super', '=', True)], track_visibility='onchange') color = fields.Integer(related="stage_id.color", readonly=True) From 8b452d5eac678b545af0c4bb42c0551402801d7f Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Wed, 6 Nov 2019 18:15:11 +0100 Subject: [PATCH 009/208] [ADD] b_shift : constraint on worker, cannot replace himself --- beesdoo_shift/models/task.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/beesdoo_shift/models/task.py b/beesdoo_shift/models/task.py index 903f830..555c2be 100644 --- a/beesdoo_shift/models/task.py +++ b/beesdoo_shift/models/task.py @@ -85,6 +85,9 @@ class Task(models.Model): 'is_regular': False, 'is_compensation': False, }) + if task.worker_id: + if task.worker_id == task.replaced_id: + raise UserError("A worker cannot replace himself.") def message_auto_subscribe(self, updated_fields, values=None): self._add_follower(values) From 7a55f07bd66f0d4f0ba57ae45e7199e03c79902e Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Wed, 6 Nov 2019 18:12:38 +0100 Subject: [PATCH 010/208] [FIX] b_shift : replacement workers must be regular and not unsuscribed --- beesdoo_shift/models/task.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/beesdoo_shift/models/task.py b/beesdoo_shift/models/task.py index 555c2be..de78d96 100644 --- a/beesdoo_shift/models/task.py +++ b/beesdoo_shift/models/task.py @@ -46,7 +46,12 @@ class Task(models.Model): # selection field as they are mutually exclusive. is_regular = fields.Boolean(default=False, string="Regular shift") is_compensation = fields.Boolean(default=False, string="Compensation shift") - replaced_id = fields.Many2one('res.partner', track_visibility='onchange', domain=[('eater', '=', 'worker_eater')]) + replaced_id = fields.Many2one('res.partner', track_visibility='onchange', + domain=[ + ('eater', '=', 'worker_eater'), + ('working_mode', '=', 'regular'), + ('state', 'not in', ('unsubscribed', 'resigning')), + ]) revert_info = fields.Text(copy=False) working_mode = fields.Selection(related='worker_id.working_mode') From 03e6a239366a5fa5766d700031bfa36384458556 Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Thu, 9 Jan 2020 17:29:52 +0100 Subject: [PATCH 011/208] [CHG] b_shift : shift status To give better understanding of compensations given by each status. 'stage_id' is replaced by a selection field state to ease domain restrictions. --- beesdoo_shift/__openerp__.py | 3 +- beesdoo_shift/data/stage.xml | 44 -------- .../migrations/9.0.1.3.0/post-migrate.py | 66 ++++++++++++ .../migrations/9.0.1.3.0/pre-migrate.py | 16 +++ beesdoo_shift/models/planning.py | 2 +- beesdoo_shift/models/task.py | 100 +++++++++--------- beesdoo_shift/security/ir.model.access.csv | 2 - beesdoo_shift/views/task.xml | 11 +- 8 files changed, 139 insertions(+), 105 deletions(-) delete mode 100644 beesdoo_shift/data/stage.xml create mode 100644 beesdoo_shift/migrations/9.0.1.3.0/post-migrate.py create mode 100644 beesdoo_shift/migrations/9.0.1.3.0/pre-migrate.py diff --git a/beesdoo_shift/__openerp__.py b/beesdoo_shift/__openerp__.py index f3f4fe0..2fa0a08 100644 --- a/beesdoo_shift/__openerp__.py +++ b/beesdoo_shift/__openerp__.py @@ -13,12 +13,11 @@ 'website': "https://github.com/beescoop/Obeesdoo", 'category': 'Cooperative management', - 'version': '9.0.1.2.3', + 'version': '9.0.1.3.0', 'depends': ['beesdoo_base'], 'data': [ - "data/stage.xml", "data/system_parameter.xml", "data/cron.xml", "data/mail_template.xml", diff --git a/beesdoo_shift/data/stage.xml b/beesdoo_shift/data/stage.xml deleted file mode 100644 index b4d69ed..0000000 --- a/beesdoo_shift/data/stage.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - Unconfirmed - 1 - 0 - draft - - - Confirmed - 2 - 5 - open - - - Attended - 3 - 1 - done - - - Absent - 5 - 2 - absent - - - Excused - 6 - 4 - excused - - - Excused - Absolute Necessity - 7 - 4 - excused_necessity - - - Cancelled - 8 - 8 - cancel - - diff --git a/beesdoo_shift/migrations/9.0.1.3.0/post-migrate.py b/beesdoo_shift/migrations/9.0.1.3.0/post-migrate.py new file mode 100644 index 0000000..e0969f4 --- /dev/null +++ b/beesdoo_shift/migrations/9.0.1.3.0/post-migrate.py @@ -0,0 +1,66 @@ +# coding: utf-8 + + +def migrate(cr, version): + """ + The Char field 'code' from shift stage is now a Selection Field + named 'state'. + """ + # Set new field state + cr.execute( + """ + UPDATE beesdoo_shift_shift + SET state = old_code + """ + ) + # Map new stage from corresponding old stage + cr.execute( + """ + UPDATE beesdoo_shift_shift + SET state = 'absent_2' + FROM res_partner + WHERE beesdoo_shift_shift.worker_id = res_partner.id + AND ( + beesdoo_shift_shift.old_code = 'absent' + OR ( + beesdoo_shift_shift.old_code = 'excused' + AND res_partner.working_mode = 'irregular' + ) + ) + """ + ) + cr.execute( + """ + UPDATE beesdoo_shift_shift + SET state = 'absent_1' + FROM res_partner + WHERE beesdoo_shift_shift.worker_id = res_partner.id + AND beesdoo_shift_shift.old_code = 'excused' + AND res_partner.working_mode = 'regular' + """ + ) + cr.execute( + """ + UPDATE beesdoo_shift_shift + SET state = 'absent_0' + FROM res_partner + WHERE beesdoo_shift_shift.worker_id = res_partner.id + AND beesdoo_shift_shift.old_code = 'excused_necessity' + """ + ) + cr.execute( + """ + UPDATE beesdoo_shift_shift + SET state = 'absent_0' + WHERE beesdoo_shift_shift.state = 'excused' + """ + ) + cr.execute( + """ + DELETE FROM beesdoo_shift_shift + WHERE beesdoo_shift_shift.state = 'absent' + """ + ) + + # Drop temporary columns + cr.execute("ALTER TABLE beesdoo_shift_shift DROP COLUMN old_code") diff --git a/beesdoo_shift/migrations/9.0.1.3.0/pre-migrate.py b/beesdoo_shift/migrations/9.0.1.3.0/pre-migrate.py new file mode 100644 index 0000000..58b4900 --- /dev/null +++ b/beesdoo_shift/migrations/9.0.1.3.0/pre-migrate.py @@ -0,0 +1,16 @@ +# coding: utf-8 + + +def migrate(cr, version): + # Record information from old shift stage + cr.execute("ALTER TABLE beesdoo_shift_shift ADD old_code varchar") + cr.execute( + """ + UPDATE beesdoo_shift_shift + SET old_code = ( + SELECT code + FROM beesdoo_shift_stage + WHERE id = stage_id + ) + """ + ) diff --git a/beesdoo_shift/models/planning.py b/beesdoo_shift/models/planning.py index d7ea850..46f5ab4 100644 --- a/beesdoo_shift/models/planning.py +++ b/beesdoo_shift/models/planning.py @@ -174,7 +174,7 @@ class TaskTemplate(models.Model): 'is_regular': True if worker_id else False, 'start_time' : rec.start_date, 'end_time' : rec.end_date, - 'stage_id': self.env.ref('beesdoo_shift.open').id, + 'state': 'open', }) return tasks diff --git a/beesdoo_shift/models/task.py b/beesdoo_shift/models/task.py index de78d96..9e85456 100644 --- a/beesdoo_shift/models/task.py +++ b/beesdoo_shift/models/task.py @@ -6,19 +6,6 @@ from openerp import _, api, fields, models from openerp.exceptions import UserError, ValidationError -class TaskStage(models.Model): - _name = 'beesdoo.shift.stage' - _order = 'sequence asc' - - name = fields.Char() - sequence = fields.Integer() - color = fields.Integer() - code = fields.Char(readonly=True) - - @api.multi - def unlink(self): - raise UserError(_("You Cannot delete Task Stage")) - class Task(models.Model): _name = 'beesdoo.shift.shift' @@ -39,9 +26,22 @@ class Task(models.Model): ]) start_time = fields.Datetime(track_visibility='always', index=True, required=True) end_time = fields.Datetime(track_visibility='always', required=True) - stage_id = fields.Many2one('beesdoo.shift.stage', required=True, track_visibility='onchange', default=lambda self: self.env.ref('beesdoo_shift.open')) + state = fields.Selection(selection=[ + ("draft","Unconfirmed"), + ("open","Confirmed"), + ("done","Attended"), + ("absent_2","Absent - 2 compensations"), + ("absent_1","Absent - 1 compensation"), + ("absent_0","Absent - 0 compensation"), + ("cancel","Cancelled") + ], + default="open", + required=True, + store=True, + track_visibility='onchange', + ) + color = fields.Integer(compute="_compute_color") super_coop_id = fields.Many2one('res.users', string="Super Cooperative", domain=[('partner_id.super', '=', True)], track_visibility='onchange') - color = fields.Integer(related="stage_id.color", readonly=True) # TODO: Maybe is_regular and is_compensation must be merged in a # selection field as they are mutually exclusive. is_regular = fields.Boolean(default=False, string="Regular shift") @@ -55,6 +55,20 @@ class Task(models.Model): revert_info = fields.Text(copy=False) working_mode = fields.Selection(related='worker_id.working_mode') + @api.depends("state") + def _compute_color(self): + color_mapping = { + "draft": 0, + "open": 1, + "done": 5, + "absent_2": 2, + "absent_1": 7, + "absent_0": 3, + "cancel": 9, + } + for rec in self: + rec.color = color_mapping[rec.state] + def _compensation_validation(self, task): """ Raise a validation error if the fields is_regular and @@ -103,16 +117,6 @@ class Task(models.Model): worker = self.env['res.partner'].browse(vals['worker_id']) self.message_subscribe(partner_ids=worker.ids) - @api.model - def _read_group_stage_id(self, ids, domain, read_group_order=None, access_rights_uid=None): - res = self.env['beesdoo.shift.stage'].search([]).name_get() - fold = dict.fromkeys([r[0] for r in res], False) - return res, fold - - _group_by_full = { - 'stage_id': _read_group_stage_id, - } - #TODO button to replaced someone @api.model def unsubscribe_from_today(self, worker_ids, today=None, end_date=None): @@ -144,11 +148,11 @@ class Task(models.Model): @api.multi def write(self, vals): """ - Overwrite write to track stage change + Overwrite write to track state change If worker is changer: Revert for the current worker Change the worker info - Compute stage change for the new worker + Compute state change for the new worker """ if 'worker_id' in vals: for rec in self: @@ -163,11 +167,11 @@ class Task(models.Model): 'is_compensation': vals.get('is_compensation', rec.is_compensation), }) - rec._update_stage(rec.stage_id.id) - if 'stage_id' in vals: + rec._update_state(rec.state) + if 'state' in vals: for rec in self: - if vals['stage_id'] != rec.stage_id.id: - rec._update_stage(vals['stage_id']) + if vals['state'] != rec.state: + rec._update_state(vals['state']) return super(Task, self).write(vals) def _set_revert_info(self, data, status): @@ -187,19 +191,15 @@ class Task(models.Model): self.env['cooperative.status'].browse(data['status_id']).sudo()._change_counter(data['data']) self.revert_info = False - def _update_stage(self, new_stage): + def _update_state(self, new_state): self.ensure_one() self._revert() update = int(self.env['ir.config_parameter'].get_param('always_update', False)) - new_stage = self.env['beesdoo.shift.stage'].browse(new_stage) data = {} - DONE = self.env.ref('beesdoo_shift.done') - ABSENT = self.env.ref('beesdoo_shift.absent') - EXCUSED = self.env.ref('beesdoo_shift.excused') - NECESSITY = self.env.ref('beesdoo_shift.excused_necessity') - if not (self.worker_id or self.replaced_id) and new_stage in (DONE, ABSENT, EXCUSED, NECESSITY): - raise UserError(_("You cannot change to the status %s if no worker is defined for the shift") % new_stage.name) + + if not (self.worker_id or self.replaced_id) and new_state in ("done", "absent_0", "absent_1", "absent_2"): + raise UserError(_("You cannot change to the status %s if no worker is defined for the shift") % new_state) if update or not (self.worker_id or self.replaced_id): return @@ -210,32 +210,32 @@ class Task(models.Model): else: status = self.replaced_id.cooperative_status_ids[0] - if new_stage == DONE and not self.is_regular: + if new_state == "done" and not self.is_regular: + # Regular counter is always updated first if status.sr < 0: data['sr'] = 1 elif status.sc < 0: data['sc'] = 1 + # Bonus shift case else: data['sr'] = 1 - if new_stage == ABSENT and not self.replaced_id: - data['sr'] = - 1 - if status.sr <= 0: - data['sc'] = -1 - if new_stage == ABSENT and self.replaced_id: + if new_state == "absent_2": data['sr'] = -1 + data['sc'] = -1 - if new_stage == EXCUSED: + if new_state == "absent_1": data['sr'] = -1 elif self.worker_id.working_mode == 'irregular': status = self.worker_id.cooperative_status_ids[0] - if new_stage == DONE or new_stage == NECESSITY: + if new_state == "done" or new_state == "absent_0": data['sr'] = 1 data['irregular_absence_date'] = False data['irregular_absence_counter'] = 1 if status.irregular_absence_counter < 0 else 0 - if new_stage == ABSENT or new_stage == EXCUSED: - data['sr'] = -1 + if new_state == "absent_2" or new_state == "absent_1": + if new_state == "absent_2": + data['sr'] = -1 data['irregular_absence_date'] = self.start_time[:10] data['irregular_absence_counter'] = -1 @@ -263,7 +263,7 @@ class Task(models.Model): ("start_time", ">", start_time.strftime("%Y-%m-%d 00:00:01")), ("start_time", "<", end_time.strftime("%Y-%m-%d 23:59:59")), ("worker_id", "!=", False), - ("stage_id", "=", self.env.ref("beesdoo_shift.open").id), + ("state", "=", "open"), ] ) diff --git a/beesdoo_shift/security/ir.model.access.csv b/beesdoo_shift/security/ir.model.access.csv index 7bcb09e..dde98da 100644 --- a/beesdoo_shift/security/ir.model.access.csv +++ b/beesdoo_shift/security/ir.model.access.csv @@ -1,5 +1,4 @@ id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink -access_coopplanning_task_stage,Attendance Read Stage,model_beesdoo_shift_stage,group_shift_attendance,1,0,0,0 access_coopplanning_task_type,Attendance Read Type,model_beesdoo_shift_type,group_shift_attendance,1,0,0,0 access_coopplanning_daynumber,Attendance Read Daynumber,model_beesdoo_shift_daynumber,group_shift_attendance,1,0,0,0 access_coopplanning_planning,Attendance Read Planning,model_beesdoo_shift_planning,group_shift_attendance,1,0,0,0 @@ -8,7 +7,6 @@ access_coopplanning_task,Attendance Edit Shift,model_beesdoo_shift_shift,group_s access_coopplanning_task_full,Shift Management all Shift,model_beesdoo_shift_shift,group_shift_management,1,1,1,1 access_coop_status,Coop Status Read for all,model_cooperative_status,,1,0,0,0 access_coop_status_all,Coop Status Admin,model_cooperative_status,group_cooperative_admin,1,1,1,1 -all_config_coopplanning_task_stage,Attendance Read Stage,model_beesdoo_shift_stage,group_planning_management,1,1,1,1 all_config_coopplanning_task_type,Attendance Read Type,model_beesdoo_shift_type,group_planning_management,1,1,1,1 all_config_coopplanning_daynumber,Attendance Read Daynumber,model_beesdoo_shift_daynumber,group_planning_management,1,1,1,1 all_config_coopplanning_planning,Attendance Read Planning,model_beesdoo_shift_planning,group_planning_management,1,1,1,1 diff --git a/beesdoo_shift/views/task.xml b/beesdoo_shift/views/task.xml index dd5fa45..4ef96c3 100644 --- a/beesdoo_shift/views/task.xml +++ b/beesdoo_shift/views/task.xml @@ -12,7 +12,7 @@ - + @@ -57,7 +57,7 @@ + context="{'group_by' : 'state'}" /> @@ -84,8 +84,7 @@
- +
@@ -135,7 +134,7 @@ - + @@ -170,7 +169,7 @@
Status: - +
Type: From 3fa6235c7123ca8021f5110511c5b7430454a8c5 Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Tue, 7 Jan 2020 13:49:23 +0100 Subject: [PATCH 012/208] [FIX] b_shift : automatic unsubscribe from next shifts Doesn't unsubscribe from present shift anymore when worker is changing to "unsubscribed" status. You cannot change future shifts status anymore. --- beesdoo_shift/models/cooperative_status.py | 6 +-- beesdoo_shift/models/task.py | 45 ++++++++++++++++------ 2 files changed, 37 insertions(+), 14 deletions(-) diff --git a/beesdoo_shift/models/cooperative_status.py b/beesdoo_shift/models/cooperative_status.py index 29ac02f..494636a 100644 --- a/beesdoo_shift/models/cooperative_status.py +++ b/beesdoo_shift/models/cooperative_status.py @@ -320,10 +320,10 @@ class CooperativeStatus(models.Model): [('super_coop_id', 'in', self.cooperator_id.user_ids.ids)] ) task_tpls.write({'super_coop_id': False}) - # Remove worker for future task (remove also supercoop) - # TODO: Add one day otherwise unsubscribed from the shift you were absent + # Remove worker for future tasks (remove also supercoop) self.env['beesdoo.shift.shift'].sudo().unsubscribe_from_today( - [self.cooperator_id.id], today=fields.Date.today()) + [self.cooperator_id.id], now=fields.Datetime.now() + ) def _change_counter(self, data): self.sc += data.get('sc', 0) diff --git a/beesdoo_shift/models/task.py b/beesdoo_shift/models/task.py index 9e85456..253279d 100644 --- a/beesdoo_shift/models/task.py +++ b/beesdoo_shift/models/task.py @@ -81,6 +81,16 @@ class Task(models.Model): "Compensation Shift." ) + @api.constrains("state") + def _lock_future_task(self): + start_time_dt = fields.Datetime.from_string(self.start_time) + if datetime.now() < start_time_dt: + if self.state in ["done", "absent_2", "absent_1", "absent_0"]: + raise UserError(_( + "You cannot set shift state to 'present' " + "or 'absent' for a future shift." + )) + @api.constrains('is_regular', 'is_compensation') def _check_compensation(self): for task in self: @@ -119,19 +129,32 @@ class Task(models.Model): #TODO button to replaced someone @api.model - def unsubscribe_from_today(self, worker_ids, today=None, end_date=None): - today = today or fields.Date.today() - today += ' 00:00:00' - if end_date: - end_date += ' 23:59:59' - # date_domain = [('worker_id', 'in', worker_ids), ('start_time', '>=', today)] - date_domain = [('start_time', '>=', today)] - if end_date: - date_domain.append(('end_time', '<=', end_date)) - to_unsubscribe = self.search([('worker_id', 'in', worker_ids)] + date_domain) + def unsubscribe_from_today(self, worker_ids, today=None, end_date=None, now=None): + """ + Unsubscribe workers from *worker_ids* from all shift that start *today* and later. + If *end_date* is given, unsubscribe workers from shift between *today* and *end_date*. + If *now* is given workers are unsubscribed from all shifts starting *now* and later. + If *now* is given, *end_date* is not taken into account. + + :type today: fields.Date + :type end_date: fields.Date + :type now: fields.Datetime + """ + if now: + if len(now) != 19: + raise UserError (_("'Now' must be a datetime.")) + date_domain = [('start_time', '>', now)] + else: + today = today or fields.Date.today() + today += ' 00:00:00' + date_domain = [('start_time', '>', today)] + if end_date: + end_date += ' 23:59:59' + date_domain.append(('end_time', '<=', end_date)) + to_unsubscribe = self.search([('worker_id', 'in', worker_ids)] + date_domain) to_unsubscribe.write({'worker_id': False}) - # What about replacement ? + # Remove worker, replaced_id and regular to_unsubscribe_replace = self.search([('replaced_id', 'in', worker_ids)] + date_domain) to_unsubscribe_replace.write({'worker_id': False, 'replaced_id': False}) From 27397cbe4c34655573dbbecbafd211108c1a85a0 Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Thu, 10 Oct 2019 12:48:47 +0200 Subject: [PATCH 013/208] [ADD] b_shift : attendance sheet models --- beesdoo_shift/models/__init__.py | 1 + beesdoo_shift/models/attendance_sheet.py | 452 +++++++++++++++++++++++ 2 files changed, 453 insertions(+) create mode 100644 beesdoo_shift/models/attendance_sheet.py diff --git a/beesdoo_shift/models/__init__.py b/beesdoo_shift/models/__init__.py index b3d5110..7b05a53 100644 --- a/beesdoo_shift/models/__init__.py +++ b/beesdoo_shift/models/__init__.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +import attendance_sheet import planning import task import cooperative_status diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py new file mode 100644 index 0000000..f61dc9c --- /dev/null +++ b/beesdoo_shift/models/attendance_sheet.py @@ -0,0 +1,452 @@ +# -*- coding: utf-8 -*- +from openerp import models, exceptions, fields, api +from openerp.exceptions import UserError, ValidationError + +from datetime import datetime +from lxml import etree + + +class AttendanceSheetShift(models.Model): + _name = "beesdoo.shift.sheet.shift" + _description = "Copy of an actual shift into an attendance sheet" + + # Related actual shift, not required because doesn't exist for added shift before validation + # To update after validation + task_id = fields.Many2one("beesdoo.shift.shift", string="Task") + attendance_sheet_id = fields.Many2one( + "beesdoo.shift.sheet", + string="Attendance Sheet", + required=True, + ondelete="cascade", + ) + stage = fields.Selection( + [ + ("present", "Present"), + ("absent", "Absent"), + ("cancelled", "Cancelled"), + ], + string="Shift Stage", + copy=False, + ) + + worker_id = fields.Many2one( + "res.partner", + string="Worker", + domain=[ + ("eater", "=", "worker_eater"), + ("working_mode", "in", ("regular", "irregular")), + ("state", "not in", ("unsubscribed", "resigning")), + ], + required=True, + ) + task_type_id = fields.Many2one("beesdoo.shift.type", string="Task Type") + working_mode = fields.Selection( + related="worker_id.working_mode", string="Working Mode", store=True + ) + + def get_actual_stage(self): + """ + Mapping function returning the actual id + of corresponding beesdoo.shift.stage + This behavior should be temporary + (increases lack of understanding). + """ + if not self.working_mode or not self.stage: + raise UserError( + "Impossible to map task status, all values are not set." + ) + if self.working_mode == "regular": + if self.stage == "present": + return "done" + if self.stage == "absent" and self.compensation_nb: + if self.compensation_nb == "0": + return "excused_necessity" + if self.compensation_nb == "1": + return "excused" + if self.compensation_nb == "2": + return "absent" + if self.stage == "cancelled": + return "cancel" + if self.working_mode == "irregular": + if self.stage == "present": + return "done" + if self.stage == "cancelled": + return "cancel" + return "absent" + + +class AttendanceSheetShiftExpected(models.Model): + _name = "beesdoo.shift.sheet.expected" + _description = "Expected Shift" + _inherit = ["beesdoo.shift.sheet.shift"] + + compensation_nb = fields.Selection( + [("0", "0"), ("1", "1"), ("2", "2")], + string="Compensations (if absent)", + ) + + replacement_worker_id = fields.Many2one( + "res.partner", + string="Replacement Worker", + domain=[ + ("eater", "=", "worker_eater"), + ("working_mode", "=", "regular"), + ("state", "not in", ("unsubscribed", "resigning")), + ], + ) + + # The webclient has display issues with this method. + @api.onchange("stage") + def on_change_stage(self): + if self.working_mode == "irregular": + if self.stage == "present" or "cancelled": + self.compensation_nb = False + if self.stage == "absent": + self.compensation_nb = "1" + if self.working_mode == "regular": + if self.stage == "present" or "cancelled": + self.compensation_nb = False + if self.stage == "absent": + self.compensation_nb = "2" + + +class AttendanceSheetShiftAdded(models.Model): + """The added shifts stage must be Present + (add an SQL constraint ?) + """ + + _name = "beesdoo.shift.sheet.added" + _description = "Added Shift" + _inherit = ["beesdoo.shift.sheet.shift"] + + # Change the previously determined two booleans for a more comprehensive field + regular_task_type = fields.Selection( + [("normal", "Normal"), ("compensation", "Compensation")], + string="Task Mode (if regular)", + help="Shift type for regular workers. ", + ) + + @api.model + def create(self, vals): + vals["stage"] = "present" + return super(AttendanceSheetShiftAdded, self).create(vals) + + @api.onchange("working_mode") + def on_change_working_mode(self): + self.stage = "present" + if self.working_mode == "regular": + self.regular_task_type = "compensation" + if self.working_mode == "irregular": + self.regular_task_type = False + + +class AttendanceSheet(models.Model): + _name = "beesdoo.shift.sheet" + _inherit = ["mail.thread"] + # _inherit = ['mail.thread','ir.needaction_mixin'] + _description = "Attendance sheets with all the shifts in one time range." + _order = "start_time" + + name = fields.Char(string="Name", compute="_compute_name", store=True) + state = fields.Selection( + [ + ("not_validated", "Not Validated"), + ("validated", "Validated"), + ("cancelled", "Cancelled"), + ], + string="Status", + readonly=True, + index=True, + copy=False, + default="not_validated", + track_visibility="onchange", + ) + + start_time = fields.Datetime( + string="Start Time", required=True, readonly=True + ) + end_time = fields.Datetime(string="End Time", required=True, readonly=True) + + expected_shift_ids = fields.One2many( + "beesdoo.shift.sheet.expected", + "attendance_sheet_id", + string="Expected Shifts", + ) + added_shift_ids = fields.One2many( + "beesdoo.shift.sheet.added", + "attendance_sheet_id", + string="Added Shifts", + ) + + max_worker_nb = fields.Integer( + string="Maximum number of workers", + default=0, + readonly=True, + help="Indicative maximum number of workers for the shifts.", + ) + expected_worker_nb = fields.Integer( + string="Number of expected workers", readonly=True, default=0 + ) + added_worker_nb = fields.Integer( + compute="_compute_added_shift_nb", + string="Number of added workers", + readonly=True, + default=0, + ) + + annotation = fields.Text( + "Attendance Sheet annotation", default="", track_visibility="onchange" + ) + is_annotated = fields.Boolean( + compute="_compute_is_annotated", + string="Annotation", + readonly=True, + store=True, + ) + is_read = fields.Boolean( + string="Mark as read", + help="Has annotation been read by an administrator ?", + default=False, + track_visibility="onchange", + ) + feedback = fields.Text( + "Attendance Sheet feedback", track_visibility="onchange" + ) + worker_nb_feedback = fields.Selection( + [ + ("not_enough", "Not enough"), + ("enough", "Enough"), + ("too much", "Too much"), + ], + string="Feedback regarding the number of workers.", + track_visibility="onchange", + ) + attended_worker_nb = fields.Integer( + string="Number of attended workers", + default=0, + help="Number of workers who attended the session.", + ) + validated_by = fields.Many2one( + "res.partner", + string="Validated by", + domain=[ + ("eater", "=", "worker_eater"), + ("super", "=", True), + ("working_mode", "=", "regular"), + ("state", "not in", ("unsubscribed", "resigning")), + ], + track_visibility="onchange", + ) + + _sql_constraints = [ + ( + "check_no_annotation_mark_read", + "CHECK ((is_annotated=FALSE AND is_read=FALSE) OR is_annotated=TRUE)", + "Non-annotated sheets can't be marked as read. ", + ) + ] + + @api.constrains("expected_shift_ids", "added_shift_ids") + def _constrain_unique_worker(self): + added_workers = set(self.added_shift_ids.mapped("worker_id").ids) + expected_workers = self.expected_shift_ids.mapped("worker_id").ids + replacement_workers = self.expected_shift_ids.mapped( + "replacement_worker_id" + ).ids + if len( + added_workers.intersection(replacement_workers + expected_workers) + ): + raise UserError("You can't add an already expected worker.") + + @api.depends("added_shift_ids") + def _compute_added_shift_nb(self): + self.added_worker_nb = len(self.added_shift_ids) + return + + # Compute name (not hardcorded to prevent incoherence with timezone) + @api.depends("start_time", "end_time") + def _compute_name(self): + + start_time_dt = fields.Datetime.from_string(self.start_time) + start_time_dt = fields.Datetime.context_timestamp(self, start_time_dt) + end_time_dt = fields.Datetime.from_string(self.end_time) + end_time_dt = fields.Datetime.context_timestamp(self, end_time_dt) + + self.name = ( + start_time_dt.strftime("%d/%m/%y") + + " | " + + start_time_dt.strftime("%H:%M") + + "-" + + end_time_dt.strftime("%H:%M") + ) + return + + # Is this method necessary ? + @api.depends("annotation") + def _compute_is_annotated(self): + if self.annotation: + self.is_annotated = len(self.annotation) != 0 + return + + @api.model + def create(self, vals): + new_sheet = super(AttendanceSheet, self).create(vals) + + # Creation and addition of the expected shifts corresponding + # to the time range + tasks = self.env["beesdoo.shift.shift"] + tasks = tasks.search( + [ + ("start_time", "=", new_sheet.start_time), + ("end_time", "=", new_sheet.end_time), + ] + ) + expected_shift = self.env["beesdoo.shift.sheet.expected"] + task_templates = set() + for task in tasks: + if task.working_mode == "irregular": + compensation_nb = "1" + else: + compensation_nb = "2" + new_expected_shift = expected_shift.create( + { + "attendance_sheet_id": new_sheet.id, + "task_id": task.id, + "worker_id": task.worker_id.id, + "replacement_worker_id": task.replaced_id.id, + "task_type_id": task.task_type_id.id, + "stage": "absent", + "compensation_nb": compensation_nb, + "working_mode": task.working_mode, + } + ) + task_templates.add(task.task_template_id) + new_sheet.expected_worker_nb += 1 + # Maximum number of workers calculation + for task_template in task_templates: + new_sheet.max_worker_nb += task_template.worker_nb + return new_sheet + + # @api.model + # def _needaction_domain_get(self): + # return [('state','=','not_validated')] + + @api.multi + def write(self, vals): + if self.state == "validated" and not self.env.user.has_group( + "beesdoo_shift.group_cooperative_admin" + ): + raise UserError( + "The sheet has already been validated and can't be edited." + ) + return super(AttendanceSheet, self).write(vals) + + @api.one + def validate(self): + self.ensure_one() + if self.state == "validated": + raise UserError("The sheet has already been validated.") + + shift = self.env["beesdoo.shift.shift"] + stage = self.env["beesdoo.shift.stage"] + + # Fields validation + for added_shift in self.added_shift_ids: + if ( + not added_shift.stage + or not added_shift.worker_id + or not added_shift.task_type_id + or not added_shift.working_mode + or ( + added_shift.worker_id.working_mode == "regular" + and not added_shift.regular_task_type + ) + ): + raise UserError("All fields must be set before validation.") + + # Expected shifts status update + for expected_shift in self.expected_shift_ids: + actual_shift = expected_shift.task_id + actual_stage = stage.search( + [("code", "=", expected_shift.get_actual_stage())] + ) + # If the actual stage has been deleted, the sheet is still validated. + # Raising an exception would stop this. + # How can we show a message without stopping validation ? + if actual_stage: + actual_shift.stage_id = actual_stage + actual_shift.replacement_worker_id = ( + expected_shift.replacement_worker_id + ) + + # Added shifts status update + for added_shift in self.added_shift_ids: + actual_stage = stage.search( + [("code", "=", added_shift.get_actual_stage())] + ) + # WARNING: mapping the selection field to the booleans used in Task + is_regular_worker = added_shift.worker_id.working_mode == "regular" + is_regular_shift = added_shift.regular_task_type == "normal" + # Add an annotation if a regular worker is doing its regular shift + if is_regular_shift and is_regular_worker: + self.annotation += ( + "\n\nWarning : %s attended its shift as a normal one but was not expected." + " Something may be wrong in his/her personnal informations.\n" + % added_shift.worker_id.name + ) + # Edit a non-assigned shift or create one if none + non_assigned_shifts = shift.search( + [ + ("worker_id", "=", False), + ("start_time", "=", self.start_time), + ("end_time", "=", self.end_time), + ("task_type_id", "=", added_shift.task_type_id.id) + ] + ) + + if len(non_assigned_shifts): + actual_shift = non_assigned_shifts[0] + actual_shift.write( + { + "stage_id": actual_stage.id, + "worker_id": added_shift.worker_id.id, + "stage_id": actual_stage.id, + "is_regular": is_regular_shift and is_regular_worker, + "is_compensation": not is_regular_shift + and is_regular_worker, + } + ) + else: + actual_shift = self.env["beesdoo.shift.shift"].create( + { + "name": "Added shift TEST %s" % self.start_time, + "task_type_id": added_shift.task_type_id.id, + "worker_id": added_shift.worker_id.id, + "start_time": self.start_time, + "end_time": self.end_time, + "stage_id": actual_stage.id, + "is_regular": is_regular_shift and is_regular_worker, + "is_compensation": not is_regular_shift + and is_regular_worker, + } + ) + added_shift.task_id = actual_shift.id + + self.state = "validated" + return + + # @api.multi is needed to call the wizard, but doesn't match @api.one + # from the validate() method + @api.multi + def validate_via_wizard(self): + if self.env.user.has_group("beesdoo_shift.group_cooperative_admin"): + self.validated_by = self.env.user.partner_id + self.validate() + return + return { + "type": "ir.actions.act_window", + "res_model": "beesdoo.shift.sheet.validate", + "view_type": "form", + "view_mode": "form", + "target": "new", + } From edb3f9841cb2940faa681b841c291db09b9c3729 Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Fri, 11 Oct 2019 11:50:13 +0200 Subject: [PATCH 014/208] [ADD] b_shift : attendance_sheet_id to TaskTemplate --- beesdoo_shift/models/planning.py | 1 + 1 file changed, 1 insertion(+) diff --git a/beesdoo_shift/models/planning.py b/beesdoo_shift/models/planning.py index 46f5ab4..5f69e3c 100644 --- a/beesdoo_shift/models/planning.py +++ b/beesdoo_shift/models/planning.py @@ -81,6 +81,7 @@ class TaskTemplate(models.Model): planning_id = fields.Many2one('beesdoo.shift.planning', required=True) day_nb_id = fields.Many2one('beesdoo.shift.daynumber', string='Day', required=True) task_type_id = fields.Many2one('beesdoo.shift.type', string="Type") + attendance_sheet_id = fields.Many2one('beesdoo.shift.sheet', string="Attendance Sheet") start_time = fields.Float(required=True) end_time = fields.Float(required=True) super_coop_id = fields.Many2one('res.users', string="Super Cooperative", domain=[('partner_id.super', '=', True)]) From 0a75e54d4927da2ade114df1742adb410e7718d9 Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Fri, 11 Oct 2019 14:34:07 +0200 Subject: [PATCH 015/208] [ADD] b_shift : attendance sheet views --- beesdoo_shift/__openerp__.py | 2 + beesdoo_shift/views/attendance_sheet.xml | 132 ++++++++++++++++++ .../views/attendance_sheet_admin.xml | 55 ++++++++ 3 files changed, 189 insertions(+) create mode 100644 beesdoo_shift/views/attendance_sheet.xml create mode 100644 beesdoo_shift/views/attendance_sheet_admin.xml diff --git a/beesdoo_shift/__openerp__.py b/beesdoo_shift/__openerp__.py index 2fa0a08..9e479de 100644 --- a/beesdoo_shift/__openerp__.py +++ b/beesdoo_shift/__openerp__.py @@ -28,6 +28,8 @@ "views/planning.xml", "views/cooperative_status.xml", "views/exempt_reason.xml", + "views/attendance_sheet.xml", + "views/attendance_sheet_admin.xml", "wizard/instanciate_planning.xml", "wizard/batch_template.xml", "wizard/assign_super_coop.xml", diff --git a/beesdoo_shift/views/attendance_sheet.xml b/beesdoo_shift/views/attendance_sheet.xml new file mode 100644 index 0000000..ac41d5b --- /dev/null +++ b/beesdoo_shift/views/attendance_sheet.xml @@ -0,0 +1,132 @@ + + + + + + Expected Shifts List + beesdoo.shift.sheet.expected + + + + + + + + + + + + + + tree + Added Shifts List + beesdoo.shift.sheet.added + + + + + + + + + + + + + + + Daily Attendance Sheets List + beesdoo.shift.sheet + + + + + + + + + + + + + + Attendance Sheet Form + beesdoo.shift.sheet + + +
+ +
+ +
+

+
+ + + +

Expected workers

+ + + + +

Added workers

+ + + + +

Additional important informations

+ + + + +

General feedback

+ + + + + + + +
+
+ +
+ +
+
+ + + + + + + + + + + + +
diff --git a/beesdoo_shift/views/attendance_sheet_admin.xml b/beesdoo_shift/views/attendance_sheet_admin.xml new file mode 100644 index 0000000..ccb8e8c --- /dev/null +++ b/beesdoo_shift/views/attendance_sheet_admin.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + From 252df20be3ac322726c6a4195d41b0a9f9777b1c Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Tue, 15 Oct 2019 18:12:08 +0200 Subject: [PATCH 016/208] [ADD] b_shift : wizard for attendance sheet generation --- beesdoo_shift/__openerp__.py | 1 + beesdoo_shift/models/attendance_sheet.py | 5 ++ beesdoo_shift/wizard/__init__.py | 3 +- .../wizard/generate_attendance_sheet.py | 78 +++++++++++++++++++ .../wizard/generate_attendance_sheet.xml | 37 +++++++++ beesdoo_shift/wizard/subscribe.xml | 2 +- 6 files changed, 124 insertions(+), 2 deletions(-) create mode 100644 beesdoo_shift/wizard/generate_attendance_sheet.py create mode 100644 beesdoo_shift/wizard/generate_attendance_sheet.xml diff --git a/beesdoo_shift/__openerp__.py b/beesdoo_shift/__openerp__.py index 9e479de..ab92d23 100644 --- a/beesdoo_shift/__openerp__.py +++ b/beesdoo_shift/__openerp__.py @@ -35,6 +35,7 @@ "wizard/assign_super_coop.xml", "wizard/subscribe.xml", "wizard/extension.xml", + "wizard/generate_attendance_sheet.xml", "wizard/holiday.xml", "wizard/temporary_exemption.xml", ], diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py index f61dc9c..a9c4986 100644 --- a/beesdoo_shift/models/attendance_sheet.py +++ b/beesdoo_shift/models/attendance_sheet.py @@ -1,4 +1,7 @@ # -*- coding: utf-8 -*- + +from lxml import etree + from openerp import models, exceptions, fields, api from openerp.exceptions import UserError, ValidationError @@ -140,6 +143,8 @@ class AttendanceSheetShiftAdded(models.Model): self.regular_task_type = False + + class AttendanceSheet(models.Model): _name = "beesdoo.shift.sheet" _inherit = ["mail.thread"] diff --git a/beesdoo_shift/wizard/__init__.py b/beesdoo_shift/wizard/__init__.py index 59863f5..7f92f15 100644 --- a/beesdoo_shift/wizard/__init__.py +++ b/beesdoo_shift/wizard/__init__.py @@ -1,7 +1,8 @@ import instanciate_planning +import generate_attendance_sheet import batch_template import assign_super_coop import subscribe import extension import holiday -import temporary_exemption \ No newline at end of file +import temporary_exemption diff --git a/beesdoo_shift/wizard/generate_attendance_sheet.py b/beesdoo_shift/wizard/generate_attendance_sheet.py new file mode 100644 index 0000000..2fe5dcb --- /dev/null +++ b/beesdoo_shift/wizard/generate_attendance_sheet.py @@ -0,0 +1,78 @@ +# -*- coding: utf-8 -*- +from openerp import models, fields, api, exceptions, _ + +from datetime import date, datetime, timedelta + + +class GenerateAttendanceSheet(models.TransientModel): + _name = "beesdoo.shift.sheet.generate" + _description = "Use a selected time range to generate the corresponding attendance sheet." + + time_range = fields.Selection("_get_time_ranges", string="Hours") + + def _get_time_ranges(self): + time_ranges = set() + tasks = self.env["beesdoo.shift.shift"] + sheets = self.env["beesdoo.shift.sheet"] + current_time = datetime.now() + allowed_time_range = timedelta(minutes=45) + + tasks = tasks.search( + [ + ("start_time", ">", str(current_time - allowed_time_range),), + ("start_time", "<", str(current_time + allowed_time_range),), + ] + ) + + for task in tasks: + start_time = task.start_time + end_time = task.end_time + sheets = sheets.search( + [("start_time", "=", start_time), ("end_time", "=", end_time),] + ) + + if len(sheets) == 0: + start_time_dt = fields.Datetime.from_string(start_time) + start_time_dt = fields.Datetime.context_timestamp( + self, start_time_dt + ) + end_time_dt = fields.Datetime.from_string(end_time) + end_time_dt = fields.Datetime.context_timestamp( + self, end_time_dt + ) + + # We display contextualized time range + # but we save it according to UTC timezone + time_ranges.add( + ( + start_time + "~" + end_time, + start_time_dt.strftime("%H:%M") + + " - " + + end_time_dt.strftime("%H:%M"), + ) + ) + return list(time_ranges) + + @api.multi + def button_generate(self): + self.ensure_one() + tasks = self.env["beesdoo.shift.shift"] + sheets = self.env["beesdoo.shift.sheet"] + if not self.time_range: + raise exceptions.UserError( + "Please select a time time_range to generate the sheet." + ) + time_range = self.time_range.split("~") + if len(time_range) != 2: + raise exceptions.ValidationError("Selection key has wrong format.") + sheet = sheets.create( + {"start_time": time_range[0], "end_time": time_range[1]} + ) + + return { + "type": "ir.actions.act_window", + "res_model": "beesdoo.shift.sheet", + "res_id": sheet.id, + "view_type": "form", + "view_mode": "form", + } diff --git a/beesdoo_shift/wizard/generate_attendance_sheet.xml b/beesdoo_shift/wizard/generate_attendance_sheet.xml new file mode 100644 index 0000000..7e0d43e --- /dev/null +++ b/beesdoo_shift/wizard/generate_attendance_sheet.xml @@ -0,0 +1,37 @@ + + + Generate an attendance sheet + beesdoo.shift.sheet.generate + +
+ + + +
+
+
+
+
+ + + + + + + + + +
diff --git a/beesdoo_shift/wizard/subscribe.xml b/beesdoo_shift/wizard/subscribe.xml index 97b0333..476c661 100644 --- a/beesdoo_shift/wizard/subscribe.xml +++ b/beesdoo_shift/wizard/subscribe.xml @@ -1,6 +1,6 @@ - Subscribre Cooperator + Subscribe Cooperator beesdoo.shift.subscribe
From bea4258143fb4dcf71d80b0ca3ffe0380689b44b Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Fri, 18 Oct 2019 16:11:25 +0200 Subject: [PATCH 017/208] [ADD] b_shift : attendance sheet access rules --- beesdoo_shift/security/group.xml | 13 ++++-- beesdoo_shift/security/ir.model.access.csv | 15 ++++++- beesdoo_shift/views/attendance_sheet.xml | 10 ++++- .../views/attendance_sheet_admin.xml | 1 + beesdoo_shift/views/cooperative_status.xml | 4 +- beesdoo_shift/views/res_config_view.xml | 40 +++++++++++++++++++ beesdoo_shift/views/task.xml | 2 +- beesdoo_shift/views/task_template.xml | 2 +- 8 files changed, 76 insertions(+), 11 deletions(-) create mode 100644 beesdoo_shift/views/res_config_view.xml diff --git a/beesdoo_shift/security/group.xml b/beesdoo_shift/security/group.xml index a25186e..7992892 100644 --- a/beesdoo_shift/security/group.xml +++ b/beesdoo_shift/security/group.xml @@ -1,5 +1,9 @@ - + + + Attendance Sheet Access + + Shift Attendance @@ -17,7 +21,10 @@ Cooperative Admin - + + - \ No newline at end of file + diff --git a/beesdoo_shift/security/ir.model.access.csv b/beesdoo_shift/security/ir.model.access.csv index dde98da..4728e78 100644 --- a/beesdoo_shift/security/ir.model.access.csv +++ b/beesdoo_shift/security/ir.model.access.csv @@ -1,10 +1,23 @@ id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink -access_coopplanning_task_type,Attendance Read Type,model_beesdoo_shift_type,group_shift_attendance,1,0,0,0 + +access_attendance_sheet_task,Attendance Create Shift,model_beesdoo_shift_shift,group_shift_attendance_sheet,1,1,1,0 +access_attendance_sheet_abstract_task,Attendance Sheet Shift Read Abstract (generic),model_beesdoo_shift_sheet_shift,group_shift_attendance_sheet,1,0,0,0 +access_attendance_sheet_task_expected,Attendance Sheet Shift Expected (generic),model_beesdoo_shift_sheet_expected,group_shift_attendance_sheet,1,1,1,0 +access_attendance_sheet_task_added,Attendance Sheet Shift Added (generic),model_beesdoo_shift_sheet_added,group_shift_attendance_sheet,1,1,1,1 +access_attendance_sheet,Attendance Sheet Create (generic),model_beesdoo_shift_sheet,group_shift_attendance_sheet,1,1,1,0 +access_attendance_sheet_task_template,Attendance Read Template,model_beesdoo_shift_template,group_shift_attendance_sheet,1,0,0,0 + +access_coopplanning_task_stage,Attendance Read Stage,model_beesdoo_shift_stage,group_shift_attendance_sheet,1,0,0,0 +access_coopplanning_task_type,Attendance Read Type,model_beesdoo_shift_type,group_shift_attendance_sheet,1,0,0,0 access_coopplanning_daynumber,Attendance Read Daynumber,model_beesdoo_shift_daynumber,group_shift_attendance,1,0,0,0 access_coopplanning_planning,Attendance Read Planning,model_beesdoo_shift_planning,group_shift_attendance,1,0,0,0 access_coopplanning_task_template,Attendance Read Template,model_beesdoo_shift_template,group_shift_attendance,1,0,0,0 access_coopplanning_task,Attendance Edit Shift,model_beesdoo_shift_shift,group_shift_attendance,1,1,0,0 access_coopplanning_task_full,Shift Management all Shift,model_beesdoo_shift_shift,group_shift_management,1,1,1,1 + +admin_access_attendance_sheet,Attendance Sheet Shift Read Abstract,model_beesdoo_shift_sheet_shift,group_cooperative_admin,1,1,1,1 +admin_access_attendance_sheet_expected,Attendance Sheet Shift Read Expected,model_beesdoo_shift_sheet_expected,group_cooperative_admin,1,1,1,1 + access_coop_status,Coop Status Read for all,model_cooperative_status,,1,0,0,0 access_coop_status_all,Coop Status Admin,model_cooperative_status,group_cooperative_admin,1,1,1,1 all_config_coopplanning_task_type,Attendance Read Type,model_beesdoo_shift_type,group_planning_management,1,1,1,1 diff --git a/beesdoo_shift/views/attendance_sheet.xml b/beesdoo_shift/views/attendance_sheet.xml index ac41d5b..c816ff5 100644 --- a/beesdoo_shift/views/attendance_sheet.xml +++ b/beesdoo_shift/views/attendance_sheet.xml @@ -85,7 +85,9 @@

Additional important informations

- +

General feedback

@@ -97,7 +99,10 @@
- +
@@ -120,6 +125,7 @@ diff --git a/beesdoo_shift/views/attendance_sheet_admin.xml b/beesdoo_shift/views/attendance_sheet_admin.xml index ccb8e8c..6fc6df2 100644 --- a/beesdoo_shift/views/attendance_sheet_admin.xml +++ b/beesdoo_shift/views/attendance_sheet_admin.xml @@ -34,6 +34,7 @@ diff --git a/beesdoo_shift/views/cooperative_status.xml b/beesdoo_shift/views/cooperative_status.xml index c8a99e2..d75bbb5 100644 --- a/beesdoo_shift/views/cooperative_status.xml +++ b/beesdoo_shift/views/cooperative_status.xml @@ -179,7 +179,7 @@
+ groups="beesdoo_shift.group_shift_attendance" sequence="1" /> @@ -192,5 +192,3 @@
- - diff --git a/beesdoo_shift/views/res_config_view.xml b/beesdoo_shift/views/res_config_view.xml new file mode 100644 index 0000000..76015d6 --- /dev/null +++ b/beesdoo_shift/views/res_config_view.xml @@ -0,0 +1,40 @@ + + + + + + + Shifts Configuration Form + beesdoo.shift.config.settings + +
+
+
+ + + + + +
+
+ + + Settings + beesdoo.shift.config.settings + form + inline + + + +
+
diff --git a/beesdoo_shift/views/task.xml b/beesdoo_shift/views/task.xml index 4ef96c3..2da048d 100644 --- a/beesdoo_shift/views/task.xml +++ b/beesdoo_shift/views/task.xml @@ -219,7 +219,7 @@ + sequence="1" groups="beesdoo_shift.group_shift_attendance" /> diff --git a/beesdoo_shift/views/task_template.xml b/beesdoo_shift/views/task_template.xml index cea8681..06fa900 100644 --- a/beesdoo_shift/views/task_template.xml +++ b/beesdoo_shift/views/task_template.xml @@ -178,7 +178,7 @@ + groups="beesdoo_shift.group_shift_attendance_sheet" /> From 4774617094ebfb8ca8d3b17e265f1ccd9ce16571 Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Mon, 2 Dec 2019 16:11:40 +0100 Subject: [PATCH 018/208] [ADD] b_shift : demo datas --- beesdoo_shift/__openerp__.py | 5 ++ beesdoo_shift/demo/templates.xml | 107 +++++++++++++++++++++++++++++++ beesdoo_shift/demo/users.xml | 37 +++++++++++ beesdoo_shift/demo/workers.xml | 83 ++++++++++++++++++++++++ 4 files changed, 232 insertions(+) create mode 100644 beesdoo_shift/demo/templates.xml create mode 100644 beesdoo_shift/demo/users.xml create mode 100644 beesdoo_shift/demo/workers.xml diff --git a/beesdoo_shift/__openerp__.py b/beesdoo_shift/__openerp__.py index ab92d23..27faeac 100644 --- a/beesdoo_shift/__openerp__.py +++ b/beesdoo_shift/__openerp__.py @@ -39,4 +39,9 @@ "wizard/holiday.xml", "wizard/temporary_exemption.xml", ], + 'demo': [ + "demo/workers.xml", + "demo/users.xml", + "demo/templates.xml", + ] } diff --git a/beesdoo_shift/demo/templates.xml b/beesdoo_shift/demo/templates.xml new file mode 100644 index 0000000..c6131ed --- /dev/null +++ b/beesdoo_shift/demo/templates.xml @@ -0,0 +1,107 @@ + + + + + + Inventaire + Inventaire frais et vrac. + + + + Bureau des Membres + Gestion admin (encodage liste présences, etc.) + + + + Magasin + Gestion du magasin. + + + + Découpe fromage + Caisse, remplissage des rayons, accueil. + + + + Lundi + 1 + + + + Mardi + 2 + + + + Mercredi + 3 + + + + Jeudi + 4 + + + + Vendredi + 5 + + + + Samedi + 6 + + + + Dimanche + 7 + + + + 1 + Semaine A + + + + A_LUN_7:00-9:30 + + + + 7 + 9.5 + 2.5 + 12 + + + + + + A_MAR_12:00-14:30 + + + + 12 + 14.5 + 2.5 + 9 + + + + + + A_VEN_7:00-9:30 + + + + 7 + 9.5 + 2.5 + 7 + + + + + diff --git a/beesdoo_shift/demo/users.xml b/beesdoo_shift/demo/users.xml new file mode 100644 index 0000000..92f17f0 --- /dev/null +++ b/beesdoo_shift/demo/users.xml @@ -0,0 +1,37 @@ + + + + + + + + Generic Account + generic@demo.net + + + + Permanent Member Demo + + permanent@demo.net + Ixelles + 1050 + + + + + + generic + demo + + + + + permanent + demo + + + + diff --git a/beesdoo_shift/demo/workers.xml b/beesdoo_shift/demo/workers.xml new file mode 100644 index 0000000..aa7e9b7 --- /dev/null +++ b/beesdoo_shift/demo/workers.xml @@ -0,0 +1,83 @@ + + + + + + + + + 2 + regular + + + + + + 2 + irregular + + + + + + + + 2 + regular + + + + + 2 + irregular + + + + + + 2 + regular + + + + + + + 2 + regular + + + + + regular + share_a + + + + irregular + share_a + + + + regular + share_a + + + + irregular + share_a + + + + regular + share_a + + + + regular + share_a + + From 1ea6ced1e87ccebab23ca54f2e449160fc47af1d Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Thu, 31 Oct 2019 18:10:35 +0100 Subject: [PATCH 019/208] [ADD] b_shift : attendance sheet validation wizard --- beesdoo_shift/__openerp__.py | 1 + beesdoo_shift/views/attendance_sheet.xml | 4 +++ beesdoo_shift/wizard/__init__.py | 1 + .../wizard/validate_attendance_sheet.py | 31 +++++++++++++++++++ .../wizard/validate_attendance_sheet.xml | 21 +++++++++++++ 5 files changed, 58 insertions(+) create mode 100644 beesdoo_shift/wizard/validate_attendance_sheet.py create mode 100644 beesdoo_shift/wizard/validate_attendance_sheet.xml diff --git a/beesdoo_shift/__openerp__.py b/beesdoo_shift/__openerp__.py index 27faeac..f732eff 100644 --- a/beesdoo_shift/__openerp__.py +++ b/beesdoo_shift/__openerp__.py @@ -28,6 +28,7 @@ "views/planning.xml", "views/cooperative_status.xml", "views/exempt_reason.xml", + "wizard/validate_attendance_sheet.xml", "views/attendance_sheet.xml", "views/attendance_sheet_admin.xml", "wizard/instanciate_planning.xml", diff --git a/beesdoo_shift/views/attendance_sheet.xml b/beesdoo_shift/views/attendance_sheet.xml index c816ff5..1c3e433 100644 --- a/beesdoo_shift/views/attendance_sheet.xml +++ b/beesdoo_shift/views/attendance_sheet.xml @@ -64,6 +64,10 @@
+
diff --git a/beesdoo_shift/wizard/__init__.py b/beesdoo_shift/wizard/__init__.py index 7f92f15..91f5444 100644 --- a/beesdoo_shift/wizard/__init__.py +++ b/beesdoo_shift/wizard/__init__.py @@ -6,3 +6,4 @@ import subscribe import extension import holiday import temporary_exemption +import validate_attendance_sheet diff --git a/beesdoo_shift/wizard/validate_attendance_sheet.py b/beesdoo_shift/wizard/validate_attendance_sheet.py new file mode 100644 index 0000000..dc81004 --- /dev/null +++ b/beesdoo_shift/wizard/validate_attendance_sheet.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +from openerp import models, fields, api, exceptions, _ +from openerp.exceptions import UserError, ValidationError + + +class ValidateAttendanceSheet(models.TransientModel): + _name = "beesdoo.shift.sheet.validate" + _description = """Check the user name and validate sheet. + Useless for users in group_cooperative_admin""" + + def _get_sheet(self): + return self._context.get("active_id") + + # current user as default value ! + user = fields.Many2one("res.partner", string="User Name", required=True,) + + # Is the "@api.multi" correct here ? + @api.multi + def validate_sheet(self): + sheet_id = self._context.get("active_id") + sheet_model = self._context.get("active_model") + sheet = self.env[sheet_model].browse(sheet_id) + sheet.ensure_one() + if not self.user.super: + raise UserError( + "You must be super-coop or admin to validate the sheet." + ) + sheet.validated_by = self.user + sheet.validate() + + return diff --git a/beesdoo_shift/wizard/validate_attendance_sheet.xml b/beesdoo_shift/wizard/validate_attendance_sheet.xml new file mode 100644 index 0000000..d68de37 --- /dev/null +++ b/beesdoo_shift/wizard/validate_attendance_sheet.xml @@ -0,0 +1,21 @@ + + + Validate Attendance Sheet + beesdoo.shift.sheet.validate + + + + + From e8f27cdf5d56ddc10f4189f0110ab1b0380d130f Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Mon, 4 Nov 2019 17:33:30 +0100 Subject: [PATCH 020/208] [ADD] b_shift : attendance sheet notifications count --- beesdoo_shift/models/attendance_sheet.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py index a9c4986..ef65baf 100644 --- a/beesdoo_shift/models/attendance_sheet.py +++ b/beesdoo_shift/models/attendance_sheet.py @@ -147,8 +147,7 @@ class AttendanceSheetShiftAdded(models.Model): class AttendanceSheet(models.Model): _name = "beesdoo.shift.sheet" - _inherit = ["mail.thread"] - # _inherit = ['mail.thread','ir.needaction_mixin'] + _inherit = ["mail.thread", "ir.needaction_mixin"] _description = "Attendance sheets with all the shifts in one time range." _order = "start_time" @@ -332,9 +331,16 @@ class AttendanceSheet(models.Model): new_sheet.max_worker_nb += task_template.worker_nb return new_sheet - # @api.model - # def _needaction_domain_get(self): - # return [('state','=','not_validated')] + # Workaround to display notifications only for unread and not validated + # sheets, via a check on domain. + @api.model + def _needaction_count(self, domain=None): + if domain == [ + ("is_annotated", "=", True), + ("is_read", "=", False), + ] or domain == [("state", "=", "not_validated")]: + return self.search_count(domain) + return @api.multi def write(self, vals): From 91ef2bf57a92553e75ee0f9f13430db3033f9488 Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Tue, 5 Nov 2019 17:35:39 +0100 Subject: [PATCH 021/208] [ADD] b_shift : attendance sheet list items coloration --- beesdoo_shift/views/attendance_sheet.xml | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/beesdoo_shift/views/attendance_sheet.xml b/beesdoo_shift/views/attendance_sheet.xml index 1c3e433..a3d7540 100644 --- a/beesdoo_shift/views/attendance_sheet.xml +++ b/beesdoo_shift/views/attendance_sheet.xml @@ -6,7 +6,9 @@ Expected Shifts List beesdoo.shift.sheet.expected - + @@ -28,7 +30,8 @@ Added Shifts List beesdoo.shift.sheet.added - + @@ -43,11 +46,11 @@ - Daily Attendance Sheets List + Attendance Sheet List beesdoo.shift.sheet - - + + From 231142eb7b86d150056db800027241678a386719 Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Thu, 7 Nov 2019 13:56:17 +0100 Subject: [PATCH 022/208] [FIX] b_shift : attendance sheet replacement worker field name --- beesdoo_shift/models/attendance_sheet.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py index ef65baf..36252c0 100644 --- a/beesdoo_shift/models/attendance_sheet.py +++ b/beesdoo_shift/models/attendance_sheet.py @@ -386,9 +386,7 @@ class AttendanceSheet(models.Model): # How can we show a message without stopping validation ? if actual_stage: actual_shift.stage_id = actual_stage - actual_shift.replacement_worker_id = ( - expected_shift.replacement_worker_id - ) + actual_shift.replaced_id = expected_shift.replacement_worker_id # Added shifts status update for added_shift in self.added_shift_ids: From bd9379919e2026c60236c3a0a604e04b6019063d Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Thu, 7 Nov 2019 13:57:16 +0100 Subject: [PATCH 023/208] [IMP] b_shift : attendance sheet views set no_open options --- beesdoo_shift/views/attendance_sheet.xml | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/beesdoo_shift/views/attendance_sheet.xml b/beesdoo_shift/views/attendance_sheet.xml index a3d7540..19b2ae5 100644 --- a/beesdoo_shift/views/attendance_sheet.xml +++ b/beesdoo_shift/views/attendance_sheet.xml @@ -6,15 +6,16 @@ Expected Shifts List beesdoo.shift.sheet.expected - - - + + + [('working_mode','=','irregular')]}" + options="{'no_create': True, 'no_create_edit':True}"/> Added Shifts List beesdoo.shift.sheet.added - - - + + Date: Thu, 7 Nov 2019 15:30:57 +0100 Subject: [PATCH 025/208] [ADD] b_shift : attendance shift validation barcode field --- beesdoo_shift/wizard/validate_attendance_sheet.py | 15 ++++++++++++++- .../wizard/validate_attendance_sheet.xml | 1 + 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/beesdoo_shift/wizard/validate_attendance_sheet.py b/beesdoo_shift/wizard/validate_attendance_sheet.py index dc81004..9dc9505 100644 --- a/beesdoo_shift/wizard/validate_attendance_sheet.py +++ b/beesdoo_shift/wizard/validate_attendance_sheet.py @@ -12,11 +12,24 @@ class ValidateAttendanceSheet(models.TransientModel): return self._context.get("active_id") # current user as default value ! - user = fields.Many2one("res.partner", string="User Name", required=True,) + #card = fields.Many2one("member.card", string="MemberCard") + barcode = fields.Char(string="Barcode", required=True) + user = fields.Many2one("res.partner", compute="_compute_user", string="User Name", readonly=True) + + @api.depends("barcode") + def _compute_user(self): + if self.barcode: + card = self.env["member.card"].search([("barcode", "=", self.barcode)]) + if card: + self.user = card[0].partner_id + else: + self.user = False # Is the "@api.multi" correct here ? @api.multi def validate_sheet(self): + if not self.user: + raise UserError("Please set a correct barcode.") sheet_id = self._context.get("active_id") sheet_model = self._context.get("active_model") sheet = self.env[sheet_model].browse(sheet_id) diff --git a/beesdoo_shift/wizard/validate_attendance_sheet.xml b/beesdoo_shift/wizard/validate_attendance_sheet.xml index d68de37..f443f06 100644 --- a/beesdoo_shift/wizard/validate_attendance_sheet.xml +++ b/beesdoo_shift/wizard/validate_attendance_sheet.xml @@ -8,6 +8,7 @@ Emails will be sent to workers who did not attend their shift." /> +

@@ -94,11 +101,6 @@

Additional important informations

- - -

General feedback

From a45683d9ec4d41ca5c799615bf507014f582bfea Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Fri, 15 Nov 2019 18:06:15 +0100 Subject: [PATCH 029/208] [ADD] b_shift : attendance sheet archived attribute --- beesdoo_shift/models/attendance_sheet.py | 1 + beesdoo_shift/views/attendance_sheet.xml | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py index c10e597..fcf4dd5 100644 --- a/beesdoo_shift/models/attendance_sheet.py +++ b/beesdoo_shift/models/attendance_sheet.py @@ -161,6 +161,7 @@ class AttendanceSheet(models.Model): name = fields.Char( string="Name", compute="_compute_name", store=True, readonly=True ) + active = fields.Boolean(string="Active", default=1) state = fields.Selection( [ ("not_validated", "Not Validated"), diff --git a/beesdoo_shift/views/attendance_sheet.xml b/beesdoo_shift/views/attendance_sheet.xml index b23aa04..607342e 100644 --- a/beesdoo_shift/views/attendance_sheet.xml +++ b/beesdoo_shift/views/attendance_sheet.xml @@ -82,6 +82,13 @@ string="Mark as read" groups="beesdoo_shift.group_cooperative_admin" /> +

From 6b4f4b1495ba52e22c7e58e44e9b3c9a9c11d6c9 Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Mon, 18 Nov 2019 18:24:17 +0100 Subject: [PATCH 030/208] [ADD] b_shift : attendance sheets barcode scanner support --- beesdoo_shift/__openerp__.py | 3 +- beesdoo_shift/models/attendance_sheet.py | 7 +++- .../static/src/js/barcode_scanner_focus.js | 35 +++++++++++++++++++ beesdoo_shift/views/attendance_sheet.xml | 13 +++---- beesdoo_shift/views/beesdoo_shift_assets.xml | 10 ++++++ 5 files changed, 60 insertions(+), 8 deletions(-) create mode 100644 beesdoo_shift/static/src/js/barcode_scanner_focus.js create mode 100644 beesdoo_shift/views/beesdoo_shift_assets.xml diff --git a/beesdoo_shift/__openerp__.py b/beesdoo_shift/__openerp__.py index 7662a23..fe75ebf 100644 --- a/beesdoo_shift/__openerp__.py +++ b/beesdoo_shift/__openerp__.py @@ -15,7 +15,7 @@ 'category': 'Cooperative management', 'version': '9.0.1.3.0', - 'depends': ['beesdoo_base'], + 'depends': ['beesdoo_base', 'barcodes'], 'data': [ "data/system_parameter.xml", @@ -23,6 +23,7 @@ "data/mail_template.xml", "security/group.xml", "security/ir.model.access.csv", + "views/beesdoo_shift_assets.xml", "views/task_template.xml", "views/res_config_view.xml", "views/task.xml", diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py index fcf4dd5..81b5419 100644 --- a/beesdoo_shift/models/attendance_sheet.py +++ b/beesdoo_shift/models/attendance_sheet.py @@ -154,7 +154,7 @@ class AttendanceSheetShiftAdded(models.Model): class AttendanceSheet(models.Model): _name = "beesdoo.shift.sheet" - _inherit = ["mail.thread", "ir.needaction_mixin"] + _inherit = ["mail.thread", "ir.needaction_mixin", "barcodes.barcode_events_mixin"] _description = "Attendance sheets with all the shifts in one time range." _order = "start_time" @@ -481,3 +481,8 @@ class AttendanceSheet(models.Model): "view_mode": "form", "target": "new", } + + def on_barcode_scanned(self, barcode): + import pdb; pdb.set_trace() + worker = self.env["res.partner"].search([("barcode","=",barcode)]) + self.name = barcode diff --git a/beesdoo_shift/static/src/js/barcode_scanner_focus.js b/beesdoo_shift/static/src/js/barcode_scanner_focus.js new file mode 100644 index 0000000..0b35e71 --- /dev/null +++ b/beesdoo_shift/static/src/js/barcode_scanner_focus.js @@ -0,0 +1,35 @@ +odoo.define('beesdoo_shift.barcode_scanner_focus', function (require) { +"use strict"; + + var core = require('web.core'); + + var FormViewBarcodeHandler = require('barcodes.FormViewBarcodeHandler'); + + var BarcodeHandlerUnfocus = FormViewBarcodeHandler.extend({ + _set_quantity_listener: function(event) { + console.log("TEST"); + this.super(); + }, + // Method is not called when a field is focus. + on_barcode_scanned: function(barcode) { + console.log("method called"); + this._super(barcode); + } + }); +core.form_widget_registry.add('barcode_handler_unfocus', BarcodeHandlerUnfocus); + +return BarcodeHandlerUnfocus; +/* + var Widget = require('web.Widget'); + var BarcodeHandlerUnfocus = Widget.extend({ + events: { + 'click .oe_stat_button': 'function_test', + } + function_test: function (){ + console.log("test handler") + }); + + }); + core.form_widget_registry.add('barcode_handler_unfocus', BarcodeHandlerUnfocus); + return BarcodeHandlerUnfocus;*/ +}); diff --git a/beesdoo_shift/views/attendance_sheet.xml b/beesdoo_shift/views/attendance_sheet.xml index 607342e..615dd4a 100644 --- a/beesdoo_shift/views/attendance_sheet.xml +++ b/beesdoo_shift/views/attendance_sheet.xml @@ -68,6 +68,7 @@ beesdoo.shift.sheet
+
-

+

@@ -100,19 +101,19 @@ - +

Added workers

Additional important informations

- +

General feedback

- - - + + + diff --git a/beesdoo_shift/views/beesdoo_shift_assets.xml b/beesdoo_shift/views/beesdoo_shift_assets.xml new file mode 100644 index 0000000..596495a --- /dev/null +++ b/beesdoo_shift/views/beesdoo_shift_assets.xml @@ -0,0 +1,10 @@ + + + + + + From 4d46e07394a09341246fdef0d7f3c32e1807bf6d Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Wed, 20 Nov 2019 10:42:52 +0100 Subject: [PATCH 031/208] [REM] b_shift : attendance sheet cancelled status --- beesdoo_shift/models/attendance_sheet.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py index 81b5419..dd462a9 100644 --- a/beesdoo_shift/models/attendance_sheet.py +++ b/beesdoo_shift/models/attendance_sheet.py @@ -32,8 +32,7 @@ class AttendanceSheetShift(models.Model): stage = fields.Selection( [ ("present", "Present"), - ("absent", "Absent"), - ("cancelled", "Cancelled"), + ("absent", "Absent") ], string="Shift Stage", copy=False, @@ -166,7 +165,6 @@ class AttendanceSheet(models.Model): [ ("not_validated", "Not Validated"), ("validated", "Validated"), - ("cancelled", "Cancelled"), ], string="Status", readonly=True, From ea0bb5d0478ec10119b00f4403a95829a613d4cf Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Wed, 20 Nov 2019 10:43:52 +0100 Subject: [PATCH 032/208] [FIX] b_shift : attendance sheet shifts worker not required --- beesdoo_shift/models/attendance_sheet.py | 30 ++++++++++++------------ 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py index dd462a9..6345381 100644 --- a/beesdoo_shift/models/attendance_sheet.py +++ b/beesdoo_shift/models/attendance_sheet.py @@ -46,7 +46,6 @@ class AttendanceSheetShift(models.Model): ("working_mode", "in", ("regular", "irregular")), ("state", "not in", ("unsubscribed", "resigning")), ], - required=True, ) task_type_id = fields.Many2one( "beesdoo.shift.type", string="Task Type", default=_default_task_type_id @@ -342,20 +341,21 @@ class AttendanceSheet(models.Model): compensation_nb = "1" else: compensation_nb = "2" - new_expected_shift = expected_shift.create( - { - "attendance_sheet_id": new_sheet.id, - "task_id": task.id, - "worker_id": task.worker_id.id, - "replacement_worker_id": task.replaced_id.id, - "task_type_id": task.task_type_id.id, - "stage": "absent", - "compensation_nb": compensation_nb, - "working_mode": task.working_mode, - } - ) - task_templates.add(task.task_template_id) - new_sheet.expected_worker_nb += 1 + if task.worker_id: + new_expected_shift = expected_shift.create( + { + "attendance_sheet_id": new_sheet.id, + "task_id": task.id, + "worker_id": task.worker_id.id, + "replacement_worker_id": task.replaced_id.id, + "task_type_id": task.task_type_id.id, + "stage": "absent", + "compensation_nb": compensation_nb, + "working_mode": task.working_mode, + } + ) + task_templates.add(task.task_template_id) + new_sheet.expected_worker_nb += 1 # Maximum number of workers calculation for task_template in task_templates: new_sheet.max_worker_nb += task_template.worker_nb From c071116c605cc5321a8a995c8326e196f58f0416 Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Wed, 20 Nov 2019 11:00:31 +0100 Subject: [PATCH 033/208] [IMP] b_shift : attendance sheets linting and menu sequences --- beesdoo_shift/models/attendance_sheet.py | 30 +++++++++++-------- beesdoo_shift/views/attendance_sheet.xml | 1 + .../wizard/generate_attendance_sheet.xml | 1 - 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py index 6345381..aa51b7e 100644 --- a/beesdoo_shift/models/attendance_sheet.py +++ b/beesdoo_shift/models/attendance_sheet.py @@ -280,15 +280,20 @@ class AttendanceSheet(models.Model): @api.constrains("expected_shift_ids", "added_shift_ids") def _constrain_unique_worker(self): - added_workers = set(self.added_shift_ids.mapped("worker_id").ids) - expected_workers = self.expected_shift_ids.mapped("worker_id").ids - replacement_workers = self.expected_shift_ids.mapped( - "replacement_worker_id" - ).ids - if len( - added_workers.intersection(replacement_workers + expected_workers) - ): - raise UserError("You can't add an already expected worker.") + # Warning : map return generator in python3 (for Odoo 12) + added_workers_ids = map(lambda s: s.worker_id.id, self.added_shift_ids) + expected_workers_ids = map( + lambda s: s.worker_id.id, self.expected_shift_ids + ) + replacement_workers_ids = map( + lambda s: s.replacement_worker_id.id, self.expected_shift_ids + ) + ids = ( + added_workers_ids + expected_workers_ids + replacement_workers_ids + ) + + if len(ids) - len(set(ids)): + raise UserError("You can't add the same worker more than once.") @api.depends("added_shift_ids") def _compute_added_shift_nb(self): @@ -296,7 +301,6 @@ class AttendanceSheet(models.Model): return # Compute name (not hardcorded to prevent incoherence with timezone) - # Actually not working, should depends on timezone as well @api.depends("start_time", "end_time") def _compute_name(self): @@ -481,6 +485,8 @@ class AttendanceSheet(models.Model): } def on_barcode_scanned(self, barcode): - import pdb; pdb.set_trace() - worker = self.env["res.partner"].search([("barcode","=",barcode)]) + import pdb + + pdb.set_trace() + worker = self.env["res.partner"].search([("barcode", "=", barcode)]) self.name = barcode diff --git a/beesdoo_shift/views/attendance_sheet.xml b/beesdoo_shift/views/attendance_sheet.xml index 615dd4a..2d7a65e 100644 --- a/beesdoo_shift/views/attendance_sheet.xml +++ b/beesdoo_shift/views/attendance_sheet.xml @@ -153,6 +153,7 @@ name="Daily attendance sheets" parent="menu_sheet_top" action="action_sheet_daily" + sequence="2" /> diff --git a/beesdoo_shift/wizard/generate_attendance_sheet.xml b/beesdoo_shift/wizard/generate_attendance_sheet.xml index 7e0d43e..6154abb 100644 --- a/beesdoo_shift/wizard/generate_attendance_sheet.xml +++ b/beesdoo_shift/wizard/generate_attendance_sheet.xml @@ -31,7 +31,6 @@ name="Generate a sheet" parent="menu_sheet_top" action="action_generate_sheet_wizard" - sequence="5" /> From 4d01211029bfe4e09ac1893e38494ee73abf9909 Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Wed, 20 Nov 2019 11:31:55 +0100 Subject: [PATCH 034/208] [FIX] b_shift : comment attendance sheet unique worker constraint --- beesdoo_shift/models/attendance_sheet.py | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py index aa51b7e..2a9bbf9 100644 --- a/beesdoo_shift/models/attendance_sheet.py +++ b/beesdoo_shift/models/attendance_sheet.py @@ -280,20 +280,15 @@ class AttendanceSheet(models.Model): @api.constrains("expected_shift_ids", "added_shift_ids") def _constrain_unique_worker(self): + return # Warning : map return generator in python3 (for Odoo 12) - added_workers_ids = map(lambda s: s.worker_id.id, self.added_shift_ids) - expected_workers_ids = map( - lambda s: s.worker_id.id, self.expected_shift_ids - ) - replacement_workers_ids = map( - lambda s: s.replacement_worker_id.id, self.expected_shift_ids - ) - ids = ( - added_workers_ids + expected_workers_ids + replacement_workers_ids - ) + # added_workers_ids = map(lambda s: s.worker_id.id, self.added_shift_ids) + # expected_workers_ids = map(lambda s: s.worker_id.id, self.expected_shift_ids) + # replacement_workers_ids = map(lambda s: s.replacement_worker_id.id, self.expected_shift_ids) + # ids = (added_workers_ids + expected_workers_ids + replacement_workers_ids) - if len(ids) - len(set(ids)): - raise UserError("You can't add the same worker more than once.") + # if len(ids) - len(set(ids)): + # raise UserError("You can't add the same worker more than once.") @api.depends("added_shift_ids") def _compute_added_shift_nb(self): From 82b68f1caa2bdbcbd7b67aa1f52eb767e314a391 Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Thu, 21 Nov 2019 19:00:48 +0100 Subject: [PATCH 035/208] [IMP] b_shift : change and add access rules --- beesdoo_shift/security/ir.model.access.csv | 56 ++++++++++------------ 1 file changed, 26 insertions(+), 30 deletions(-) diff --git a/beesdoo_shift/security/ir.model.access.csv b/beesdoo_shift/security/ir.model.access.csv index 6971b61..e576397 100644 --- a/beesdoo_shift/security/ir.model.access.csv +++ b/beesdoo_shift/security/ir.model.access.csv @@ -1,32 +1,28 @@ id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink -access_attendance_sheet_task,Attendance Create Shift,model_beesdoo_shift_shift,group_shift_attendance_sheet,1,1,1,0 -access_attendance_sheet_abstract_task,Attendance Sheet Shift Read Abstract (generic),model_beesdoo_shift_sheet_shift,group_shift_attendance_sheet,1,0,0,0 -access_attendance_sheet_task_expected,Attendance Sheet Shift Expected (generic),model_beesdoo_shift_sheet_expected,group_shift_attendance_sheet,1,1,1,0 -access_attendance_sheet_task_added,Attendance Sheet Shift Added (generic),model_beesdoo_shift_sheet_added,group_shift_attendance_sheet,1,1,1,1 -access_attendance_sheet,Attendance Sheet Create (generic),model_beesdoo_shift_sheet,group_shift_attendance_sheet,1,1,1,0 -access_attendance_sheet_task_template,Attendance Read Template,model_beesdoo_shift_template,group_shift_attendance_sheet,1,0,0,0 - -access_coopplanning_task_stage,Attendance Read Stage,model_beesdoo_shift_stage,group_shift_attendance_sheet,1,0,0,0 -access_coopplanning_task_type,Attendance Read Type,model_beesdoo_shift_type,group_shift_attendance_sheet,1,0,0,0 -access_coopplanning_daynumber,Attendance Read Daynumber,model_beesdoo_shift_daynumber,group_shift_attendance,1,0,0,0 -access_coopplanning_planning,Attendance Read Planning,model_beesdoo_shift_planning,group_shift_attendance,1,0,0,0 -access_coopplanning_task_template,Attendance Read Template,model_beesdoo_shift_template,group_shift_attendance,1,0,0,0 -access_coopplanning_task,Attendance Edit Shift,model_beesdoo_shift_shift,group_shift_attendance,1,1,0,0 -access_coopplanning_task_full,Shift Management all Shift,model_beesdoo_shift_shift,group_shift_management,1,1,1,1 - -admin_access_attendance_sheet,Attendance Sheet Shift Read Abstract,model_beesdoo_shift_sheet_shift,group_cooperative_admin,1,1,1,1 -admin_access_attendance_sheet_expected,Attendance Sheet Shift Read Expected,model_beesdoo_shift_sheet_expected,group_cooperative_admin,1,1,1,1 - - -access_coop_status,Coop Status Read for all,model_cooperative_status,,1,0,0,0 -access_coop_status_all,Coop Status Admin,model_cooperative_status,group_cooperative_admin,1,1,1,1 -all_config_coopplanning_task_type,Attendance Read Type,model_beesdoo_shift_type,group_planning_management,1,1,1,1 -all_config_coopplanning_daynumber,Attendance Read Daynumber,model_beesdoo_shift_daynumber,group_planning_management,1,1,1,1 -all_config_coopplanning_planning,Attendance Read Planning,model_beesdoo_shift_planning,group_planning_management,1,1,1,1 -all_config_coopplanning_task_template,Attendance Read Template,model_beesdoo_shift_template,group_planning_management,1,1,1,1 -all_config_coopplanning_task,Attendance Edit Shift,model_beesdoo_shift_shift,group_planning_management,1,1,1,1 -exempt_reason_read_all,Exempt Reason Read all ,beesdoo_shift.model_cooperative_exempt_reason,,1,0,0,0 -exempt_reason,Exempt Reason Admin,beesdoo_shift.model_cooperative_exempt_reason,beesdoo_shift.group_cooperative_admin,1,1,1,1 -history_read_all,History Read All,beesdoo_shift.model_cooperative_status_history,,1,0,0,0 -access_beesdoo_shift_journal,access_beesdoo_shift_journal,model_beesdoo_shift_journal,beesdoo_shift.group_cooperative_admin,1,0,1,1 +create_beesdoo_shift_shift,create_edit_beesdoo_shift_shift,model_beesdoo_shift_shift,group_shift_attendance_sheet,1,1,1,0 +read_beesdoo_shift_sheet_shift,read_beesdoo_shift_sheet_shift,model_beesdoo_shift_sheet_shift,group_shift_attendance_sheet,1,0,0,0 +create_beesdoo_shift_sheet_expected,create_beesdoo_shift_sheet_expected,model_beesdoo_shift_sheet_expected,group_shift_attendance_sheet,1,1,1,0 +manage_beesdoo_shift_sheet_added,manage_beesdoo_shift_sheet_added,model_beesdoo_shift_sheet_added,group_shift_attendance_sheet,1,1,1,1 +create_beesdoo_shift_sheet,create_beesdoo_shift_sheet,model_beesdoo_shift_sheet,group_shift_attendance_sheet,1,1,1,0 +sheet_access_beesdoo_shift_template,sheet_access_beesdoo_shift_template,model_beesdoo_shift_template,group_shift_attendance_sheet,1,0,0,0 +sheet_access_beesdoo_shift_type,sheet_access_beesdoo_shift_type,model_beesdoo_shift_type,group_shift_attendance_sheet,1,0,0,0 +access_beesdoo_shift_daynumber,access_beesdoo_shift_daynumber,model_beesdoo_shift_daynumber,group_shift_attendance,1,0,0,0 +read_beesdoo_shift_planning,read_beesdoo_shift_planning,model_beesdoo_shift_planning,group_shift_attendance,1,0,0,0 +access_beesdoo_shift_template,access_beesdoo_shift_template,model_beesdoo_shift_template,group_shift_attendance,1,0,0,0 +write_beesdoo_shift_shift,write_beesdoo_shift_shift,model_beesdoo_shift_shift,group_shift_attendance,1,1,0,0 +manage_beesdoo_shift_shift,manage_beesdoo_shift_shift,model_beesdoo_shift_shift,group_shift_management,1,1,1,1 +manage_beesdoo_shift_type,manage_beesdoo_shift_type,model_beesdoo_shift_type,group_planning_management,1,1,1,1 +manage_beesdoo_shift_daynumber,manage_beesdoo_shift_daynumber,model_beesdoo_shift_daynumber,group_planning_management,1,1,1,1 +manage_beesdoo_shift_planning,manage_beesdoo_shift_planning,model_beesdoo_shift_planning,group_planning_management,1,1,1,1 +manage_beesdoo_shift_template,manage_beesdoo_shift_template,model_beesdoo_shift_template,group_planning_management,1,1,1,1 +manage_beesdoo_shift_sheet_shift,beesdoo_shift_sheet_shift,model_beesdoo_shift_sheet_shift,group_cooperative_admin,1,1,1,1 +manage_beesdoo_shift_sheet_expected,manage_beesdoo_shift_sheet_expected,model_beesdoo_shift_sheet_expected,group_cooperative_admin,1,1,1,1 +manage_cooperative_status,manage_cooperative_status,model_cooperative_status,group_cooperative_admin,1,1,1,1 +manage_cooperative_exempt_reason,manage_cooperative_exempt_reason,model_cooperative_exempt_reason,group_cooperative_admin,1,1,1,1 +read_beesdoo_shift_journal,read_beesdoo_shift_journal,model_beesdoo_shift_journal,group_cooperative_admin,1,0,1,1 +access_cooperative_status,access_cooperative_status,model_cooperative_status,,1,0,0,0 +read_cooperative_exempt_reason,read_cooperative_exempt_reason,model_cooperative_exempt_reason,,1,0,0,0 +read_cooperative_status_history,read_cooperative_status_history,model_cooperative_status_history,,1,0,0,0 +access_beesdoo_shift_type,access_beesdoo_shift_type,model_beesdoo_shift_type,group_shift_attendance,1,0,0,0 +access_beesdoo_shift_template,access_beesdoo_shift_template,model_beesdoo_shift_template,group_shift_attendance,1,0,0,0 From 87b38ef134697a2b62dcdaa3547acbbdb179ea51 Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Thu, 21 Nov 2019 19:03:36 +0100 Subject: [PATCH 036/208] [IMP] b_shift : attendance sheets code cleaning --- beesdoo_shift/models/attendance_sheet.py | 43 ++++++++----------- .../wizard/validate_attendance_sheet.py | 5 --- 2 files changed, 17 insertions(+), 31 deletions(-) diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py index 2a9bbf9..7ec28a5 100644 --- a/beesdoo_shift/models/attendance_sheet.py +++ b/beesdoo_shift/models/attendance_sheet.py @@ -30,10 +30,7 @@ class AttendanceSheetShift(models.Model): ondelete="cascade", ) stage = fields.Selection( - [ - ("present", "Present"), - ("absent", "Absent") - ], + [("present", "Present"), ("absent", "Absent")], string="Shift Stage", copy=False, ) @@ -152,7 +149,11 @@ class AttendanceSheetShiftAdded(models.Model): class AttendanceSheet(models.Model): _name = "beesdoo.shift.sheet" - _inherit = ["mail.thread", "ir.needaction_mixin", "barcodes.barcode_events_mixin"] + _inherit = [ + "mail.thread", + "ir.needaction_mixin", + "barcodes.barcode_events_mixin", + ] _description = "Attendance sheets with all the shifts in one time range." _order = "start_time" @@ -161,14 +162,10 @@ class AttendanceSheet(models.Model): ) active = fields.Boolean(string="Active", default=1) state = fields.Selection( - [ - ("not_validated", "Not Validated"), - ("validated", "Validated"), - ], + [("not_validated", "Not Validated"), ("validated", "Validated"),], string="Status", readonly=True, index=True, - copy=False, default="not_validated", track_visibility="onchange", ) @@ -303,15 +300,13 @@ class AttendanceSheet(models.Model): start_time_dt = fields.Datetime.context_timestamp(self, start_time_dt) end_time_dt = fields.Datetime.from_string(self.end_time) end_time_dt = fields.Datetime.context_timestamp(self, end_time_dt) - self.name = ( start_time_dt.strftime("%Y-%m-%d") - + " " + + " " + start_time_dt.strftime("%H:%M") - + " - " + + "-" + end_time_dt.strftime("%H:%M") ) - return # Is this method necessary ? @api.depends("annotation") @@ -356,8 +351,8 @@ class AttendanceSheet(models.Model): task_templates.add(task.task_template_id) new_sheet.expected_worker_nb += 1 # Maximum number of workers calculation - for task_template in task_templates: - new_sheet.max_worker_nb += task_template.worker_nb + + new_sheet.max_worker_nb = sum(r.worker_nb for r in task_templates) return new_sheet # Workaround to display notifications only for unread and not validated @@ -371,7 +366,6 @@ class AttendanceSheet(models.Model): return self.search_count(domain) return - @api.one def validate(self): self.ensure_one() if self.state == "validated": @@ -397,11 +391,11 @@ class AttendanceSheet(models.Model): # Expected shifts status update for expected_shift in self.expected_shift_ids: actual_shift = expected_shift.task_id - actual_stage = stage.search( - [("code", "=", expected_shift.get_actual_stage())] - ) + # We get stage record corresponding to mapped stage id + actual_stage = self.env.ref("beesdoo_shift.%s" % expected_shift.get_actual_stage()) + # If the actual stage has been deleted, the sheet is still validated. - # Raising an exception would stop this. + # Raising an exception would stop this but would prevent validation. # How can we show a message without stopping validation ? if actual_stage: actual_shift.stage_id = actual_stage @@ -409,10 +403,7 @@ class AttendanceSheet(models.Model): # Added shifts status update for added_shift in self.added_shift_ids: - actual_stage = stage.search( - [("code", "=", added_shift.get_actual_stage())] - ) - # WARNING: mapping the selection field to the booleans used in Task + actual_stage = self.env.ref("beesdoo_shift.%s" % added_shift.get_actual_stage()) is_regular_worker = added_shift.worker_id.working_mode == "regular" is_regular_shift = added_shift.regular_task_type == "normal" # Add an annotation if a regular worker is doing its regular shift @@ -429,7 +420,7 @@ class AttendanceSheet(models.Model): ("start_time", "=", self.start_time), ("end_time", "=", self.end_time), ("task_type_id", "=", added_shift.task_type_id.id), - ] + ], limit=1 ) if len(non_assigned_shifts): diff --git a/beesdoo_shift/wizard/validate_attendance_sheet.py b/beesdoo_shift/wizard/validate_attendance_sheet.py index 9dc9505..22bbdb1 100644 --- a/beesdoo_shift/wizard/validate_attendance_sheet.py +++ b/beesdoo_shift/wizard/validate_attendance_sheet.py @@ -8,10 +8,6 @@ class ValidateAttendanceSheet(models.TransientModel): _description = """Check the user name and validate sheet. Useless for users in group_cooperative_admin""" - def _get_sheet(self): - return self._context.get("active_id") - - # current user as default value ! #card = fields.Many2one("member.card", string="MemberCard") barcode = fields.Char(string="Barcode", required=True) user = fields.Many2one("res.partner", compute="_compute_user", string="User Name", readonly=True) @@ -33,7 +29,6 @@ class ValidateAttendanceSheet(models.TransientModel): sheet_id = self._context.get("active_id") sheet_model = self._context.get("active_model") sheet = self.env[sheet_model].browse(sheet_id) - sheet.ensure_one() if not self.user.super: raise UserError( "You must be super-coop or admin to validate the sheet." From 2f71ef99c3481172f7eb58802033040099d45f18 Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Thu, 21 Nov 2019 19:06:12 +0100 Subject: [PATCH 037/208] [FIX] b_shift : constrain_unique_worker on attendance sheets --- beesdoo_shift/models/attendance_sheet.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py index 7ec28a5..7036fda 100644 --- a/beesdoo_shift/models/attendance_sheet.py +++ b/beesdoo_shift/models/attendance_sheet.py @@ -277,20 +277,21 @@ class AttendanceSheet(models.Model): @api.constrains("expected_shift_ids", "added_shift_ids") def _constrain_unique_worker(self): - return # Warning : map return generator in python3 (for Odoo 12) - # added_workers_ids = map(lambda s: s.worker_id.id, self.added_shift_ids) - # expected_workers_ids = map(lambda s: s.worker_id.id, self.expected_shift_ids) - # replacement_workers_ids = map(lambda s: s.replacement_worker_id.id, self.expected_shift_ids) - # ids = (added_workers_ids + expected_workers_ids + replacement_workers_ids) + added_ids = map(lambda s: s.worker_id.id, self.added_shift_ids) + expected_ids = map(lambda s: s.worker_id.id, self.expected_shift_ids) + replacement_ids = map( + lambda s: s.replacement_worker_id.id, self.expected_shift_ids + ) + replacement_ids = filter(bool, replacement_ids) + ids = added_ids + expected_ids + replacement_ids - # if len(ids) - len(set(ids)): - # raise UserError("You can't add the same worker more than once.") + if (len(ids) - len(set(ids))) > 0: + raise UserError("You can't add the same worker more than once to an attendance sheet.") @api.depends("added_shift_ids") def _compute_added_shift_nb(self): self.added_worker_nb = len(self.added_shift_ids) - return # Compute name (not hardcorded to prevent incoherence with timezone) @api.depends("start_time", "end_time") From 82634f780bf176f041054df76917819e9e20cffa Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Fri, 22 Nov 2019 14:54:53 +0100 Subject: [PATCH 038/208] [FIX] b_shift : code cleaning --- beesdoo_shift/models/attendance_sheet.py | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py index 7036fda..4305179 100644 --- a/beesdoo_shift/models/attendance_sheet.py +++ b/beesdoo_shift/models/attendance_sheet.py @@ -9,7 +9,7 @@ from datetime import datetime from lxml import etree -class AttendanceSheetShift(models.Model): +class AttendanceSheetShift(models.AbstractModel): _name = "beesdoo.shift.sheet.shift" _description = "Copy of an actual shift into an attendance sheet" @@ -30,9 +30,8 @@ class AttendanceSheetShift(models.Model): ondelete="cascade", ) stage = fields.Selection( - [("present", "Present"), ("absent", "Absent")], + [("present", "Present"), ("absent", "Absent"), ("cancelled", "Cancelled")], string="Shift Stage", - copy=False, ) worker_id = fields.Many2one( @@ -132,11 +131,7 @@ class AttendanceSheetShiftAdded(models.Model): string="Task Mode (if regular)", help="Shift type for regular workers. ", ) - - @api.model - def create(self, vals): - vals["stage"] = "present" - return super(AttendanceSheetShiftAdded, self).create(vals) + stage = fields.Selection(default="present") @api.onchange("working_mode") def on_change_working_mode(self): @@ -439,7 +434,7 @@ class AttendanceSheet(models.Model): else: actual_shift = self.env["beesdoo.shift.shift"].create( { - "name": "Added shift TEST %s" % self.start_time, + "name": "[Added Shift] %s" % self.start_time, "task_type_id": added_shift.task_type_id.id, "worker_id": added_shift.worker_id.id, "start_time": self.start_time, From eb2ce01823692dcd997d426f770e1ce24ff1240c Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Fri, 22 Nov 2019 15:19:53 +0100 Subject: [PATCH 039/208] [IMP] b_shift : attendance sheet validation exceptions raised --- beesdoo_shift/models/attendance_sheet.py | 55 ++++++++++++++++++------ 1 file changed, 42 insertions(+), 13 deletions(-) diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py index 4305179..1a2f7be 100644 --- a/beesdoo_shift/models/attendance_sheet.py +++ b/beesdoo_shift/models/attendance_sheet.py @@ -282,7 +282,9 @@ class AttendanceSheet(models.Model): ids = added_ids + expected_ids + replacement_ids if (len(ids) - len(set(ids))) > 0: - raise UserError("You can't add the same worker more than once to an attendance sheet.") + raise UserError( + "You can't add the same worker more than once to an attendance sheet." + ) @api.depends("added_shift_ids") def _compute_added_shift_nb(self): @@ -372,23 +374,47 @@ class AttendanceSheet(models.Model): # Fields validation for added_shift in self.added_shift_ids: - if ( - not added_shift.stage - or not added_shift.worker_id - or not added_shift.task_type_id - or not added_shift.working_mode - or ( - added_shift.worker_id.working_mode == "regular" - and not added_shift.regular_task_type + if not added_shift.worker_id: + raise UserError( + "Worker must be set for shift %s" % added_shift.id + ) + if not added_shift.stage: + raise UserError( + "Shift Stage is missing for %s" + % added_shift.worker_id.name + ) + if not added_shift.task_type_id: + raise UserError( + "Task Type is missing for %s" % added_shift.worker_id.name + ) + if not added_shift.working_mode: + raise UserError( + "Working mode is missing for %s" + % added_shift.worker_id.name ) + if ( + added_shift.worker_id.working_mode == "regular" + and not added_shift.regular_task_type ): - raise UserError("All fields must be set before validation.") + raise UserError( + "Regular Task Type is missing for %s" + % added_shift.worker_id.name + ) + + for expected_shift in self.expected_shift_ids: + if not expected_shift.stage: + raise UserError( + "Shift Stage is missing for %s" + % expected_shift.worker_id.name + ) # Expected shifts status update for expected_shift in self.expected_shift_ids: actual_shift = expected_shift.task_id # We get stage record corresponding to mapped stage id - actual_stage = self.env.ref("beesdoo_shift.%s" % expected_shift.get_actual_stage()) + actual_stage = self.env.ref( + "beesdoo_shift.%s" % expected_shift.get_actual_stage() + ) # If the actual stage has been deleted, the sheet is still validated. # Raising an exception would stop this but would prevent validation. @@ -399,7 +425,9 @@ class AttendanceSheet(models.Model): # Added shifts status update for added_shift in self.added_shift_ids: - actual_stage = self.env.ref("beesdoo_shift.%s" % added_shift.get_actual_stage()) + actual_stage = self.env.ref( + "beesdoo_shift.%s" % added_shift.get_actual_stage() + ) is_regular_worker = added_shift.worker_id.working_mode == "regular" is_regular_shift = added_shift.regular_task_type == "normal" # Add an annotation if a regular worker is doing its regular shift @@ -416,7 +444,8 @@ class AttendanceSheet(models.Model): ("start_time", "=", self.start_time), ("end_time", "=", self.end_time), ("task_type_id", "=", added_shift.task_type_id.id), - ], limit=1 + ], + limit=1, ) if len(non_assigned_shifts): From 8b8417305f49e3d97c18fb98b8fa36ae4244d917 Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Fri, 22 Nov 2019 18:12:23 +0100 Subject: [PATCH 040/208] [ADD] b_shift : barcode scan to attendance sheet validation --- .../wizard/validate_attendance_sheet.py | 34 +++++++------------ .../wizard/validate_attendance_sheet.xml | 5 +-- 2 files changed, 16 insertions(+), 23 deletions(-) diff --git a/beesdoo_shift/wizard/validate_attendance_sheet.py b/beesdoo_shift/wizard/validate_attendance_sheet.py index 22bbdb1..a8f64e8 100644 --- a/beesdoo_shift/wizard/validate_attendance_sheet.py +++ b/beesdoo_shift/wizard/validate_attendance_sheet.py @@ -7,33 +7,25 @@ class ValidateAttendanceSheet(models.TransientModel): _name = "beesdoo.shift.sheet.validate" _description = """Check the user name and validate sheet. Useless for users in group_cooperative_admin""" + _inherit = ["barcodes.barcode_events_mixin"] - #card = fields.Many2one("member.card", string="MemberCard") - barcode = fields.Char(string="Barcode", required=True) - user = fields.Many2one("res.partner", compute="_compute_user", string="User Name", readonly=True) - - @api.depends("barcode") - def _compute_user(self): - if self.barcode: - card = self.env["member.card"].search([("barcode", "=", self.barcode)]) - if card: - self.user = card[0].partner_id - else: - self.user = False - - # Is the "@api.multi" correct here ? @api.multi - def validate_sheet(self): - if not self.user: - raise UserError("Please set a correct barcode.") + def validate_sheet(self, user): sheet_id = self._context.get("active_id") sheet_model = self._context.get("active_model") sheet = self.env[sheet_model].browse(sheet_id) - if not self.user.super: + if not user.super: raise UserError( - "You must be super-coop or admin to validate the sheet." + "Only super-cooperators and administrators can validate attendance sheets." ) - sheet.validated_by = self.user + # Following methods call not working + sheet.validated_by = user sheet.validate() - return + def on_barcode_scanned(self, barcode): + card = self.env["member.card"].search( + [("barcode", "=", barcode)] + ) + if not len(card): + raise UserError("Please set a correct barcode.") + self.validate_sheet(card[0].partner_id) diff --git a/beesdoo_shift/wizard/validate_attendance_sheet.xml b/beesdoo_shift/wizard/validate_attendance_sheet.xml index f443f06..dd460ff 100644 --- a/beesdoo_shift/wizard/validate_attendance_sheet.xml +++ b/beesdoo_shift/wizard/validate_attendance_sheet.xml @@ -6,9 +6,10 @@