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 Counter4
@@ -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:
+
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"
+"
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"
+"
Super Coop:
From 2b7cea885224007973b94e1248e36821079c4d03 Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Mon, 6 Jan 2020 10:13:29 +0100
Subject: [PATCH 099/208] [ADD] b_shift : optional validation by card scan
---
beesdoo_shift/data/system_parameter.xml | 4 +++
beesdoo_shift/models/res_config.py | 23 +++++++++++++--
beesdoo_shift/views/res_config_view.xml | 1 +
.../wizard/validate_attendance_sheet.py | 29 +++++++++++++++----
.../wizard/validate_attendance_sheet.xml | 11 ++++++-
5 files changed, 60 insertions(+), 8 deletions(-)
diff --git a/beesdoo_shift/data/system_parameter.xml b/beesdoo_shift/data/system_parameter.xml
index 1b7fede..0a4a676 100644
--- a/beesdoo_shift/data/system_parameter.xml
+++ b/beesdoo_shift/data/system_parameter.xml
@@ -31,6 +31,10 @@
regular_counter_to_unsubscribe-4
+
+ beesdoo_shift.card_support
+ False
+ beesdoo_shift.attendance_sheet_generation_interval15
diff --git a/beesdoo_shift/models/res_config.py b/beesdoo_shift/models/res_config.py
index 1f82528..aed6d87 100644
--- a/beesdoo_shift/models/res_config.py
+++ b/beesdoo_shift/models/res_config.py
@@ -10,21 +10,29 @@ class ShiftConfigSettings(models.TransientModel):
_name = "beesdoo.shift.config.settings"
_inherit = "res.config.settings"
+ card_support = fields.Boolean(
+ string="Scan cooperators cards instead of login for sheets validation",
+ default=False
+ )
default_task_type_id = fields.Many2one(
"beesdoo.shift.type",
string="Default Task Type",
- help="Default task type for attendance sheet pre-filling.",
+ help="Default task type for attendance sheet pre-filling",
+ required=True,
)
attendance_sheet_generation_interval = fields.Integer(
string="Time interval for attendance sheet generation",
help="Time interval expressed in minutes",
+ required=True,
)
@api.multi
def set_params(self):
self.ensure_one()
-
parameters = self.env["ir.config_parameter"]
+ parameters.set_param(
+ "beesdoo_shift.card_support", str(self.card_support),
+ )
parameters.set_param(
"beesdoo_shift.default_task_type_id",
str(self.default_task_type_id.id),
@@ -34,6 +42,17 @@ class ShiftConfigSettings(models.TransientModel):
str(self.attendance_sheet_generation_interval),
)
+ @api.multi
+ def get_default_card_support(self):
+ return {
+ "card_support": (
+ self.env["ir.config_parameter"].get_param(
+ "beesdoo_shift.card_support"
+ )
+ == "True"
+ )
+ }
+
@api.multi
def get_default_task_type_id(self):
return {
diff --git a/beesdoo_shift/views/res_config_view.xml b/beesdoo_shift/views/res_config_view.xml
index ef30fc3..73d6e7a 100644
--- a/beesdoo_shift/views/res_config_view.xml
+++ b/beesdoo_shift/views/res_config_view.xml
@@ -40,6 +40,7 @@
+
diff --git a/beesdoo_shift/wizard/validate_attendance_sheet.py b/beesdoo_shift/wizard/validate_attendance_sheet.py
index e16a86c..b7aefea 100644
--- a/beesdoo_shift/wizard/validate_attendance_sheet.py
+++ b/beesdoo_shift/wizard/validate_attendance_sheet.py
@@ -9,6 +9,11 @@ class ValidateAttendanceSheet(models.TransientModel):
Useless for users in group_cooperative_admin"""
_inherit = ["barcodes.barcode_events_mixin"]
+ def _get_card_support_setting(self):
+ return self.env["ir.config_parameter"].get_param(
+ "beesdoo_shift.card_support"
+ ) == "True"
+
@api.multi
def _default_annotation(self):
"""
@@ -35,7 +40,10 @@ class ValidateAttendanceSheet(models.TransientModel):
)
return warning_message
- barcode = fields.Char(string="Barcode", required=True)
+ card_support = fields.Boolean(default=_get_card_support_setting)
+ user_id = fields.Many2one("res.users", string="Login")
+ password = fields.Char(string="Password")
+ barcode = fields.Char(string="Barcode")
annotation = fields.Text(
"Important information requiring permanent member assistance",
default=_default_annotation,
@@ -59,13 +67,24 @@ 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)
- card = self.env["member.card"].search([("barcode", "=", self.barcode)])
- if not len(card):
- raise UserError(_("Please set a correct barcode."))
- partner = card[0].partner_id
+
+ if self.card_support:
+ # Login with barcode
+ card = self.env["member.card"].search([("barcode", "=", self.barcode)])
+ if not len(card):
+ raise UserError(_("Please set a correct barcode."))
+ partner = card[0].partner_id
+ else:
+ # Login with credentials
+ if not self.user_id:
+ raise UserError(_("Please enter an user name."))
+ self.user_id.sudo(self.user_id.id).check_credentials(self.password)
+ partner = self.user_id.partner_id
+
is_admin = partner.user_ids.has_group(
"beesdoo_shift.group_cooperative_admin"
)
+
if not partner.super and not is_admin:
raise UserError(
_(
diff --git a/beesdoo_shift/wizard/validate_attendance_sheet.xml b/beesdoo_shift/wizard/validate_attendance_sheet.xml
index 3256124..1d8a1c0 100644
--- a/beesdoo_shift/wizard/validate_attendance_sheet.xml
+++ b/beesdoo_shift/wizard/validate_attendance_sheet.xml
@@ -17,7 +17,16 @@
-
+
+
+
+
+
+
From 1c2a0d269fb6df3aaa449c894978e6a74685544f Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Tue, 7 Jan 2020 12:22:21 +0100
Subject: [PATCH 100/208] [ADD] b_shift : constrains on future attendance
sheets validation
---
beesdoo_shift/models/attendance_sheet.py | 6 ++++++
beesdoo_shift/wizard/validate_attendance_sheet.py | 11 ++++++++---
2 files changed, 14 insertions(+), 3 deletions(-)
diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py
index 6b4a837..9d78cd8 100644
--- a/beesdoo_shift/models/attendance_sheet.py
+++ b/beesdoo_shift/models/attendance_sheet.py
@@ -477,8 +477,14 @@ class AttendanceSheet(models.Model):
@api.multi
def validate_with_checks(self):
self.ensure_one()
+ start_time_dt = fields.Datetime.from_string(self.start_time)
+
if self.state == "validated":
raise UserError("The sheet has already been validated.")
+ if start_time_dt > datetime.now():
+ raise UserError(
+ _("You must wait for the shifts to begin to validate sheet.")
+ )
# Fields validation
for added_shift in self.added_shift_ids:
diff --git a/beesdoo_shift/wizard/validate_attendance_sheet.py b/beesdoo_shift/wizard/validate_attendance_sheet.py
index b7aefea..b28e6ed 100644
--- a/beesdoo_shift/wizard/validate_attendance_sheet.py
+++ b/beesdoo_shift/wizard/validate_attendance_sheet.py
@@ -10,9 +10,12 @@ class ValidateAttendanceSheet(models.TransientModel):
_inherit = ["barcodes.barcode_events_mixin"]
def _get_card_support_setting(self):
- return self.env["ir.config_parameter"].get_param(
+ return (
+ self.env["ir.config_parameter"].get_param(
"beesdoo_shift.card_support"
- ) == "True"
+ )
+ == "True"
+ )
@api.multi
def _default_annotation(self):
@@ -70,7 +73,9 @@ class ValidateAttendanceSheet(models.TransientModel):
if self.card_support:
# Login with barcode
- card = self.env["member.card"].search([("barcode", "=", self.barcode)])
+ card = self.env["member.card"].search(
+ [("barcode", "=", self.barcode)]
+ )
if not len(card):
raise UserError(_("Please set a correct barcode."))
partner = card[0].partner_id
From 4f64797f87c444ca27a52a92bf59c29df81b3d66 Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Wed, 8 Jan 2020 12:11:44 +0100
Subject: [PATCH 101/208] [ADD] b_shift : day_abbreviation for attendance
sheets
---
beesdoo_shift/models/attendance_sheet.py | 36 +++++++++++++++++-----
beesdoo_shift/security/ir.model.access.csv | 3 +-
2 files changed, 30 insertions(+), 9 deletions(-)
diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py
index 9d78cd8..60215b4 100644
--- a/beesdoo_shift/models/attendance_sheet.py
+++ b/beesdoo_shift/models/attendance_sheet.py
@@ -98,6 +98,7 @@ class AttendanceSheetShiftExpected(models.Model):
if not self.compensation_no:
raise UserError(_("You must choose a compensation number."))
+
class AttendanceSheetShiftAdded(models.Model):
"""
Added shifts are necessarily 'Present'
@@ -146,6 +147,9 @@ class AttendanceSheet(models.Model):
)
end_time = fields.Datetime(string="End Time", required=True, readonly=True)
day = fields.Date(string="Day", compute="_compute_day", store=True)
+ day_abbrevation = fields.Char(
+ string="Day Abbrevation", compute="_compute_day_abbrevation"
+ )
week = fields.Char(
string="Week",
help="Computed from planning names",
@@ -227,19 +231,20 @@ class AttendanceSheet(models.Model):
+ end_time_dt.strftime("%H:%M")
)
- @api.depends("start_time", "end_time", "week")
+ @api.depends("start_time", "end_time", "week", "day_abbrevation")
def _compute_name(self):
for rec in self:
start_time_dt = fields.Datetime.from_string(rec.start_time)
start_time_dt = fields.Datetime.context_timestamp(
rec, start_time_dt
)
- name = "%s - " % (fields.Date.to_string(start_time_dt),)
+ name = "[%s] " % (fields.Date.to_string(start_time_dt),)
if rec.week:
- name += rec.week + "_"
- name += "%s_" % (start_time_dt.strftime("%a"),)
+ name += rec.week + " "
+ if rec.day_abbrevation:
+ name += rec.day_abbrevation + " "
if rec.time_slot:
- name += rec.time_slot
+ name += "(%s)" % rec.time_slot
rec.name = name
@api.depends("start_time")
@@ -247,14 +252,29 @@ class AttendanceSheet(models.Model):
for rec in self:
rec.day = fields.Date.from_string(rec.start_time)
+ @api.depends("expected_shift_ids")
+ def _compute_day_abbrevation(self):
+ """
+ Compute Day Abbrevation from Planning Name
+ of first expected shift with one.
+ """
+ for rec in self:
+ for shift in rec.expected_shift_ids:
+ if shift.task_id.task_template_id.day_nb_id.name:
+ rec.day_abbrevation = (
+ shift.task_id.task_template_id.day_nb_id.name
+ )
+
@api.depends("expected_shift_ids")
def _compute_week(self):
"""
- Compute Week Name from Planning Name of first expected shift
+ Compute Week Name from Planning Name
+ of first expected shift with one
"""
for rec in self:
- if rec.expected_shift_ids:
- rec.week = rec.expected_shift_ids[0].task_id.planning_id.name
+ for shift in rec.expected_shift_ids:
+ if shift.task_id.planning_id.name:
+ rec.week = shift.task_id.planning_id.name
@api.depends("annotation")
def _compute_is_annotated(self):
diff --git a/beesdoo_shift/security/ir.model.access.csv b/beesdoo_shift/security/ir.model.access.csv
index 8aaa2c6..e99c766 100644
--- a/beesdoo_shift/security/ir.model.access.csv
+++ b/beesdoo_shift/security/ir.model.access.csv
@@ -7,7 +7,7 @@ manage_beesdoo_shift_sheet_added,manage_beesdoo_shift_sheet_added,model_beesdoo_
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
+access_beesdoo_shift_daynumber,access_beesdoo_shift_daynumber,model_beesdoo_shift_daynumber,group_shift_attendance_sheet,1,0,0,0
read_beesdoo_shift_planning,read_beesdoo_shift_planning,model_beesdoo_shift_planning,,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
@@ -25,4 +25,5 @@ access_cooperative_status,access_cooperative_status,model_cooperative_status,,1,
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_type,access_beesdoo_shift_type,model_beesdoo_shift_daynumber,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 fed73cd7c8c2d9eb8f3426f18683b70618be3104 Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Wed, 8 Jan 2020 15:07:31 +0100
Subject: [PATCH 102/208] [FIX] b_shift : cron no_update='1'
---
beesdoo_shift/data/cron.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/beesdoo_shift/data/cron.xml b/beesdoo_shift/data/cron.xml
index e4eb28e..2e5dd72 100644
--- a/beesdoo_shift/data/cron.xml
+++ b/beesdoo_shift/data/cron.xml
@@ -1,5 +1,5 @@
-
+
Update Cooperatoor status base on the date24
From 23a3c0c21a5cd51fc74551e03e250a17126b5ea7 Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Wed, 8 Jan 2020 17:12:37 +0100
Subject: [PATCH 103/208] [FIX] b_shift : attendance sheet 'is_annotated'
---
beesdoo_shift/models/attendance_sheet.py | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py
index 60215b4..8239343 100644
--- a/beesdoo_shift/models/attendance_sheet.py
+++ b/beesdoo_shift/models/attendance_sheet.py
@@ -279,7 +279,9 @@ class AttendanceSheet(models.Model):
@api.depends("annotation")
def _compute_is_annotated(self):
for rec in self:
- rec.is_annotated = bool(rec.annotation.strip())
+ if rec.annotation:
+ return bool(rec.annotation.strip())
+ return False
@api.constrains("expected_shift_ids", "added_shift_ids")
def _constrain_unique_worker(self):
From 6d3c187e89396965180724426dcf91fd1f1b35af Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Wed, 8 Jan 2020 17:12:50 +0100
Subject: [PATCH 104/208] [IMP] b_shift : attendance sheet validation wizard
Temporary changes can be saved.
Warnings added and modified.
---
beesdoo_shift/models/attendance_sheet.py | 2 +-
beesdoo_shift/views/attendance_sheet.xml | 3 +
.../wizard/validate_attendance_sheet.py | 100 ++++++++++++------
.../wizard/validate_attendance_sheet.xml | 21 ++--
4 files changed, 84 insertions(+), 42 deletions(-)
diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py
index 8239343..9f3f108 100644
--- a/beesdoo_shift/models/attendance_sheet.py
+++ b/beesdoo_shift/models/attendance_sheet.py
@@ -545,7 +545,7 @@ class AttendanceSheet(models.Model):
% expected_shift.worker_id.name
)
- # open a validation wizard if not admin
+ # Open a validation wizard only if not admin
if self.env.user.has_group("beesdoo_shift.group_cooperative_admin"):
self._validate(self.env.user.partner_id)
return
diff --git a/beesdoo_shift/views/attendance_sheet.xml b/beesdoo_shift/views/attendance_sheet.xml
index 2900323..579b076 100644
--- a/beesdoo_shift/views/attendance_sheet.xml
+++ b/beesdoo_shift/views/attendance_sheet.xml
@@ -136,6 +136,9 @@
diff --git a/beesdoo_shift/wizard/validate_attendance_sheet.py b/beesdoo_shift/wizard/validate_attendance_sheet.py
index b28e6ed..24f2189 100644
--- a/beesdoo_shift/wizard/validate_attendance_sheet.py
+++ b/beesdoo_shift/wizard/validate_attendance_sheet.py
@@ -9,6 +9,14 @@ class ValidateAttendanceSheet(models.TransientModel):
Useless for users in group_cooperative_admin"""
_inherit = ["barcodes.barcode_events_mixin"]
+ @api.multi
+ def _get_active_sheet(self):
+ sheet_id = self._context.get("active_id")
+ sheet_model = self._context.get("active_model")
+
+ if sheet_id and sheet_model:
+ return self.env[sheet_model].browse(sheet_id)
+
def _get_card_support_setting(self):
return (
self.env["ir.config_parameter"].get_param(
@@ -18,40 +26,57 @@ class ValidateAttendanceSheet(models.TransientModel):
)
@api.multi
- def _default_annotation(self):
+ def _get_warning_regular_workers(self):
"""
- The annotation is pre-filled with a warning message
- if a regular worker is added and should have been expected.
+ A warning is shown if some regular workers were not expected
+ but should be doing their regular shifts. This warning is added
+ to sheet's annotation at validation.
"""
-
- sheet_id = self._context.get("active_id")
- sheet_model = self._context.get("active_model")
- sheet = self.env[sheet_model].browse(sheet_id)
+ sheet = self._get_active_sheet()
warning_message = ""
+ if sheet:
+ for added_shift in sheet.added_shift_ids:
+ is_regular_worker = added_shift.worker_id.working_mode == "regular"
+ is_compensation = added_shift.is_compensation
- for added_shift in sheet.added_shift_ids:
- is_regular_worker = added_shift.worker_id.working_mode == "regular"
- is_compensation = added_shift.is_compensation
-
- if is_regular_worker and not is_compensation:
- warning_message += (
- _(
- "Warning : %s attended its shift as a normal one but was not expected. "
- "Something may be wrong in his/her personnal informations.\n\n"
+ if is_regular_worker and not is_compensation:
+ warning_message += (
+ _(
+ "\n%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
)
- % added_shift.worker_id.name
- )
return warning_message
+ @api.multi
+ def _get_default_annotation(self):
+ if self._get_active_sheet():
+ return self._get_active_sheet().annotation
+
+ @api.multi
+ def _get_default_feedback(self):
+ if self._get_active_sheet():
+ return self._get_active_sheet().feedback
+
+ @api.multi
+ def _get_default_worker_nb_feedback(self):
+ if self._get_active_sheet():
+ return self._get_active_sheet().worker_nb_feedback
+
card_support = fields.Boolean(default=_get_card_support_setting)
- user_id = fields.Many2one("res.users", string="Login")
+ login = fields.Char(string="Login")
password = fields.Char(string="Password")
barcode = fields.Char(string="Barcode")
+ warning_regular_workers = fields.Text("Warning",
+ default=_get_warning_regular_workers,
+ help="Is any regular worker doing its regular shift as an added one ?"
+ )
annotation = fields.Text(
"Important information requiring permanent member assistance",
- default=_default_annotation,
+ default=_get_default_annotation,
)
- feedback = fields.Text("General feedback")
+ feedback = fields.Text("General feedback", default=_get_default_feedback)
worker_nb_feedback = fields.Selection(
[
("not_enough", "Not enough"),
@@ -59,17 +84,27 @@ class ValidateAttendanceSheet(models.TransientModel):
("too_many", "Too many"),
],
string="Number of workers",
+ default=_get_default_worker_nb_feedback,
required=True,
)
def on_barcode_scanned(self, barcode):
self.barcode = barcode
+ @api.multi
+ def save(self):
+ """
+ Save modifications onto attendance sheet.
+ """
+ sheet = self._get_active_sheet()
+
+ sheet.annotation = self.annotation
+ sheet.feedback = self.feedback
+ sheet.worker_nb_feedback = self.worker_nb_feedback
+
@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 = self._get_active_sheet()
if self.card_support:
# Login with barcode
@@ -81,10 +116,11 @@ class ValidateAttendanceSheet(models.TransientModel):
partner = card[0].partner_id
else:
# Login with credentials
- if not self.user_id:
- raise UserError(_("Please enter an user name."))
- self.user_id.sudo(self.user_id.id).check_credentials(self.password)
- partner = self.user_id.partner_id
+ if not self.login:
+ raise UserError(_("Please enter your login."))
+ user = self.env["res.users"].search([("login", "=", self.login)])
+ user.sudo(user.id).check_credentials(self.password)
+ partner = user.partner_id
is_admin = partner.user_ids.has_group(
"beesdoo_shift.group_cooperative_admin"
@@ -96,9 +132,7 @@ class ValidateAttendanceSheet(models.TransientModel):
"Only super-cooperators and administrators can validate attendance sheets."
)
)
- if self.annotation:
- sheet.annotation += self.annotation
- if sheet.feedback:
- sheet.feedback += self.feedback
- sheet.worker_nb_feedback = self.worker_nb_feedback
+
+ self.annotation += self.warning_regular_workers
+ self.save()
sheet._validate(partner or self.env.user.partner_id)
diff --git a/beesdoo_shift/wizard/validate_attendance_sheet.xml b/beesdoo_shift/wizard/validate_attendance_sheet.xml
index 1d8a1c0..9396da3 100644
--- a/beesdoo_shift/wizard/validate_attendance_sheet.xml
+++ b/beesdoo_shift/wizard/validate_attendance_sheet.xml
@@ -6,22 +6,23 @@
-
+
-
+
-
+
From 1a5fa7e4d8d749b95a5632853a174c221dff9a03 Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Thu, 9 Jan 2020 12:08:28 +0100
Subject: [PATCH 105/208] [FIX] b_shift : sheet generation cron overloading ram
---
beesdoo_shift/data/cron.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/beesdoo_shift/data/cron.xml b/beesdoo_shift/data/cron.xml
index 2e5dd72..686112b 100644
--- a/beesdoo_shift/data/cron.xml
+++ b/beesdoo_shift/data/cron.xml
@@ -25,7 +25,7 @@
Generate Attendance Sheets
- 1
+ 4minutes-1
From b50e266f8dedef179f1fccfaa17815442e47e46e Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Thu, 9 Jan 2020 14:31:43 +0100
Subject: [PATCH 106/208] [REF] b_shift : code cleaning
---
beesdoo_shift/models/attendance_sheet.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py
index 9f3f108..1ec19c8 100644
--- a/beesdoo_shift/models/attendance_sheet.py
+++ b/beesdoo_shift/models/attendance_sheet.py
@@ -502,7 +502,7 @@ class AttendanceSheet(models.Model):
start_time_dt = fields.Datetime.from_string(self.start_time)
if self.state == "validated":
- raise UserError("The sheet has already been validated.")
+ raise UserError(_("The sheet has already been validated."))
if start_time_dt > datetime.now():
raise UserError(
_("You must wait for the shifts to begin to validate sheet.")
From 002bc8ae0699882c0cabb6b090b0d18de18b9321 Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Thu, 9 Jan 2020 16:37:27 +0100
Subject: [PATCH 107/208] [ADD] b_shift : _order for attendance sheet shifts
---
beesdoo_shift/models/attendance_sheet.py | 2 ++
1 file changed, 2 insertions(+)
diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py
index 1ec19c8..52a8f54 100644
--- a/beesdoo_shift/models/attendance_sheet.py
+++ b/beesdoo_shift/models/attendance_sheet.py
@@ -11,6 +11,7 @@ from openerp.exceptions import UserError, ValidationError
class AttendanceSheetShift(models.AbstractModel):
_name = "beesdoo.shift.sheet.shift"
_description = "Copy of an actual shift into an attendance sheet"
+ _order = 'task_type_id, worker_name'
@api.model
def default_task_type_id(self):
@@ -45,6 +46,7 @@ class AttendanceSheetShift(models.AbstractModel):
],
required=True,
)
+ worker_name = fields.Char(related="worker_id.name", store=True)
task_type_id = fields.Many2one(
"beesdoo.shift.type", string="Task Type", default=default_task_type_id
)
From a942d153ff715a92cd7f02dc3037830fe119cf09 Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Thu, 9 Jan 2020 16:38:11 +0100
Subject: [PATCH 108/208] [REF] b_shift : code cleaning
---
beesdoo_shift/models/attendance_sheet.py | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py
index 52a8f54..c33558a 100644
--- a/beesdoo_shift/models/attendance_sheet.py
+++ b/beesdoo_shift/models/attendance_sheet.py
@@ -64,9 +64,10 @@ class AttendanceSheetShift(models.AbstractModel):
)
+
class AttendanceSheetShiftExpected(models.Model):
"""
- Irregulars can only have two compensations
+ Already existing shifts on sheet creation.
"""
_name = "beesdoo.shift.sheet.expected"
@@ -103,6 +104,7 @@ class AttendanceSheetShiftExpected(models.Model):
class AttendanceSheetShiftAdded(models.Model):
"""
+ Not already registered shifts.
Added shifts are necessarily 'Present'
"""
@@ -195,7 +197,7 @@ class AttendanceSheet(models.Model):
("enough", "Enough"),
("too_many", "Too many"),
],
- string="Number of workers",
+ string="Feedback on number of workers",
)
validated_by = fields.Many2one(
"res.partner",
From af4339545572874778cf9b64f2c1e0c64f785fa8 Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Thu, 9 Jan 2020 16:47:58 +0100
Subject: [PATCH 109/208] [ADD] b_shift : group_by on worker_no_feedback
---
beesdoo_shift/models/attendance_sheet.py | 9 +++++++++
beesdoo_shift/views/attendance_sheet.xml | 3 +++
2 files changed, 12 insertions(+)
diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py
index c33558a..9c1e1d5 100644
--- a/beesdoo_shift/models/attendance_sheet.py
+++ b/beesdoo_shift/models/attendance_sheet.py
@@ -88,6 +88,11 @@ class AttendanceSheetShiftExpected(models.Model):
],
)
+ @api.onchange("replacement_worker_id")
+ def on_change_replacement_worker(self):
+ if self.replacement_worker_id:
+ self.state = "done"
+
@api.onchange("state")
def on_change_state(self):
if not self.state or self.state == "done":
@@ -551,6 +556,10 @@ class AttendanceSheet(models.Model):
# Open a validation wizard only if not admin
if self.env.user.has_group("beesdoo_shift.group_cooperative_admin"):
+ if not self.worker_nb_feedback:
+ raise UserError(
+ _("Please give your feedback about the number of workers.")
+ )
self._validate(self.env.user.partner_id)
return
return {
diff --git a/beesdoo_shift/views/attendance_sheet.xml b/beesdoo_shift/views/attendance_sheet.xml
index 579b076..bf21c84 100644
--- a/beesdoo_shift/views/attendance_sheet.xml
+++ b/beesdoo_shift/views/attendance_sheet.xml
@@ -21,6 +21,9 @@
+
From eacb6397b555dbd24a7cf68595ce8036d9bce191 Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Fri, 10 Jan 2020 16:32:19 +0100
Subject: [PATCH 110/208] [FIX] b_shift : supercoop name not displayed on
sheets
---
beesdoo_shift/models/attendance_sheet.py | 11 ++++-------
1 file changed, 4 insertions(+), 7 deletions(-)
diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py
index 9c1e1d5..be17a68 100644
--- a/beesdoo_shift/models/attendance_sheet.py
+++ b/beesdoo_shift/models/attendance_sheet.py
@@ -11,7 +11,7 @@ from openerp.exceptions import UserError, ValidationError
class AttendanceSheetShift(models.AbstractModel):
_name = "beesdoo.shift.sheet.shift"
_description = "Copy of an actual shift into an attendance sheet"
- _order = 'task_type_id, worker_name'
+ _order = "task_type_id, worker_name"
@api.model
def default_task_type_id(self):
@@ -50,11 +50,6 @@ class AttendanceSheetShift(models.AbstractModel):
task_type_id = fields.Many2one(
"beesdoo.shift.type", string="Task Type", default=default_task_type_id
)
- super_coop_id = fields.Many2one(
- "res.users",
- string="Super Cooperative",
- domain=[("partner_id.super", "=", True)],
- )
working_mode = fields.Selection(
related="worker_id.working_mode", string="Working Mode"
)
@@ -64,7 +59,6 @@ class AttendanceSheetShift(models.AbstractModel):
)
-
class AttendanceSheetShiftExpected(models.Model):
"""
Already existing shifts on sheet creation.
@@ -74,6 +68,9 @@ class AttendanceSheetShiftExpected(models.Model):
_description = "Expected Shift"
_inherit = ["beesdoo.shift.sheet.shift"]
+ super_coop_id = fields.Many2one(
+ related="task_id.super_coop_id", store=True
+ )
compensation_no = fields.Selection(
[("0", "0"), ("1", "1"), ("2", "2"),], string="Compensations",
)
From daaa04b7f5f020bb966d9f25ed16da47d1a9fcf7 Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Mon, 13 Jan 2020 12:36:35 +0100
Subject: [PATCH 111/208] [UPD] b_shift : demos datas & unite tests
---
beesdoo_shift/demo/templates.xml | 4 +-
beesdoo_shift/demo/users.xml | 7 +-
beesdoo_shift/models/attendance_sheet.py | 2 +
beesdoo_shift/tests/test_attendance_sheet.py | 280 +++++++++++++------
4 files changed, 203 insertions(+), 90 deletions(-)
diff --git a/beesdoo_shift/demo/templates.xml b/beesdoo_shift/demo/templates.xml
index 74052c8..fb6143f 100644
--- a/beesdoo_shift/demo/templates.xml
+++ b/beesdoo_shift/demo/templates.xml
@@ -85,8 +85,8 @@
A_MAR_12:00-14:30
-
-
+
+ 1214.52.5
diff --git a/beesdoo_shift/demo/users.xml b/beesdoo_shift/demo/users.xml
index 92f17f0..f1c924e 100644
--- a/beesdoo_shift/demo/users.xml
+++ b/beesdoo_shift/demo/users.xml
@@ -5,7 +5,7 @@
-->
-
+
Generic Account
@@ -33,5 +33,10 @@
demo
+
+
+
+
+
diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py
index be17a68..c7b000c 100644
--- a/beesdoo_shift/models/attendance_sheet.py
+++ b/beesdoo_shift/models/attendance_sheet.py
@@ -1,5 +1,7 @@
# -*- coding: utf-8 -*-
+import unittest
+
from datetime import date, datetime, timedelta
from lxml import etree
diff --git a/beesdoo_shift/tests/test_attendance_sheet.py b/beesdoo_shift/tests/test_attendance_sheet.py
index c9b0fe6..9ef03be 100644
--- a/beesdoo_shift/tests/test_attendance_sheet.py
+++ b/beesdoo_shift/tests/test_attendance_sheet.py
@@ -2,7 +2,8 @@
# Copyright 2019 - Today Coop IT Easy SCRLfs ()
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
-from datetime import date, datetime, timedelta
+import time
+from datetime import datetime, timedelta
from openerp import exceptions, fields
from openerp.exceptions import UserError, ValidationError
@@ -33,6 +34,10 @@ class TestAttendanceSheet(TransactionCase):
"beesdoo_shift.beesdoo_shift_user_2_demo"
)
+ self.setting_wizard = self.env["beesdoo.shift.config.settings"].sudo(
+ self.user_admin
+ )
+
self.worker_regular_1 = self.env.ref(
"beesdoo_base.res_partner_cooperator_6_demo"
)
@@ -69,24 +74,33 @@ class TestAttendanceSheet(TransactionCase):
"beesdoo_shift.beesdoo_shift_task_template_2_demo"
)
+ # Set time in and out of generation interval parameter
+ self.start_in_1 = self.current_time + timedelta(seconds=2)
+ self.end_in_1 = self.current_time + timedelta(minutes=10)
+ self.start_in_2 = self.current_time + timedelta(minutes=9)
+ self.end_in_2 = self.current_time + timedelta(minutes=21)
+ self.start_out_1 = self.current_time - timedelta(minutes=50)
+ self.end_out_1 = self.current_time - timedelta(minutes=20)
+ self.start_out_2 = self.current_time + timedelta(minutes=40)
+ self.end_out_2 = self.current_time + timedelta(minutes=50)
+
self.shift_regular_regular_1 = self.shift_model.create(
{
"task_template_id": self.task_template_1.id,
"task_type_id": self.task_type_1.id,
"worker_id": self.worker_regular_1.id,
- "start_time": self.current_time + timedelta(minutes=5),
- "end_time": self.current_time + timedelta(minutes=10),
+ "start_time": self.start_in_1,
+ "end_time": self.end_in_1,
"is_regular": True,
"is_compensation": False,
}
)
self.shift_regular_regular_2 = self.shift_model.create(
{
- "task_template_id": self.task_template_2.id,
"task_type_id": self.task_type_2.id,
"worker_id": self.worker_regular_2.id,
- "start_time": self.current_time - timedelta(minutes=50),
- "end_time": self.current_time - timedelta(minutes=20),
+ "start_time": self.start_out_1,
+ "end_time": self.end_out_1,
"is_regular": True,
"is_compensation": False,
}
@@ -96,8 +110,8 @@ class TestAttendanceSheet(TransactionCase):
"task_template_id": self.task_template_1.id,
"task_type_id": self.task_type_3.id,
"worker_id": self.worker_regular_3.id,
- "start_time": self.current_time + timedelta(minutes=5),
- "end_time": self.current_time + timedelta(minutes=10),
+ "start_time": self.start_in_1,
+ "end_time": self.end_in_1,
"is_regular": True,
"is_compensation": False,
"replaced_id": self.worker_regular_2.id,
@@ -108,53 +122,52 @@ class TestAttendanceSheet(TransactionCase):
"task_template_id": self.task_template_2.id,
"task_type_id": self.task_type_1.id,
"worker_id": self.worker_regular_super_1.id,
- "start_time": self.current_time + timedelta(minutes=9),
- "end_time": self.current_time + timedelta(minutes=21),
+ "start_time": self.start_in_2,
+ "end_time": self.end_in_2,
"is_regular": False,
"is_compensation": True,
}
)
self.shift_irregular_1 = self.shift_model.create(
{
- "task_template_id": self.task_template_2.id,
+ "task_template_id": self.task_template_1.id,
"task_type_id": self.task_type_2.id,
"worker_id": self.worker_irregular_1.id,
- "start_time": self.current_time + timedelta(minutes=5),
- "end_time": self.current_time + timedelta(minutes=10),
+ "start_time": self.start_in_1,
+ "end_time": self.end_in_1,
}
)
self.shift_irregular_2 = self.shift_model.create(
{
- "task_template_id": self.task_template_1.id,
"task_type_id": self.task_type_3.id,
"worker_id": self.worker_irregular_2.id,
- "start_time": self.current_time + timedelta(minutes=40),
- "end_time": self.current_time + timedelta(minutes=50),
+ "start_time": self.start_out_2,
+ "end_time": self.end_out_2,
}
)
self.shift_empty_1 = self.shift_model.create(
{
- "task_template_id": self.task_template_2.id,
+ "task_template_id": self.task_template_1.id,
"task_type_id": self.task_type_1.id,
- "start_time": self.current_time + timedelta(minutes=5),
- "end_time": self.current_time + timedelta(minutes=10),
+ "start_time": self.start_in_1,
+ "end_time": self.end_in_1,
}
)
- def _search_sheets(self, start_time, end_time):
+ def search_sheets(self, start_time, end_time):
+ if (type(start_time) and type(end_time)) == datetime:
+ start_time = fields.Datetime.to_string(start_time)
+ end_time = fields.Datetime.to_string(end_time)
return self.attendance_sheet_model.search(
[("start_time", "=", start_time), ("end_time", "=", end_time)]
)
def test_default_task_type_setting(self):
"Test default task type setting"
- setting_wizard = self.env["beesdoo.shift.config.settings"].sudo(
- self.user_admin
- )
for task_type in (self.task_type_1, self.task_type_2):
- # setting default value
- setting_wizard_1 = setting_wizard.create(
+ # Setting default value
+ setting_wizard_1 = self.setting_wizard.create(
{"default_task_type_id": task_type.id}
)
setting_wizard_1.execute()
@@ -162,7 +175,7 @@ class TestAttendanceSheet(TransactionCase):
"beesdoo_shift.default_task_type_id"
)
self.assertEquals(int(param_id), task_type.id)
- # check propagation on attendance sheet shifts
+ # Check propagation on attendance sheet shifts
self.assertEquals(
self.attendance_sheet_shift_model.default_task_type_id(),
task_type,
@@ -171,36 +184,47 @@ class TestAttendanceSheet(TransactionCase):
def test_attendance_sheet_creation(self):
"Test creation of an attendance sheet with all its expected shifts"
- start_in_1 = self.shift_regular_regular_1.start_time
- end_in_1 = self.shift_regular_regular_1.end_time
- start_in_2 = self.shift_regular_compensation_1.start_time
- end_in_2 = self.shift_regular_compensation_1.end_time
- start_out_1 = self.shift_regular_regular_2.start_time
- end_out_1 = self.shift_regular_regular_2.end_time
- start_out_2 = self.shift_irregular_2.start_time
- end_out_2 = self.shift_irregular_2.end_time
+ # Set generation interval setting
+ setting_wizard_1 = self.setting_wizard.create(
+ {
+ "default_task_type_id": self.task_type_1.id,
+ "attendance_sheet_generation_interval": 15,
+ }
+ )
+ setting_wizard_1.execute()
- # test attendance sheets creation
+ # Test attendance sheets creation
self.attendance_sheet_model._generate_attendance_sheet()
- self.assertEquals(len(self._search_sheets(start_in_1, end_in_1)), 1)
- self.assertEquals(len(self._search_sheets(start_in_2, end_in_2)), 1)
- self.assertEquals(len(self._search_sheets(start_out_1, end_out_1)), 0)
- self.assertEquals(len(self._search_sheets(start_out_2, end_out_2)), 0)
+ self.assertEquals(
+ len(self.search_sheets(self.start_in_1, self.end_in_1)), 1
+ )
+ self.assertEquals(
+ len(self.search_sheets(self.start_in_2, self.end_in_2)), 1
+ )
+ self.assertEquals(
+ len(self.search_sheets(self.start_out_1, self.end_out_1)), 0
+ )
+ self.assertEquals(
+ len(self.search_sheets(self.start_out_2, self.end_out_2)), 0
+ )
+
+ # Test expected shifts creation
+ # Sheet 1 starts at current time + 2 secs, ends at current time + 10 min
+ # Sheet 2 starts at current time + 9 min, ends at current time + 21 min
- # test expected shifts creation
- sheet_1 = self._search_sheets(start_in_1, end_in_1)
- sheet_2 = self._search_sheets(start_in_2, end_in_2)
+ sheet_1 = self.search_sheets(self.start_in_1, self.end_in_1)
+ sheet_2 = self.search_sheets(self.start_in_2, self.end_in_2)
self.assertTrue(sheet_1.start_time)
self.assertTrue(sheet_1.end_time)
- # empty shift should not be added
+ # Empty shift should not be added
self.assertEquals(len(sheet_1.expected_shift_ids), 3)
self.assertEquals(len(sheet_1.added_shift_ids), 0)
self.assertEquals(len(sheet_2.expected_shift_ids), 1)
- # test consistency with actual shift
+ # Test consistency with actual shift for sheet 1
for shift in sheet_1.expected_shift_ids:
self.assertEquals(shift.worker_id, shift.task_id.worker_id)
self.assertEquals(
@@ -210,73 +234,73 @@ class TestAttendanceSheet(TransactionCase):
self.assertEquals(shift.super_coop_id, shift.task_id.super_coop_id)
self.assertEquals(shift.working_mode, shift.task_id.working_mode)
- if shift.working_mode == "regular":
- self.assertEquals(shift.state, "absent_2")
- if shift.working_mode == "irregular":
- self.assertEquals(shift.state, "absent_1")
+ # Status should be "absent" for all shifts
+ self.assertEquals(shift.state, "absent")
+ self.assertEquals(shift.compensation_no, "2")
- # test maximum number of workers calculation from task_templates
- self.assertEquals(sheet_1.max_worker_no, 21)
+ # Empty shift should be considered in max worker number calculation
+ self.assertEquals(sheet_1.max_worker_no, 4)
- # test default values creation
+ # Test default values creation
self.assertTrue(sheet_1.time_slot)
+ self.assertEquals(sheet_1.day, fields.Date.to_string(self.start_in_1))
+ self.assertEquals(sheet_1.day_abbrevation, "Lundi")
+ self.assertEquals(sheet_1.week, "Semaine A")
self.assertTrue(sheet_1.name)
- day = fields.Datetime.from_string(sheet_1.start_time)
- self.assertEquals(sheet_1.day, fields.Date.to_string(day))
self.assertFalse(sheet_1.annotation)
self.assertFalse(sheet_1.is_annotated)
- # test default super-cooperator setting
- self.assertTrue(self.shift_expected_model.default_task_type_id())
-
- def test_attendance_sheet_barcode_scanner(self):
- "Test edition of an attendance sheet with barcode scanner"
+ def test_attendance_sheet_barcode_scan(self):
+ """
+ Edition of an attendance sheet
+ with barcode scanner, as a generic user"
+ """
- # attendance sheet generation
- self.attendance_sheet_model.sudo(self.user_generic)._generate_attendance_sheet()
- sheet_1 = self._search_sheets(
- self.shift_regular_regular_1.start_time,
- self.shift_regular_regular_1.end_time,
- )
+ # Attendance sheet generation
+ self.attendance_sheet_model.sudo(
+ self.user_generic
+ )._generate_attendance_sheet()
+ sheet_1 = self.search_sheets(self.start_in_1, self.end_in_1,)
"""
- Expected workers :
+ Expected workers are :
worker_regular_1 (barcode : 421457731745)
worker_regular_3 replaced by worker_regular_2 (barcode : 421457731744))
worker_irregular_1 (barcode : 429919251493)
"""
- # scan barcode for expected workers
+ # Scan barcode for expected workers
for barcode in [421457731745, 421457731744, 429919251493]:
sheet_1.on_barcode_scanned(barcode)
- # check expected shifts update
+ # Check expected shifts update
for id in sheet_1.expected_shift_ids.ids:
shift = sheet_1.expected_shift_ids.browse(id)
- self.assertEquals(shift.state, "present")
+ self.assertEquals(shift.state, "done")
"""
- Added workers :
+ Added workers are :
worker_regular_super_1 (barcode : 421457731741)
worker_irregular_2 (barcode : 421457731743)
"""
- # _onchange method not applying on temporary object in tests
+ # Workararound for _onchange method
+ # (not applying on temporary object in tests)
sheet_1._origin = sheet_1
- # scan barcode for added workers
+ # Scan barcode for added workers
sheet_1.on_barcode_scanned(421457731741)
self.assertEquals(len(sheet_1.added_shift_ids), 1)
sheet_1.on_barcode_scanned(421457731743)
- # scan an already added worker should not change anything
+ # Scan an already added worker should not change anything
sheet_1.on_barcode_scanned(421457731743)
self.assertEquals(len(sheet_1.added_shift_ids), 2)
- # check added shifts fields
+ # Check added shifts fields
for id in sheet_1.added_shift_ids.ids:
shift = sheet_1.added_shift_ids.browse(id)
self.assertEquals(sheet_1, shift.attendance_sheet_id)
- self.assertEquals(shift.state, "present")
+ self.assertEquals(shift.state, "done")
self.assertEquals(
shift.task_type_id,
self.attendance_sheet_shift_model.default_task_type_id(),
@@ -286,21 +310,103 @@ class TestAttendanceSheet(TransactionCase):
else:
self.assertFalse(shift.is_compensation)
- # add a worker that should be replaced
+ # Add a worker that should be replaced
with self.assertRaises(UserError) as e:
sheet_1.on_barcode_scanned(421457731742)
- # wrong barcode
+ # Wrong barcode
with self.assertRaises(UserError) as e:
sheet_1.on_barcode_scanned(101010)
- # add an already expected worker
- with self.assertRaises(ValidationError) as e:
- sheet_1.added_shift_ids |= sheet_1.added_shift_ids.new(
- {
- "task_type_id": sheet_1.added_shift_ids.default_task_type_id(),
- "state": "present",
- "attendance_sheet_id": sheet_1.id,
- "worker_id": self.worker_regular_1.id,
- "regular_task_type": "normal",
- }
- )
+ # Add an unsubscribed worker
+ self.worker_regular_1.cooperative_status_ids.sr = -2
+ self.worker_regular_1.cooperative_status_ids.sc = -2
+ with self.assertRaises(UserError) as e:
+ sheet_1.on_barcode_scanned(421457731745)
+
+ def test_attendance_sheet_edition(self):
+
+ # Attendance sheet generation
+ self.attendance_sheet_model.sudo(
+ self.user_generic
+ )._generate_attendance_sheet()
+ sheet_1 = self.search_sheets(self.start_in_1, self.end_in_1)
+
+ # Expected shifts edition
+ sheet_1.expected_shift_ids[1].state = "done"
+ sheet_1.expected_shift_ids[1].compensation_no = False
+ sheet_1.expected_shift_ids[2].compensation_no = "1"
+
+ # Added shits addition
+ sheet_1.added_shift_ids |= sheet_1.added_shift_ids.new(
+ {
+ "task_type_id": self.task_type_2.id,
+ "state": "done",
+ "attendance_sheet_id": sheet_1.id,
+ "worker_id": self.worker_regular_super_1.id,
+ "is_compensation": False,
+ }
+ )
+ # Same task type as empty shift (should edit it on validation)
+ sheet_1.added_shift_ids |= sheet_1.added_shift_ids.new(
+ {
+ "task_type_id": self.task_type_1.id,
+ "state": "done",
+ "attendance_sheet_id": sheet_1.id,
+ "worker_id": self.worker_irregular_2.id,
+ "is_compensation": True,
+ }
+ )
+
+ # Wait necessary time for shifts to begin
+ waiting_time = (self.start_in_1 - datetime.now()).total_seconds()
+ if waiting_time > 0:
+ with self.assertRaises(UserError) as e:
+ sheet_1.validate_with_checks()
+ self.assertIn("wait", str(e.exception))
+ time.sleep(waiting_time)
+
+ # TODO: test validation with wizard (as generic user)
+ # class odoo.tests.common.Form(recordp, view=None)
+ # is only available from version 12
+
+ # sheet_1 = sheet_1.sudo(self.user_generic)
+
+ # Validation without wizard (as admin user)
+ sheet_1 = sheet_1.sudo(self.user_admin)
+ sheet_1.worker_nb_feedback = "enough"
+ sheet_1.feedback = "Great session."
+ sheet_1.notes = "Important information."
+
+ sheet_1.validate_with_checks()
+
+ with self.assertRaises(UserError) as e:
+ sheet_1.validate_with_checks()
+ self.assertIn("already been validated", str(e.exception))
+
+ self.assertEquals(sheet_1.state, "validated")
+ self.assertEquals(sheet_1.validated_by, self.user_admin.partner_id)
+ self.assertTrue(sheet_1.is_annotated)
+ self.assertFalse(sheet_1.is_read)
+
+ # Check actual shifts update
+ workers = sheet_1.expected_shift_ids.mapped(
+ "worker_id"
+ ) | sheet_1.added_shift_ids.mapped("worker_id")
+ self.assertEquals(len(workers), 5)
+ self.assertEquals(
+ sheet_1.expected_shift_ids[0].task_id.state, "absent_2"
+ )
+ self.assertEquals(sheet_1.expected_shift_ids[1].task_id.state, "done")
+ self.assertEquals(
+ sheet_1.expected_shift_ids[2].task_id.state, "absent_1"
+ )
+ self.assertEquals(sheet_1.added_shift_ids[0].task_id.state, "done")
+ self.assertEquals(sheet_1.added_shift_ids[1].task_id.state, "done")
+
+ # Empty shift should have been updated
+ self.assertEquals(
+ sheet_1.added_shift_ids[0].task_id, self.shift_empty_1
+ )
+
+ # sheet_1.expected_shift_ids[0].worker_id
+ # sheet_1.expected_shift_ids[2].replacement_worker_id
From caf6ef6096e443d26a21a9c55a711fa5d791f9a2 Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Mon, 13 Jan 2020 14:40:32 +0100
Subject: [PATCH 112/208] [CHG] b_shift : attendance sheets terminology
---
beesdoo_shift/data/mail_template.xml | 5 +-
beesdoo_shift/models/attendance_sheet.py | 47 ++++++++++++-------
beesdoo_shift/tests/test_attendance_sheet.py | 2 +-
beesdoo_shift/views/attendance_sheet.xml | 16 ++++---
.../wizard/validate_attendance_sheet.py | 20 ++++----
.../wizard/validate_attendance_sheet.xml | 2 +-
6 files changed, 54 insertions(+), 38 deletions(-)
diff --git a/beesdoo_shift/data/mail_template.xml b/beesdoo_shift/data/mail_template.xml
index 09fb296..aa8d7cc 100644
--- a/beesdoo_shift/data/mail_template.xml
+++ b/beesdoo_shift/data/mail_template.xml
@@ -38,10 +38,11 @@
% endif
Your status have been updated to "${object.worker_id.state}".
-
If you have any question regarding this non-attendance, feel free to contact us.
+
If you have any question regarding this non-attendance, just answer this e-mail.
-
Sustainably yours,
+
Cooperatively yours,
+ The Members' office volunteers
${object.worker_id.company_id.name}.
% if object.worker_id.company_id.street:
diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py
index c7b000c..bad8a1c 100644
--- a/beesdoo_shift/models/attendance_sheet.py
+++ b/beesdoo_shift/models/attendance_sheet.py
@@ -181,27 +181,27 @@ class AttendanceSheet(models.Model):
readonly=True,
help="Indicative maximum number of workers.",
)
- annotation = fields.Text("Annotation", default="")
+ notes = fields.Text("Notes", default="")
is_annotated = fields.Boolean(
compute="_compute_is_annotated",
- string="Annotation",
+ string="Is annotated",
readonly=True,
store=True,
)
is_read = fields.Boolean(
string="Mark as read",
- help="Has annotation been read by an administrator ?",
+ help="Has notes been read by an administrator ?",
default=False,
track_visibility="onchange",
)
- feedback = fields.Text("Feedback")
+ feedback = fields.Text("Comments about the shift")
worker_nb_feedback = fields.Selection(
[
- ("not_enough", "Not enough"),
- ("enough", "Enough"),
- ("too_many", "Too many"),
+ ("not_enough", "Not enough workers"),
+ ("enough", "Enough workers"),
+ ("too_many", "Too many workers"),
],
- string="Feedback on number of workers",
+ string="Was your team big enough ?",
)
validated_by = fields.Many2one(
"res.partner",
@@ -218,7 +218,7 @@ class AttendanceSheet(models.Model):
_sql_constraints = [
(
- "check_no_annotation_mark_read",
+ "check_not_annotated_mark_as_read",
"CHECK ((is_annotated=FALSE AND is_read=FALSE) OR is_annotated=TRUE)",
_("Non-annotated sheets can't be marked as read."),
)
@@ -284,11 +284,11 @@ class AttendanceSheet(models.Model):
if shift.task_id.planning_id.name:
rec.week = shift.task_id.planning_id.name
- @api.depends("annotation")
+ @api.depends("notes")
def _compute_is_annotated(self):
for rec in self:
- if rec.annotation:
- return bool(rec.annotation.strip())
+ if rec.notes:
+ return bool(rec.notes.strip())
return False
@api.constrains("expected_shift_ids", "added_shift_ids")
@@ -312,7 +312,7 @@ class AttendanceSheet(models.Model):
@api.constrains(
"expected_shift_ids",
"added_shift_ids",
- "annotation",
+ "notes",
"feedback",
"worker_nb_feedback",
)
@@ -336,14 +336,26 @@ class AttendanceSheet(models.Model):
_("Multiple workers are corresponding this barcode.")
)
- if worker.state in ("unsubscribed", "resigning"):
- raise UserError(_("Worker is %s.") % worker.state)
+ if worker.state == "unsubscribed":
+ shift_counter = worker.cooperative_status_ids.sc + worker.cooperative_status_ids.sr
+ raise UserError(_(
+ "Beware, your account is frozen because your shift counter "
+ "is at %s. Please contact Members Office to unfreeze it. "
+ "If you want to attend this shift, your supercoop "
+ "can write your name in the notes field during validation."
+ ) % shift_counter)
+ if worker.state == "resigning":
+ raise UserError(_(
+ "Beware, you are recorded as resigning. "
+ "Please contact member's office if this is incorrect. Thank you."
+ ))
if worker.working_mode not in ("regular", "irregular"):
raise UserError(
- _("Worker is %s and should be regular or irregular.")
- % worker.working_mode
+ _("%s is %s and should be regular or irregular.")
+ % worker.name, worker.working_mode
)
+ # expected shifts status update
for id in self.expected_shift_ids.ids:
shift = self.env["beesdoo.shift.sheet.expected"].browse(id)
if (
@@ -363,6 +375,7 @@ class AttendanceSheet(models.Model):
if worker.id in added_ids:
return
+ # added shift creation
self.added_shift_ids |= self.added_shift_ids.new(
{
"task_type_id": self.added_shift_ids.default_task_type_id(),
diff --git a/beesdoo_shift/tests/test_attendance_sheet.py b/beesdoo_shift/tests/test_attendance_sheet.py
index 9ef03be..ecd8c75 100644
--- a/beesdoo_shift/tests/test_attendance_sheet.py
+++ b/beesdoo_shift/tests/test_attendance_sheet.py
@@ -247,7 +247,7 @@ class TestAttendanceSheet(TransactionCase):
self.assertEquals(sheet_1.day_abbrevation, "Lundi")
self.assertEquals(sheet_1.week, "Semaine A")
self.assertTrue(sheet_1.name)
- self.assertFalse(sheet_1.annotation)
+ self.assertFalse(sheet_1.notes)
self.assertFalse(sheet_1.is_annotated)
def test_attendance_sheet_barcode_scan(self):
diff --git a/beesdoo_shift/views/attendance_sheet.xml b/beesdoo_shift/views/attendance_sheet.xml
index bf21c84..becea88 100644
--- a/beesdoo_shift/views/attendance_sheet.xml
+++ b/beesdoo_shift/views/attendance_sheet.xml
@@ -140,8 +140,9 @@
name="validate_with_checks"
string="Validate Sheet"
confirm="Beware : a validated sheet cannot be edited anymore
- and you won't be able to add any latecomers.
- Emails will be sent to workers who did not attend their shift."
+ and you won't be able to add any latecomers.
+ The counters of those who didn't attend will be updated
+ and they will get warning emails."
attrs="{'invisible': [('state', '=', 'validated')]}"
/>
@@ -170,8 +171,9 @@
-
@@ -180,7 +182,7 @@
-
+
@@ -211,7 +213,7 @@
/>
-
+
From 4267eb8a4233c08c2e3eb218dfca745fabcf36cc Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Tue, 14 Jan 2020 17:13:38 +0100
Subject: [PATCH 113/208] [FIX] b_shift : search on datetime with '='
---
beesdoo_shift/models/attendance_sheet.py | 27 ++++++++++++++++++------
1 file changed, 20 insertions(+), 7 deletions(-)
diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py
index bad8a1c..7bf199d 100644
--- a/beesdoo_shift/models/attendance_sheet.py
+++ b/beesdoo_shift/models/attendance_sheet.py
@@ -396,14 +396,17 @@ class AttendanceSheet(models.Model):
expected_shift = self.env["beesdoo.shift.sheet.expected"]
s_time = fields.Datetime.from_string(new_sheet.start_time)
e_time = fields.Datetime.from_string(new_sheet.end_time)
+ # Fix issues with equality check on datetime
+ # by searching on a small intervall instead
delta = timedelta(minutes=1)
+ to_string = fields.Datetime.to_string
tasks = tasks.search(
[
- ("start_time", ">", fields.Datetime.to_string(s_time - delta)),
- ("start_time", "<", fields.Datetime.to_string(s_time + delta)),
- ("end_time", ">", fields.Datetime.to_string(e_time - delta)),
- ("end_time", "<", fields.Datetime.to_string(e_time + delta)),
+ ("start_time", ">", to_string(s_time - delta)),
+ ("start_time", "<", to_string(s_time + delta)),
+ ("end_time", ">", to_string(e_time - delta)),
+ ("end_time", "<", to_string(e_time + delta)),
]
)
for task in tasks:
@@ -474,11 +477,21 @@ class AttendanceSheet(models.Model):
is_compensation = added_shift.is_compensation
# Edit a non-assigned shift or create one if none
- non_assigned_shifts = shift.search(
+
+ # Fix issues with equality check on datetime
+ # by searching on a small intervall instead
+ delta = timedelta(minutes=1)
+ s_time = fields.Datetime.from_string(self.start_time)
+ e_time = fields.Datetime.from_string(self.end_time)
+ to_string = fields.Datetime.to_string
+
+ non_assigned_shifts = self.env["beesdoo.shift.shift"].search(
[
("worker_id", "=", False),
- ("start_time", "=", self.start_time),
- ("end_time", "=", self.end_time),
+ ("start_time", ">", to_string(s_time - delta)),
+ ("start_time", "<", to_string(s_time + delta)),
+ ("end_time", ">", to_string(e_time - delta)),
+ ("end_time", "<", to_string(e_time + delta)),
("task_type_id", "=", added_shift.task_type_id.id),
],
limit=1,
From a0711138b441c2dbeb8b72dc523a3f475682068c Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Tue, 14 Jan 2020 17:26:37 +0100
Subject: [PATCH 114/208] [REF] b_shift : code cleaning
---
beesdoo_shift/models/attendance_sheet.py | 37 +++++++++++++++---------
beesdoo_shift/security/group.xml | 1 +
2 files changed, 24 insertions(+), 14 deletions(-)
diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py
index 7bf199d..de214dc 100644
--- a/beesdoo_shift/models/attendance_sheet.py
+++ b/beesdoo_shift/models/attendance_sheet.py
@@ -246,7 +246,7 @@ class AttendanceSheet(models.Model):
start_time_dt = fields.Datetime.context_timestamp(
rec, start_time_dt
)
- name = "[%s] " % (fields.Date.to_string(start_time_dt),)
+ name = "[%s] " % fields.Date.to_string(start_time_dt)
if rec.week:
name += rec.week + " "
if rec.day_abbrevation:
@@ -277,7 +277,7 @@ class AttendanceSheet(models.Model):
def _compute_week(self):
"""
Compute Week Name from Planning Name
- of first expected shift with one
+ of first expected shift with one.
"""
for rec in self:
for shift in rec.expected_shift_ids:
@@ -337,22 +337,31 @@ class AttendanceSheet(models.Model):
)
if worker.state == "unsubscribed":
- shift_counter = worker.cooperative_status_ids.sc + worker.cooperative_status_ids.sr
- raise UserError(_(
- "Beware, your account is frozen because your shift counter "
- "is at %s. Please contact Members Office to unfreeze it. "
- "If you want to attend this shift, your supercoop "
- "can write your name in the notes field during validation."
- ) % shift_counter)
+ shift_counter = (
+ worker.cooperative_status_ids.sc
+ + worker.cooperative_status_ids.sr
+ )
+ raise UserError(
+ _(
+ "Beware, your account is frozen because your shift counter "
+ "is at %s. Please contact Members Office to unfreeze it. "
+ "If you want to attend this shift, your supercoop "
+ "can write your name in the notes field during validation."
+ )
+ % shift_counter
+ )
if worker.state == "resigning":
- raise UserError(_(
- "Beware, you are recorded as resigning. "
- "Please contact member's office if this is incorrect. Thank you."
- ))
+ raise UserError(
+ _(
+ "Beware, you are recorded as resigning. "
+ "Please contact member's office if this is incorrect. Thank you."
+ )
+ )
if worker.working_mode not in ("regular", "irregular"):
raise UserError(
_("%s is %s and should be regular or irregular.")
- % worker.name, worker.working_mode
+ % worker.name,
+ worker.working_mode,
)
# expected shifts status update
diff --git a/beesdoo_shift/security/group.xml b/beesdoo_shift/security/group.xml
index 4aa566a..c951f45 100644
--- a/beesdoo_shift/security/group.xml
+++ b/beesdoo_shift/security/group.xml
@@ -26,6 +26,7 @@
/>
+
From c4c5294cc6f28c8a82a082b7265845ffc6e5beb7 Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Tue, 14 Jan 2020 17:27:00 +0100
Subject: [PATCH 115/208] [FIX] b_shift : attendance sheet
_compute_is_annotated
---
beesdoo_shift/models/attendance_sheet.py | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py
index de214dc..607cdba 100644
--- a/beesdoo_shift/models/attendance_sheet.py
+++ b/beesdoo_shift/models/attendance_sheet.py
@@ -288,8 +288,7 @@ class AttendanceSheet(models.Model):
def _compute_is_annotated(self):
for rec in self:
if rec.notes:
- return bool(rec.notes.strip())
- return False
+ rec.is_annotated = bool(rec.notes.strip())
@api.constrains("expected_shift_ids", "added_shift_ids")
def _constrain_unique_worker(self):
From e216614c38632795dcbd79481607ac2b99f5e6e5 Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Tue, 14 Jan 2020 18:10:48 +0100
Subject: [PATCH 116/208] [REF] b_shift : code cleaning
---
beesdoo_shift/models/attendance_sheet.py | 44 +++++++++----------
beesdoo_shift/models/res_config.py | 7 +--
beesdoo_shift/security/group.xml | 5 ---
.../wizard/validate_attendance_sheet.py | 19 +++++---
4 files changed, 37 insertions(+), 38 deletions(-)
diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py
index 607cdba..ab7eff4 100644
--- a/beesdoo_shift/models/attendance_sheet.py
+++ b/beesdoo_shift/models/attendance_sheet.py
@@ -18,10 +18,7 @@ class AttendanceSheetShift(models.AbstractModel):
@api.model
def default_task_type_id(self):
parameters = self.env["ir.config_parameter"]
- id = (
- int(parameters.get_param("beesdoo_shift.default_task_type_id"))
- or 1
- )
+ id = int(parameters.get_param("beesdoo_shift.default_task_type_id", default=1))
task_types = self.env["beesdoo.shift.type"]
return task_types.browse(id)
@@ -293,12 +290,13 @@ class AttendanceSheet(models.Model):
@api.constrains("expected_shift_ids", "added_shift_ids")
def _constrain_unique_worker(self):
# Warning : map return generator in python3 (for Odoo 12)
- 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)
+ added_ids = [s.worker_id.id for s in self.added_shift_ids]
+ expected_ids = [s.worker_id.id for s in self.expected_shift_ids]
+ replacement_ids = [
+ s.replacement_worker_id.id
+ for s in self.expected_shift_ids
+ if s.replacement_worker_id.id
+ ]
ids = added_ids + expected_ids + replacement_ids
if (len(ids) - len(set(ids))) > 0:
@@ -363,7 +361,7 @@ class AttendanceSheet(models.Model):
worker.working_mode,
)
- # expected shifts status update
+ # Expected shifts status update
for id in self.expected_shift_ids.ids:
shift = self.env["beesdoo.shift.sheet.expected"].browse(id)
if (
@@ -380,19 +378,17 @@ class AttendanceSheet(models.Model):
added_ids = map(lambda s: s.worker_id.id, self.added_shift_ids)
- if worker.id in added_ids:
- return
-
- # added shift creation
- self.added_shift_ids |= self.added_shift_ids.new(
- {
- "task_type_id": self.added_shift_ids.default_task_type_id(),
- "state": "done",
- "attendance_sheet_id": self._origin.id,
- "worker_id": worker.id,
- "is_compensation": is_compensation,
- }
- )
+ if worker.id not in added_ids:
+ # Added shift creation
+ self.added_shift_ids |= self.added_shift_ids.new(
+ {
+ "task_type_id": self.added_shift_ids.default_task_type_id(),
+ "state": "done",
+ "attendance_sheet_id": self._origin.id,
+ "worker_id": worker.id,
+ "is_compensation": is_compensation,
+ }
+ )
@api.model
def create(self, vals):
diff --git a/beesdoo_shift/models/res_config.py b/beesdoo_shift/models/res_config.py
index aed6d87..ba6e7bb 100644
--- a/beesdoo_shift/models/res_config.py
+++ b/beesdoo_shift/models/res_config.py
@@ -3,6 +3,8 @@
# Copyright 2019-2020 Elouan Le Bars
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+import ast
+
from openerp import fields, models, api
@@ -12,7 +14,7 @@ class ShiftConfigSettings(models.TransientModel):
card_support = fields.Boolean(
string="Scan cooperators cards instead of login for sheets validation",
- default=False
+ default=False,
)
default_task_type_id = fields.Many2one(
"beesdoo.shift.type",
@@ -45,11 +47,10 @@ class ShiftConfigSettings(models.TransientModel):
@api.multi
def get_default_card_support(self):
return {
- "card_support": (
+ "card_support": ast.literal_eval(
self.env["ir.config_parameter"].get_param(
"beesdoo_shift.card_support"
)
- == "True"
)
}
diff --git a/beesdoo_shift/security/group.xml b/beesdoo_shift/security/group.xml
index c951f45..6e1b37f 100644
--- a/beesdoo_shift/security/group.xml
+++ b/beesdoo_shift/security/group.xml
@@ -30,10 +30,5 @@
-
-
-
diff --git a/beesdoo_shift/wizard/validate_attendance_sheet.py b/beesdoo_shift/wizard/validate_attendance_sheet.py
index 246a542..3161b0c 100644
--- a/beesdoo_shift/wizard/validate_attendance_sheet.py
+++ b/beesdoo_shift/wizard/validate_attendance_sheet.py
@@ -1,4 +1,7 @@
# -*- coding: utf-8 -*-
+
+import ast
+
from openerp import _, api, exceptions, fields, models
from openerp.exceptions import UserError, ValidationError
@@ -18,11 +21,10 @@ class ValidateAttendanceSheet(models.TransientModel):
return self.env[sheet_model].browse(sheet_id)
def _get_card_support_setting(self):
- return (
+ return ast.literal_eval(
self.env["ir.config_parameter"].get_param(
"beesdoo_shift.card_support"
)
- == "True"
)
@api.multi
@@ -36,7 +38,9 @@ class ValidateAttendanceSheet(models.TransientModel):
warning_message = ""
if sheet:
for added_shift in sheet.added_shift_ids:
- is_regular_worker = added_shift.worker_id.working_mode == "regular"
+ is_regular_worker = (
+ added_shift.worker_id.working_mode == "regular"
+ )
is_compensation = added_shift.is_compensation
if is_regular_worker and not is_compensation:
@@ -68,15 +72,18 @@ class ValidateAttendanceSheet(models.TransientModel):
login = fields.Char(string="Login")
password = fields.Char(string="Password")
barcode = fields.Char(string="Barcode")
- warning_regular_workers = fields.Text("Warning",
+ warning_regular_workers = fields.Text(
+ "Warning",
default=_get_warning_regular_workers,
- help="Is any regular worker doing its regular shift as an added one ?"
+ help="Is any regular worker doing its regular shift as an added one ?",
)
notes = fields.Text(
"Notes about the attendance for Members Office",
default=_get_default_notes,
)
- feedback = fields.Text("Comments about the shift", default=_get_default_feedback)
+ feedback = fields.Text(
+ "Comments about the shift", default=_get_default_feedback
+ )
worker_nb_feedback = fields.Selection(
[
("not_enough", "Not enough"),
From d69a7af79e8b9be529f5a99dac1e14fb95004af1 Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Wed, 15 Jan 2020 16:26:50 +0100
Subject: [PATCH 117/208] [IMP] b_shift : attendance sheet validation wizard
---
.../wizard/validate_attendance_sheet.py | 46 ++++---------------
.../wizard/validate_attendance_sheet.xml | 5 +-
2 files changed, 12 insertions(+), 39 deletions(-)
diff --git a/beesdoo_shift/wizard/validate_attendance_sheet.py b/beesdoo_shift/wizard/validate_attendance_sheet.py
index 3161b0c..cc32a5f 100644
--- a/beesdoo_shift/wizard/validate_attendance_sheet.py
+++ b/beesdoo_shift/wizard/validate_attendance_sheet.py
@@ -34,7 +34,7 @@ class ValidateAttendanceSheet(models.TransientModel):
but should be doing their regular shifts. This warning is added
to sheet's notes at validation.
"""
- sheet = self._get_active_sheet()
+ sheet = self.active_sheet
warning_message = ""
if sheet:
for added_shift in sheet.added_shift_ids:
@@ -53,21 +53,9 @@ class ValidateAttendanceSheet(models.TransientModel):
)
return warning_message
- @api.multi
- def _get_default_notes(self):
- if self._get_active_sheet():
- return self._get_active_sheet().notes
-
- @api.multi
- def _get_default_feedback(self):
- if self._get_active_sheet():
- return self._get_active_sheet().feedback
-
- @api.multi
- def _get_default_worker_nb_feedback(self):
- if self._get_active_sheet():
- return self._get_active_sheet().worker_nb_feedback
-
+ active_sheet = fields.Many2one(
+ "beesdoo.shift.sheet", default=_get_active_sheet
+ )
card_support = fields.Boolean(default=_get_card_support_setting)
login = fields.Char(string="Login")
password = fields.Char(string="Password")
@@ -77,22 +65,10 @@ class ValidateAttendanceSheet(models.TransientModel):
default=_get_warning_regular_workers,
help="Is any regular worker doing its regular shift as an added one ?",
)
- notes = fields.Text(
- "Notes about the attendance for Members Office",
- default=_get_default_notes,
- )
- feedback = fields.Text(
- "Comments about the shift", default=_get_default_feedback
- )
+ notes = fields.Text(related="active_sheet.notes")
+ feedback = fields.Text(related="active_sheet.feedback")
worker_nb_feedback = fields.Selection(
- [
- ("not_enough", "Not enough"),
- ("enough", "Enough"),
- ("too_many", "Too many"),
- ],
- string="Was your team big enough?",
- default=_get_default_worker_nb_feedback,
- required=True,
+ related="active_sheet.worker_nb_feedback", required=True
)
def on_barcode_scanned(self, barcode):
@@ -100,18 +76,14 @@ class ValidateAttendanceSheet(models.TransientModel):
@api.multi
def save(self):
- """
- Save modifications onto attendance sheet.
- """
- sheet = self._get_active_sheet()
-
+ sheet = self.active_sheet
sheet.notes = self.notes
sheet.feedback = self.feedback
sheet.worker_nb_feedback = self.worker_nb_feedback
@api.multi
def validate_sheet(self):
- sheet = self._get_active_sheet()
+ sheet = self.active_sheet
if self.card_support:
# Login with barcode
diff --git a/beesdoo_shift/wizard/validate_attendance_sheet.xml b/beesdoo_shift/wizard/validate_attendance_sheet.xml
index 9a06498..d124e77 100644
--- a/beesdoo_shift/wizard/validate_attendance_sheet.xml
+++ b/beesdoo_shift/wizard/validate_attendance_sheet.xml
@@ -5,8 +5,10 @@
-
+
+
+
-
From 8a3e24a43a90a5704153fc0e00aa89c95dd7e8da Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Wed, 15 Jan 2020 18:26:26 +0100
Subject: [PATCH 118/208] [ADD] b_shift : tests for cooperative status
---
beesdoo_shift/tests/__init__.py | 2 +-
...endance_sheet.py => test_beesdoo_shift.py} | 92 ++++++++++++++++++-
2 files changed, 90 insertions(+), 4 deletions(-)
rename beesdoo_shift/tests/{test_attendance_sheet.py => test_beesdoo_shift.py} (82%)
diff --git a/beesdoo_shift/tests/__init__.py b/beesdoo_shift/tests/__init__.py
index bd12eed..0819997 100644
--- a/beesdoo_shift/tests/__init__.py
+++ b/beesdoo_shift/tests/__init__.py
@@ -1,2 +1,2 @@
# -*- coding: utf-8 -*-
-import test_attendance_sheet
+import test_beesdoo_shift
diff --git a/beesdoo_shift/tests/test_attendance_sheet.py b/beesdoo_shift/tests/test_beesdoo_shift.py
similarity index 82%
rename from beesdoo_shift/tests/test_attendance_sheet.py
rename to beesdoo_shift/tests/test_beesdoo_shift.py
index ecd8c75..2a08fce 100644
--- a/beesdoo_shift/tests/test_attendance_sheet.py
+++ b/beesdoo_shift/tests/test_beesdoo_shift.py
@@ -10,9 +10,9 @@ from openerp.exceptions import UserError, ValidationError
from openerp.tests.common import TransactionCase
-class TestAttendanceSheet(TransactionCase):
+class TestBeesdooShift(TransactionCase):
def setUp(self):
- super(TestAttendanceSheet, self).setUp()
+ super(TestBeesdooShift, self).setUp()
self.shift_model = self.env["beesdoo.shift.shift"]
self.shift_template_model = self.env["beesdoo.shift.template"]
self.attendance_sheet_model = self.env["beesdoo.shift.sheet"]
@@ -117,7 +117,7 @@ class TestAttendanceSheet(TransactionCase):
"replaced_id": self.worker_regular_2.id,
}
)
- self.shift_regular_compensation_1 = self.shift_model.create(
+ future_shift_regular = self.shift_model.create(
{
"task_template_id": self.task_template_2.id,
"task_type_id": self.task_type_1.id,
@@ -410,3 +410,89 @@ class TestAttendanceSheet(TransactionCase):
# sheet_1.expected_shift_ids[0].worker_id
# sheet_1.expected_shift_ids[2].replacement_worker_id
+
+ def test_shift_counters(self):
+ "Test shift counters calculation and cooperative status update"
+
+ status_1 = self.worker_regular_1.cooperative_status_ids
+ status_2 = self.worker_regular_3.cooperative_status_ids
+ status_3 = self.worker_irregular_1.cooperative_status_ids
+
+ shift_regular = self.shift_model.create(
+ {
+ "task_template_id": self.task_template_1.id,
+ "task_type_id": self.task_type_1.id,
+ "worker_id": self.worker_regular_1.id,
+ "start_time": datetime.now() - timedelta(minutes=50),
+ "end_time": datetime.now() - timedelta(minutes=40),
+ "is_regular": True,
+ "is_compensation": False,
+ }
+ )
+ future_shift_regular = self.shift_model.create(
+ {
+ "task_template_id": self.task_template_2.id,
+ "task_type_id": self.task_type_2.id,
+ "worker_id": self.worker_regular_1.id,
+ "start_time": datetime.now() + timedelta(minutes=20),
+ "end_time": datetime.now() + timedelta(minutes=30),
+ "is_regular": True,
+ "is_compensation": False,
+ }
+ )
+ shift_irregular = self.shift_model.create(
+ {
+ "task_template_id": self.task_template_2.id,
+ "task_type_id": self.task_type_3.id,
+ "worker_id": self.worker_irregular_1.id,
+ "start_time": datetime.now() - timedelta(minutes=15),
+ "end_time": datetime.now() - timedelta(minutes=10),
+ }
+ )
+
+ # For a regular worker
+ status_1.sr = 0
+ status_1.sc = 0
+ self.assertEquals(status_1.status, "ok")
+ shift_regular.state = "absent_1"
+ self.assertEquals(status_1.sr, -1)
+ self.assertEquals(status_1.status, "alert")
+ shift_regular.state = "done"
+ self.assertEquals(status_1.sr, 0)
+ self.assertEquals(status_1.sc, 0)
+
+ # Check unsubscribed status
+ status_1.sr = -1
+ status_1.sc = -1
+
+ # Subscribe him to another future shift
+ future_shift_regular.worker_id = self.worker_regular_1
+ shift_regular.state = "absent_2"
+ self.assertEquals(status_1.sr, -2)
+ self.assertEquals(status_1.sc, -2)
+ self.assertEquals(status_1.status, "unsubscribed")
+
+ # Should be unsubscribed from future shift
+ self.assertFalse(future_shift_regular.worker_id)
+
+ # With replacement worker (self.worker_regular_3)
+ shift_regular.state = "open"
+ status_1.sr = 0
+ status_1.sc = 0
+ status_2.sr = 0
+ status_2.sc = 0
+ shift_regular.replaced_id = self.worker_regular_3
+ shift_regular.state = "absent_2"
+ self.assertEquals(status_1.sr, 0)
+ self.assertEquals(status_1.sc, 0)
+ self.assertEquals(status_2.sr, -1)
+ self.assertEquals(status_2.sc, -1)
+
+ # For an irregular worker
+ status_3.sr = 0
+ status_3.sc = 0
+ self.assertEquals(status_3.status, "ok")
+ shift_irregular.state = "done"
+ self.assertEquals(status_3.sr, 1)
+ shift_irregular.state = "absent_2"
+ self.assertEquals(status_3.sr, -1)
From da8c38574a139fb4a7f3f9a7763cee82d270f1bd Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Thu, 9 Jan 2020 17:29:52 +0100
Subject: [PATCH 119/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_website_shift/controllers/main.py | 12 ++------
.../views/my_shift_website_templates.xml | 30 +++++++++----------
2 files changed, 18 insertions(+), 24 deletions(-)
diff --git a/beesdoo_website_shift/controllers/main.py b/beesdoo_website_shift/controllers/main.py
index 0bbb7ab..cdb502e 100644
--- a/beesdoo_website_shift/controllers/main.py
+++ b/beesdoo_website_shift/controllers/main.py
@@ -143,14 +143,12 @@ class WebsiteShiftController(http.Controller):
# Get config
irregular_enable_sign_up = literal_eval(request.env['ir.config_parameter'].get_param(
'beesdoo_website_shift.irregular_enable_sign_up'))
- # Get open status
- open_status = request.env.ref('beesdoo_shift.open')
request.session['success'] = False
if (irregular_enable_sign_up
and self.user_can_subscribe()
and shift
- and shift.stage_id == open_status
+ and shift.state == "open"
and not shift.worker_id):
shift.worker_id = cur_user.partner_id
request.session['success'] = True
@@ -280,11 +278,10 @@ class WebsiteShiftController(http.Controller):
# Get all the shifts in the future with no worker
now = datetime.now()
- open_status = request.env.ref('beesdoo_shift.open')
shifts = request.env['beesdoo.shift.shift'].sudo().search(
[('start_time', '>', now.strftime("%Y-%m-%d %H:%M:%S")),
('worker_id', '=', False),
- ('stage_id', '=', open_status.id)],
+ ('state', '=', 'open')],
order="start_time, task_template_id, task_type_id",
)
@@ -394,9 +391,6 @@ class WebsiteShiftController(http.Controller):
regular_next_shift_limit = int(request.env['ir.config_parameter'].get_param(
'beesdoo_website_shift.regular_next_shift_limit'))
- # Get default status for fictive shifts
- draft_status = request.env.ref('beesdoo_shift.draft')
-
for i in range(nb_subscribed_shifts, regular_next_shift_limit):
# Create the fictive shift
shift = main_shift.new()
@@ -405,7 +399,7 @@ class WebsiteShiftController(http.Controller):
shift.planning_id = main_shift.planning_id
shift.task_type_id = main_shift.task_type_id
shift.worker_id = main_shift.worker_id
- shift.stage_id = draft_status
+ shift.state = "draft"
shift.super_coop_id = main_shift.super_coop_id
shift.color = main_shift.color
shift.is_regular = main_shift.is_regular
diff --git a/beesdoo_website_shift/views/my_shift_website_templates.xml b/beesdoo_website_shift/views/my_shift_website_templates.xml
index 23da8ab..c73d475 100644
--- a/beesdoo_website_shift/views/my_shift_website_templates.xml
+++ b/beesdoo_website_shift/views/my_shift_website_templates.xml
@@ -101,34 +101,34 @@
id="shift_status_label"
name="Shift Status Label">
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+
@@ -207,7 +207,7 @@
-
+
@@ -222,7 +222,7 @@
-
+
-
+
From 6cf25a2f681d8fc3b394072f3da41901f34b50a5 Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Thu, 5 Dec 2019 13:54:06 +0100
Subject: [PATCH 120/208] [ADD] b_w_shift : prevent subscription 20 min before
start
---
beesdoo_website_shift/controllers/main.py | 7 ++++++-
beesdoo_website_shift/i18n/fr_BE.po | 2 +-
beesdoo_website_shift/views/my_shift_website_templates.xml | 4 +++-
3 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/beesdoo_website_shift/controllers/main.py b/beesdoo_website_shift/controllers/main.py
index cdb502e..a3f4e92 100644
--- a/beesdoo_website_shift/controllers/main.py
+++ b/beesdoo_website_shift/controllers/main.py
@@ -135,6 +135,7 @@ class WebsiteShiftController(http.Controller):
* the given shift exist
* the shift status is open
* the shift is free for subscription
+ * the shift is starting in more than 20 minutes
"""
# Get current user
cur_user = request.env['res.users'].browse(request.uid)
@@ -143,12 +144,16 @@ class WebsiteShiftController(http.Controller):
# Get config
irregular_enable_sign_up = literal_eval(request.env['ir.config_parameter'].get_param(
'beesdoo_website_shift.irregular_enable_sign_up'))
-
+ # Set start time limit
+ start_time_limit = datetime.now() + timedelta(minutes = 20)
+ shift_start_time = fields.Datetime.from_string(shift.start_time)
request.session['success'] = False
+
if (irregular_enable_sign_up
and self.user_can_subscribe()
and shift
and shift.state == "open"
+ and shift_start_time > start_time_limit
and not shift.worker_id):
shift.worker_id = cur_user.partner_id
request.session['success'] = True
diff --git a/beesdoo_website_shift/i18n/fr_BE.po b/beesdoo_website_shift/i18n/fr_BE.po
index 34252a0..219d88e 100644
--- a/beesdoo_website_shift/i18n/fr_BE.po
+++ b/beesdoo_website_shift/i18n/fr_BE.po
@@ -167,7 +167,7 @@ msgstr "Appliquer"
#. module: beesdoo_website_shift
#: model:ir.ui.view,arch_db:beesdoo_website_shift.available_shift_irregular_worker
-msgid "Are you shure you want to subscribe to this shift?"
+msgid "Please confirm subscription"
msgstr "Etes-vous sûr de vouloir vous inscrire à ce shift ?"
#. module: beesdoo_website_shift
diff --git a/beesdoo_website_shift/views/my_shift_website_templates.xml b/beesdoo_website_shift/views/my_shift_website_templates.xml
index c73d475..56356c1 100644
--- a/beesdoo_website_shift/views/my_shift_website_templates.xml
+++ b/beesdoo_website_shift/views/my_shift_website_templates.xml
@@ -480,7 +480,7 @@
×
- Are you shure you want to subscribe to this shift?
+ Please confirm subscription
@@ -901,6 +901,8 @@
Failed! Your subscription has failed. Someone
subscribed before you or the shift was deleted. Try again in a
moment.
+
+ Please note that you can't subscribe 20 minutes before the shift.
From 4fad17af332fbd1f3066cda13154c02ba463ca69 Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Thu, 12 Dec 2019 15:53:16 +0100
Subject: [PATCH 121/208] [IMP] b_shift : attendance sheet generation time
configurable
Generation CRON is running every minute and check for sheets
in the configurable time interval. Workers can't subscribe
to a shift on intranet if its start time is in this interval.
---
beesdoo_website_shift/controllers/main.py | 20 ++++++++++++++++---
.../views/my_shift_website_templates.xml | 2 +-
2 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/beesdoo_website_shift/controllers/main.py b/beesdoo_website_shift/controllers/main.py
index a3f4e92..53c536f 100644
--- a/beesdoo_website_shift/controllers/main.py
+++ b/beesdoo_website_shift/controllers/main.py
@@ -135,7 +135,8 @@ class WebsiteShiftController(http.Controller):
* the given shift exist
* the shift status is open
* the shift is free for subscription
- * the shift is starting in more than 20 minutes
+ * the shift is starting after the time interval
+ for attendance sheet generation defined in beesdoo_shift settings
"""
# Get current user
cur_user = request.env['res.users'].browse(request.uid)
@@ -144,8 +145,13 @@ class WebsiteShiftController(http.Controller):
# Get config
irregular_enable_sign_up = literal_eval(request.env['ir.config_parameter'].get_param(
'beesdoo_website_shift.irregular_enable_sign_up'))
- # Set start time limit
- start_time_limit = datetime.now() + timedelta(minutes = 20)
+ # Set start time limit as defined in beesdoo_shift settings
+ setting = int(
+ request.env["ir.config_parameter"].get_param(
+ "beesdoo_shift.attendance_sheet_generation_interval"
+ )
+ )
+ start_time_limit = datetime.now() + timedelta(minutes=setting)
shift_start_time = fields.Datetime.from_string(shift.start_time)
request.session['success'] = False
@@ -236,6 +242,14 @@ class WebsiteShiftController(http.Controller):
template_context['success'] = request.session.get('success')
del request.session['success']
+ # Add setting for subscription allowed time
+ subscription_time_limit = int(
+ request.env["ir.config_parameter"].get_param(
+ "beesdoo_shift.attendance_sheet_generation_interval"
+ )
+ )
+ template_context['subscription_time_limit'] = subscription_time_limit
+
return template_context
def my_shift_regular_worker_without_shift(self):
diff --git a/beesdoo_website_shift/views/my_shift_website_templates.xml b/beesdoo_website_shift/views/my_shift_website_templates.xml
index 56356c1..0a91fc1 100644
--- a/beesdoo_website_shift/views/my_shift_website_templates.xml
+++ b/beesdoo_website_shift/views/my_shift_website_templates.xml
@@ -902,7 +902,7 @@
subscribed before you or the shift was deleted. Try again in a
moment.
- Please note that you can't subscribe 20 minutes before the shift.
+ Please note that you can't subscribe minutes before the shift.
From bea03d1f808dc7d3fb7921bdf7858288764a1aaf Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Mon, 20 Jan 2020 14:50:34 +0100
Subject: [PATCH 122/208] [ADD] b_shift : authors names
---
beesdoo_shift/__openerp__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/beesdoo_shift/__openerp__.py b/beesdoo_shift/__openerp__.py
index 0496a97..e0c655b 100644
--- a/beesdoo_shift/__openerp__.py
+++ b/beesdoo_shift/__openerp__.py
@@ -9,7 +9,7 @@
""",
- 'author': "Thibault Francois",
+ 'author': "Thibault Francois, Elouan Le Bars, Coop It Easy",
'website': "https://github.com/beescoop/Obeesdoo",
'category': 'Cooperative management',
From 6afd5c9cdde125e8a24276dc2cec3722f5354dc6 Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Mon, 20 Jan 2020 14:51:12 +0100
Subject: [PATCH 123/208] [MOV] b_shift : demo datas for users in b_base
---
beesdoo_shift/demo/users.xml | 31 +----------------------
beesdoo_shift/tests/test_beesdoo_shift.py | 4 +--
2 files changed, 3 insertions(+), 32 deletions(-)
diff --git a/beesdoo_shift/demo/users.xml b/beesdoo_shift/demo/users.xml
index f1c924e..c95957e 100644
--- a/beesdoo_shift/demo/users.xml
+++ b/beesdoo_shift/demo/users.xml
@@ -4,39 +4,10 @@
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-->
-
-
-
-
- Generic Account
- generic@demo.net
-
-
-
- Permanent Member Demo
-
- permanent@demo.net
- Ixelles
- 1050
-
-
-
-
-
- generic
- demo
-
-
-
-
- permanent
- demo
-
-
-
+
diff --git a/beesdoo_shift/tests/test_beesdoo_shift.py b/beesdoo_shift/tests/test_beesdoo_shift.py
index 2a08fce..7f05386 100644
--- a/beesdoo_shift/tests/test_beesdoo_shift.py
+++ b/beesdoo_shift/tests/test_beesdoo_shift.py
@@ -28,10 +28,10 @@ class TestBeesdooShift(TransactionCase):
self.current_time = datetime.now()
self.user_admin = self.env.ref("base.user_root")
self.user_generic = self.env.ref(
- "beesdoo_shift.beesdoo_shift_user_1_demo"
+ "beesdoo_base.beesdoo_shift_user_1_demo"
)
self.user_permanent = self.env.ref(
- "beesdoo_shift.beesdoo_shift_user_2_demo"
+ "beesdoo_base.beesdoo_shift_user_2_demo"
)
self.setting_wizard = self.env["beesdoo.shift.config.settings"].sudo(
From 8ca22926ba9dedda4a363f906121eec661387f03 Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Mon, 20 Jan 2020 14:51:47 +0100
Subject: [PATCH 124/208] [CHG] b_shift : _cron_non_validated_sheets inactive
by default
---
beesdoo_shift/data/cron.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/beesdoo_shift/data/cron.xml b/beesdoo_shift/data/cron.xml
index 686112b..e3b83fd 100644
--- a/beesdoo_shift/data/cron.xml
+++ b/beesdoo_shift/data/cron.xml
@@ -57,6 +57,7 @@
beesdoo.shift.sheet_cron_non_validated_sheets()
+
From e03dc65532034c287021c5aae6ffab04336c2077 Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Tue, 21 Jan 2020 17:21:05 +0100
Subject: [PATCH 125/208] [ADD] b_shift : traductions
---
beesdoo_shift/i18n/fr.po | 1316 +++++++---
beesdoo_shift/i18n/fr_BE.po | 1317 +++++++---
beesdoo_shift/i18n/nl_BE.po | 2556 ++++++++++++++++++++
beesdoo_shift/models/attendance_sheet.py | 10 +-
beesdoo_shift/models/cooperative_status.py | 4 +-
beesdoo_shift/models/planning.py | 2 +-
beesdoo_shift/models/task.py | 4 +-
beesdoo_shift/views/cooperative_status.xml | 2 +-
beesdoo_shift/views/task.xml | 4 +-
9 files changed, 4605 insertions(+), 610 deletions(-)
create mode 100644 beesdoo_shift/i18n/nl_BE.po
diff --git a/beesdoo_shift/i18n/fr.po b/beesdoo_shift/i18n/fr.po
index e86d39c..97fca52 100644
--- a/beesdoo_shift/i18n/fr.po
+++ b/beesdoo_shift/i18n/fr.po
@@ -6,8 +6,8 @@ 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"
+"POT-Creation-Date: 2020-01-23 13:26+0000\n"
+"PO-Revision-Date: 2020-01-23 13:26+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@@ -16,55 +16,138 @@ msgstr ""
"Plural-Forms: \n"
#. module: beesdoo_shift
-#: model:mail.template,body_html:beesdoo_shift.email_template_non_validated_sheet
+#: code:addons/beesdoo_shift/wizard/validate_attendance_sheet.py:48
+#, python-format
msgid "\n"
-"
\n"
+"%s attended its shift as a normal one but was not expected. Something may be wrong in his/her personnal informations.\n"
+""
+msgstr "\n"
+"%s a effectué son shift comme un shift normal mais n'était pas attendu(e). Veuillez vérifier son inscription à ce créneau.\n"
+""
+
+#. module: beesdoo_shift
+#: model:mail.template,body_html:beesdoo_shift.email_template_non_attendance
+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"
+" % if object.replaced_id:\n"
+"
Hello ${object.replaced_id.name},\n"
"\n"
-"
\n"
-" "
-msgstr "\n"
-"
\n"
+"
You have been recorded as non-attended during your last shift (${format_tz(object.start_time,object.replaced_id.tz or 'Europe/Brussels','%d.%m.%Y - %H:%M')}),\n"
+" and you were supposed to replace ${object.worker_id.name}.\n"
+"
Your current status is \"${object.worker_id.cooperative_status_ids.get_status_value()}\".\n"
+" % endif\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"
+" % if not object.replaced_id:\n"
+"
Hello ${object.worker_id.name},
\n"
"\n"
-"
\n"
+"
You have been recorded as non-attended during your last shift (${format_tz(object.start_time,object.worker_id.tz or 'Europe/Brussels','%d.%m.%Y - %H:%M')}).\n"
+"
Your current status is \"${object.worker_id.cooperative_status_ids.get_status_value()}\".\n"
+" % endif\n"
+"\n"
+" % if object.worker_id.working_mode == 'regular':\n"
+" % if object.state == 'absent_0':\n"
+"
Super-cooperator assigned you 0 compensation, so you won't have any additionnal shift to do before your next regular shift.\n"
+" % endif\n"
+" % if object.state == 'absent_1':\n"
+"
Super-cooperator assigned you 1 compensation, so you have to attend one additionnal shift before your next regular shift.\n"
+" % endif\n"
+" % if object.state == 'absent_2':\n"
+"
Super-cooperator assigned you 2 compensations, so you have to attend two additionnal shifts before your next regular shift.\n"
+" % endif\n"
+" % endif\n"
+"\n"
+" % if object.worker_id.working_mode == 'irregular':\n"
+" Your shift counter is ${object.worker_id.cooperative_status_ids.sr}.\n"
+" You should be at a minimum of 0 before the ${object.worker_id.cooperative_status_ids.future_alert_date}.\n"
+" % endif\n"
+"\n"
+" If you have any question regarding this non-attendance, just answer this e-mail.\n"
+"
\n"
+" \n"
+"
Cooperatively yours, \n"
+" The Members' office volunteers
\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"
+"
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"
+"
Tu as été encodé(e) comme absent(e) à ton dernier shift (${format_tz(object.start_time,object.replaced_id.tz or 'Europe/Brussels','%d.%m.%Y - %H:%M')}), et tu devais remplacer ${object.worker_id.name}.\n"
+"
Ton statut est désormais \"${object.worker_id.cooperative_status_ids.get_status_value()}\".\n"
+" % endif\n"
"\n"
-"
Please contact us at ${object.worker_id.company_id.email} if you have any trouble attending the shift.\n"
+" % if not object.replaced_id:\n"
+"
Bonjour ${object.worker_id.name},
\n"
+"\n"
+"
Tu as été encodé(e) comme absent(e) à ton dernier shift (${format_tz(object.start_time,object.worker_id.tz or 'Europe/Brussels','%d.%m.%Y - %H:%M')}).\n"
+"
Ton statut est désormais \"${object.worker_id.cooperative_status_ids.get_status_value()}\".\n"
+" % endif\n"
+"\n"
+" % if object.worker_id.working_mode == 'regular':\n"
+" % if object.state == 'absent_0':\n"
+"
Ton/ta supercoop t'a attribué 0 compensation, tu n'as donc pas de shifts à réaliser avant ton prochain shift régulier.\n"
+" % endif\n"
+" % if object.state == 'absent_1':\n"
+"
Ton/ta supercoop t'a attribué 1 compensation, tu dois donc faire un shift avant ton prochain shift régulier.\n"
+" % endif\n"
+" % if object.state == 'absent_2':\n"
+"
Ton/ta supercoop t'a attribué 2 compensations, tu dois donc faire deux shifts avant ton prochain shift régulier.\n"
+" % endif\n"
+" % endif\n"
+"\n"
+" % if object.worker_id.working_mode == 'irregular':\n"
+" Ton compteur de shifts vaut ${object.worker_id.cooperative_status_ids.sr}.\n"
+" Il doit au minimum être à 0 avant le ${object.worker_id.cooperative_status_ids.future_alert_date}.\n"
+" % endif\n"
+"\n"
+" Si tu as une question à propos de cette absence, réponds à cet e-mail.\n"
"
\n"
-" \n"
-"
Sustainably yours,
\n"
-"
${object.worker_id.company_id.name}.
\n"
+" \n"
+"
Coopérativement, \n"
+" Les bénévoles du Bureau des Membres
\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"
+" ${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"
+" ${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"
+" ${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"
@@ -82,62 +165,41 @@ msgid "\n"
" %endif\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"
-"
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"
+" "
+msgstr "\n"
+"
\n"
"\n"
-"
En cas d'indisponibilité, vous pouvez nous contacter à l'adresse suivante : ${object.worker_id.company_id.email}.\n"
+"
${object.day}\n"
+"
La feuille de présence pour ${object.time_slot} n'est pas validée.\n"
+"
Veuillez la valider le plus rapidement possible pour que les statuts des travailleurs puissent être adaptés.\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"
-"
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"
+"
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"
-"
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"
+"
Please contact us at ${object.worker_id.company_id.email} if you have any trouble attending the shift.\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"
+"
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"
-"
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"
+"
En cas d'indisponibilité, vous pouvez nous contacter à l'adresse suivante : ${object.worker_id.company_id.email}.\n"
"
\n"
-" \n"
-"
Sustainably yours,
\n"
-"
${object.worker_id.company_id.name}.
\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"
+" ${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"
+" ${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"
+" ${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"
@@ -206,32 +264,56 @@ msgstr "\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"
"
\n"
" %endif\n"
"
\n"
" "
#. module: beesdoo_shift
-#: code:addons/beesdoo_shift/models/planning.py:192
+#: code:addons/beesdoo_shift/models/planning.py:193
#, python-format
msgid " is already assigned to "
-msgstr " is already assigned to "
+msgstr " est déjà assigné à "
#. 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
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:519
+#, python-format
+msgid "%s (added)"
+msgstr "%s (added)"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:359
+#, python-format
+msgid "%s is %s and should be regular or irregular."
+msgstr "%s est %s et devrait être régulier ou volant."
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:374
+#, python-format
+msgid "%s was expected as replaced."
+msgstr "%s devait être remplacé."
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/task.py:145
+#, python-format
+msgid "'Now' must be a datetime."
+msgstr "'Now' must be a datetime."
+
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search
msgid "4 next days"
-msgstr "4 next days"
+msgstr "4 prochains jours"
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_kanban
@@ -241,32 +323,76 @@ msgstr " \n"
" Recurring Workers"
#. module: beesdoo_shift
+#: selection:beesdoo.shift.sheet.added,state:0
+#: selection:beesdoo.shift.sheet.expected,state:0
+#: selection:beesdoo.shift.sheet.shift,state:0
+msgid "Absent"
+msgstr "Absent"
+
+#. module: beesdoo_shift
+#: selection:beesdoo.shift.shift,state:0
+msgid "Absent - 0 compensation"
+msgstr "Absent - 0 compensation"
+
+#. module: beesdoo_shift
+#: selection:beesdoo.shift.shift,state:0
+msgid "Absent - 1 compensation"
+msgstr "Absent - 1 compensation"
+
+#. module: beesdoo_shift
+#: selection:beesdoo.shift.shift,state:0
+msgid "Absent - 2 compensations"
+msgstr "Absent - 2 compensations"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_message_needaction
#: 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_sheet_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.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_active_sheet
+msgid "Active sheet"
+msgstr "Active sheet"
+
#. module: beesdoo_shift
#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_sheet_added
msgid "Added Shift"
-msgstr "Added Shift"
+msgstr "Shift ajouté"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_added_shift_ids
+msgid "Added Shifts"
+msgstr "Shifts ajoutés"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_view_form
+msgid "Added workers"
+msgstr "Travailleurs ajoutés"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.validate_attendance_sheet_form
+msgid "Additional informations"
+msgstr "Informations supplémentaires"
#. 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"
+msgstr "Nombre de jours ajoutés à l'extension automatique, 5 signifiant que vous avez un total de 15 jours d'extension si le nombre par défaut est 10"
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.journal_form_view
-msgid "Affected cooperator"
-msgstr "Affected cooperator"
+msgid "Assigned cooperator"
+msgstr "Cooperator affecté"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_age
@@ -276,43 +402,120 @@ 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"
+msgstr "Début d'alerte"
#. module: beesdoo_shift
#: selection:cooperative.status,status:0
msgid "Alerte"
msgstr "Alerte"
+#. module: beesdoo_shift
+#: model:ir.actions.act_window,name:beesdoo_shift.action_sheet_admin_list
+#: model:ir.ui.menu,name:beesdoo_shift.menu_sheet_admin_list
+msgid "All sheets"
+msgstr "Toutes les feuilles"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_view_search
+msgid "Annotated (read)"
+msgstr "Annotées (lues)"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_view_search
+msgid "Annotated (unread)"
+msgstr "Annotées (non-lues)"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.shift_settings_view_form
+msgid "Apply"
+msgstr "Appliquer"
+
#. 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.ui.view,arch_db:beesdoo_shift.sheet_view_search
+msgid "Archived"
+msgstr "Archivé"
+
#. 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"
+msgstr "Etes-vous sûr de vouloir désinscrire ce coopérateur ?"
#. 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 ?"
+msgstr "Etes-vous sûr de vouloir désinscrire ce coopérateur ?"
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search
msgid "Assigned"
-msgstr "Assigned"
+msgstr "Assigné"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_added_attendance_sheet_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_attendance_sheet_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_shift_attendance_sheet_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_attendance_sheet_id
+msgid "Attendance Sheet"
+msgstr "Feuille de présence"
+
+#. module: beesdoo_shift
+#: model:res.groups,name:beesdoo_shift.group_shift_attendance_sheet
+msgid "Attendance Sheet Generic Access"
+msgstr "Feuilles de présence"
+
+#. module: beesdoo_shift
+#: model:ir.ui.menu,name:beesdoo_shift.menu_sheet_top
+msgid "Attendance Sheets"
+msgstr "Feuilles de présence"
#. module: beesdoo_shift
#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_sheet
msgid "Attendance sheet"
-msgstr "Attendance sheet"
+msgstr "Feuille de présence"
+
+#. module: beesdoo_shift
+#: selection:beesdoo.shift.shift,state:0
+msgid "Attended"
+msgstr "Présent"
#. 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"
+msgstr "Extension auto"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_barcode
+msgid "Barcode"
+msgstr "Code-barre"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet__barcode_scanned
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate__barcode_scanned
+msgid "Barcode Scanned"
+msgstr "Code-barre scanné"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_view_form
+msgid "Beware : a validated sheet cannot be edited anymore and you won't be able to add any latecomers. The counters of those who didn't attend will be updated and they will get warning emails."
+msgstr "Attention : une feuille de présence validée ne peut plus être modifiée et tu ne pourras pas ajouter de retardataires. Le compteur des travailleurs absents sera mis à jour et ils recevront et un e-mail d'avertissement."
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:352
+#, python-format
+msgid "Beware, you are recorded as resigning. Please contact member's office if this is incorrect. Thank you."
+msgstr "Attention, ton compte est "en démission". Contacte le Bureau des Membres si c'est incorrect. Merci"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:342
+#, python-format
+msgid "Beware, your account is frozen because your shift counter is at %s. Please contact Members Office to unfreeze it. If you want to attend this shift, your supercoop can write your name in the notes field during validation."
+msgstr "Attention, ton compte est gelé parce que ton compteur est à %s. Contacte le Bureau des Membres pour dégeler ton compte. Si tu souhaites participer à ce shift, ton supercoop peut écrire ton nom dans la case "Information concernant les présences" au moment de la validation."
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_calendar
@@ -323,40 +526,52 @@ 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"
+msgstr "Peut faire ses courses"
#. 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.shift_settings_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
+#: model:ir.ui.view,arch_db:beesdoo_shift.validate_attendance_sheet_form
msgid "Cancel"
msgstr "Annuler"
+#. module: beesdoo_shift
+#: selection:beesdoo.shift.shift,state:0
+msgid "Cancelled"
+msgstr "Annulé"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_card_support
+msgid "Card support"
+msgstr "Support des cartes de membre"
+
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_history_change
msgid "Change"
-msgstr "Change"
+msgstr "Changement"
#. module: beesdoo_shift
#: model:ir.actions.act_window,name:beesdoo_shift.act_assign_new_super_coop
msgid "Change Super Coop"
-msgstr "Change Super Coop"
+msgstr "Changer de supercoopérateur"
#. 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"
+msgstr "Vérifie le nom d'utilisateur et valide la feuille de présence.\n"
+" Inutile pour les utilisateurs appartenant à 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."
+msgstr "Cocher cette case si le coopérateur n'est plus un membre effectif."
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_child_eater_ids
@@ -366,16 +581,10 @@ 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"
+msgstr "Nettoyer l'historique"
#. 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"
@@ -384,20 +593,49 @@ msgstr "Couleur"
msgid "Color Index"
msgstr "Couleur"
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_feedback
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_feedback
+msgid "Comments about the shift"
+msgstr "Commentaires à propos du shift"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:582
+#, python-format
+msgid "Compensation number is missing for %s"
+msgstr "Veuillez entrer un nombre de compensations pour %s"
+
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_is_compensation
msgid "Compensation shift"
-msgstr "Compensation shift"
+msgstr "Shift de compensation"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_added_is_compensation
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_is_compensation
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_shift_is_compensation
+msgid "Compensation shift ?"
+msgstr "Shift de compensation ?"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_compensation_no
+msgid "Compensations"
+msgstr "Compensations"
#. 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"
+msgid "Compensation shifts counter"
+msgstr "Compteur shifts 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"
+msgid "Regular shifts counter"
+msgstr "Compteur shifts réguliers"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_week
+msgid "Computed from planning names"
+msgstr "Calculé à partir du nom du planning"
#. module: beesdoo_shift
#: model:ir.ui.menu,name:beesdoo_shift.menu_configuration_top
@@ -415,27 +653,32 @@ msgstr "Configuration"
msgid "Confirm"
msgstr "Confirmer"
+#. module: beesdoo_shift
+#: selection:beesdoo.shift.shift,state:0
+msgid "Confirmed"
+msgstr "Confirmé"
+
#. module: beesdoo_shift
#: model:res.groups,name:beesdoo_shift.group_cooperative_admin
msgid "Cooperative Admin"
-msgstr "Cooperative Admin"
+msgstr "Shifts - Administrateur"
#. 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"
+msgstr "Statut du coopérateur"
#. 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"
+msgstr "Ids statut de coopérateur"
#. module: beesdoo_shift
#: model:ir.actions.act_window,name:beesdoo_shift.action_coop_status
msgid "Cooperator Status"
-msgstr "Cooperator Status"
+msgstr "Statut du coopérateur"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_cooperator_type
@@ -451,45 +694,49 @@ msgstr "Type de coopérateur"
#: 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"
+msgstr "Coopérateur"
#. 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"
+msgstr "Copie d'un shift réel dans une feuille de présence"
#. module: beesdoo_shift
#: selection:cooperative.status.history,type:0
msgid "Counter Change"
-msgstr "Counter Change"
+msgstr "Changement de compteur"
#. module: beesdoo_shift
#: model:ir.actions.act_window,name:beesdoo_shift.action_journal
msgid "Counter Journal"
-msgstr "Counter Journal"
+msgstr "Journal des compteurs"
#. module: beesdoo_shift
#: model:ir.ui.menu,name:beesdoo_shift.menu_journal
msgid "Counter Update Journal"
-msgstr "Counter Update Journal"
+msgstr "Journal de mise à jour des compteurs"
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.coop_status_form_view
msgid "Counter and Status"
-msgstr "Counter and Status"
+msgstr "Compteur et statut"
#. 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_config_settings_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_sheet_added_create_uid
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_create_uid
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_create_uid
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_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
@@ -505,13 +752,17 @@ msgstr "Créé par"
#: 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_config_settings_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_sheet_added_create_date
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_create_date
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_create_date
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_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
@@ -525,12 +776,18 @@ 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."
+msgstr "Le travailleur actual a plus d'un seul shift, l'inscription à un nouveau créneau supprimera tous ses shifts précédents."
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_generation_view_form
msgid "Daily Schedule"
-msgstr "Daily Schedule"
+msgstr "Agenda journalier"
+
+#. module: beesdoo_shift
+#: model:ir.actions.act_window,name:beesdoo_shift.action_sheet_daily
+#: model:ir.ui.menu,name:beesdoo_shift.menu_sheet
+msgid "Daily Feuilles de présence"
+msgstr "Feuilles de présence du jour"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_journal_date
@@ -541,29 +798,47 @@ 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"
+msgstr "Date de la session d'information"
#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_message_last_post
#: 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_sheet_day
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_day_nb_id
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_view_search
#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search
msgid "Day"
msgstr "Jour"
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_day_abbrevation
+msgid "Day Abbrevation"
+msgstr "Abbrévation du 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"
+msgstr "Numéro du jour"
#. 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"
+msgstr "Ids des jours"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_config_settings_default_task_type_id
+msgid "Default Task Type"
+msgstr "Type de tâche par défaut"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_config_settings_default_task_type_id
+msgid "Default task type for attendance sheet pre-filling"
+msgstr "Type de shift par défaut pour le remplissage automatique des feuilles de présence"
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_kanban
@@ -587,13 +862,18 @@ msgstr "Description"
#: 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_config_settings_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_sheet_added_display_name
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_display_name
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_display_name
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_shift_display_name
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_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
@@ -612,24 +892,22 @@ 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"
+msgstr "Durée en heures"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_eater
msgid "Eater/Worker"
-msgstr "Eater/Worker"
+msgstr "Mangeur/Travailleur"
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_shift_view_kanban
msgid "Edit Shift"
-msgstr "Edit Shift"
+msgstr "Editer le 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"
+msgstr "Editer le modèle de shift\n"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_effective_date
@@ -641,22 +919,32 @@ msgstr "Date effective"
msgid "Email Thread"
msgstr "Discussion par courriel"
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_end_time
+msgid "End Time"
+msgstr "Date et horaire de fin"
+
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_end_date
msgid "End date"
-msgstr "End date"
+msgstr "Fin"
#. 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)"
+msgstr "Fin des vacances (inclue)"
#. 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"
+msgstr "Date et horaire de fin"
+
+#. module: beesdoo_shift
+#: selection:beesdoo.shift.sheet,worker_nb_feedback:0
+msgid "Enough workers"
+msgstr " Assez de travailleurs"
#. module: beesdoo_shift
#: model:ir.actions.act_window,name:beesdoo_shift.action_exempt_reason
@@ -674,12 +962,23 @@ msgstr "Raison d'exemption"
#: selection:cooperative.status,status:0
#: selection:cooperative.status,working_mode:0
msgid "Exempted"
-msgstr "Exempted"
+msgstr "Exempté"
#. module: beesdoo_shift
#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_sheet_expected
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_expected_view_form
msgid "Expected Shift"
-msgstr "Expected Shift"
+msgstr "Shift attendu"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_shift_ids
+msgid "Expected Shifts"
+msgstr "Shifts attendus"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_view_form
+msgid "Expected workers"
+msgstr "Travailleurs attendus"
#. module: beesdoo_shift
#: selection:cooperative.status,status:0
@@ -689,18 +988,28 @@ 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"
+msgstr "Nombre de jours d'extension"
#. 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"
+msgstr "Début d'extension"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_extension_extension_days
msgid "Extension days"
-msgstr "Extension days"
+msgstr "Jours d'extension"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_view_form
+msgid "Feedback"
+msgstr "Retour"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_view_search
+msgid "Feedback on number of workers"
+msgstr "Retour sur le nombre de travailleurs"
#. module: beesdoo_shift
#: model:ir.model.fields,help:beesdoo_shift.field_cooperative_status_today
@@ -710,24 +1019,27 @@ msgstr "Field that allow to compute field and store them even if they are based
#. 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"
+msgstr "Premier jour du 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"
+msgstr "A suivi une session d'information"
#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_message_follower_ids
#: 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_sheet_message_channel_ids
#: 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_sheet_message_partner_ids
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_partner_ids
msgid "Followers (Partners)"
msgstr "Abonnés (Partenaires)"
@@ -735,60 +1047,83 @@ 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"
+msgstr "Pour test"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_first_name
+msgid "Frist Name (Legacy)"
+msgstr "First Name (Legacy)"
#. 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..."
+msgstr "De 1 à N. Quand vous créerez le planning, le jour 1 sera la date de début, jour 2 la suivante, etc."
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_added_worker_name
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_worker_name
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_shift_worker_name
+msgid "Full Name"
+msgstr "Nom Complet"
#. 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"
+msgstr "Prochaine date d'alerte"
#. 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.shift_settings_view_form
+msgid "General Settings"
+msgstr "Paramètres Généraux"
+
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.coop_status_form_view
msgid "General information"
-msgstr "General information"
+msgstr "Informations générales"
#. module: beesdoo_shift
#: model:ir.actions.act_window,name:beesdoo_shift.action_generate_shift_template_wizard
msgid "Generate Shift Template"
-msgstr "Generate Shift Template"
+msgstr "Générer le template de shifts"
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.type_view_form
msgid "Generate shift Templates"
-msgstr "Generate shift Templates"
+msgstr "Générer les templates de shift"
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.planning_view_form
msgid "Generate shifts"
-msgstr "Generate shifts"
+msgstr "Génerer les shifts"
#. module: beesdoo_shift
#: code:addons/beesdoo_shift/wizard/instanciate_planning.py:20
#, python-format
msgid "Generated Shift"
-msgstr "Generated Shift"
+msgstr "Shift généré"
#. module: beesdoo_shift
#: code:addons/beesdoo_shift/wizard/batch_template.py:37
#, python-format
msgid "Generated Shift Template"
-msgstr "Generated Shift Template"
+msgstr "Modèle de shifts généré"
#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_view_search
#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search
msgid "Group By"
msgstr "Regrouper par"
+#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_is_read
+msgid "Has notes been read by an administrator ?"
+msgstr "La note a-t-elle été lue par un administrateur ?"
+
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.coop_status_form_view
msgid "History"
@@ -802,17 +1137,17 @@ msgstr "History ids"
#. module: beesdoo_shift
#: selection:cooperative.status,status:0
msgid "Holidays"
-msgstr "Holidays"
+msgstr "Vacances"
#. 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"
+msgstr "Date de fin des vacances"
#. 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"
+msgstr "Début des vacances"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_assign_super_coop_id
@@ -820,13 +1155,18 @@ msgstr "Holidays Start Day"
#: 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_config_settings_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_sheet_added_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_shift_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_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
@@ -838,58 +1178,82 @@ msgid "ID"
msgstr "ID"
#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_message_unread
#: 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."
+msgstr "Si elle est cochée, de nouveaux messages demandent votre attention."
#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_message_needaction
#: 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,help:beesdoo_shift.field_beesdoo_shift_sheet_max_worker_no
+msgid "Indicative maximum number of workers."
+msgstr "Nombre de travailleurs maximal indicatif."
+
#. 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 ?"
+msgstr "Session d'information ?"
#. 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"
+msgstr "Date de la session d'information"
#. module: beesdoo_shift
#: model:ir.actions.act_window,name:beesdoo_shift.action_generate_shift_wizard
msgid "Instanciate Planning Action"
-msgstr "Instanciate Planning Action"
+msgstr "Instancier 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"
+msgstr "Compteur d'absences (volant)"
#. 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"
+msgstr "Date d'absence (volant)"
#. 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"
+msgstr "Date de début (volant)"
#. module: beesdoo_shift
#: selection:beesdoo.shift.subscribe,working_mode:0
#: selection:cooperative.status,working_mode:0
msgid "Irregular worker"
-msgstr "Irregular worker"
+msgstr "Travailleur volant"
#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/cooperative_status.py:207
+#, python-format
+msgid "Irregular workers must have an irregular start date."
+msgstr "Les travailleurs volants doivent avoir une date de début."
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_message_is_follower
#: 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.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_is_annotated
+msgid "Is annotated"
+msgstr "Est annotée"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_validate_warning_regular_workers
+msgid "Is any regular worker doing its regular shift as an added one ?"
+msgstr "Est-ce que le travailleur régulier réalise son shift habituel sans être attendu ?"
+
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search
msgid "J-1"
@@ -916,6 +1280,7 @@ msgid "J-5"
msgstr "J-5"
#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_message_last_post
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_last_post
msgid "Last Message Date"
msgstr "Date du dernier message"
@@ -926,13 +1291,18 @@ msgstr "Date du dernier message"
#: 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_config_settings___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_sheet___last_update
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_added___last_update
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected___last_update
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_shift___last_update
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate___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
@@ -943,18 +1313,27 @@ msgstr "Date du dernier message"
msgid "Last Modified on"
msgstr "Dernière modification le"
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_last_name
+msgid "Last Name (Legacy)"
+msgstr "Last Name (Legacy)"
+
#. 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_config_settings_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_sheet_added_write_uid
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_write_uid
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_write_uid
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_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
@@ -970,13 +1349,17 @@ msgstr "Mis à jour par"
#: 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_config_settings_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_sheet_added_write_date
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_write_date
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_write_date
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_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
@@ -990,41 +1373,65 @@ 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"
+msgstr "Dernière impression le"
#. 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"
+msgstr "Ids des lignes"
#. module: beesdoo_shift
-#: code:addons/beesdoo_shift/models/cooperative_status.py:451
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_login
+#: model:ir.ui.view,arch_db:beesdoo_shift.validate_attendance_sheet_form
+msgid "Login"
+msgstr "Identifiant"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/cooperative_status.py:461
#: model:ir.ui.view,arch_db:beesdoo_shift.super_coop_partner_inherited_view_form
#, python-format
msgid "Manual Extension"
-msgstr "Manual Extension"
+msgstr "Extension manuelle"
#. module: beesdoo_shift
#: model:ir.model.fields,help:beesdoo_shift.field_cooperative_status_unsubscribed
msgid "Manually unsubscribed"
-msgstr "Manually unsubscribed"
+msgstr "Manuellement gelé"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_is_read
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_view_form
+msgid "Mark as read"
+msgstr "Marquer comme lu"
#. 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"
+msgstr "Nombre maximal de travailleur pour cette tâche"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_max_worker_no
+msgid "Maximum number of workers"
+msgstr "Maximum de travailleurs"
#. 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"
+msgstr "Ids des cartes de membre"
#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_message_ids
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_ids
msgid "Messages"
msgstr "Messages"
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:333
+#, python-format
+msgid "Multiple workers are corresponding this barcode."
+msgstr "Plusieurs travailleurs correspondent à ce code-barre."
+
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search
msgid "My Shift"
@@ -1034,13 +1441,13 @@ msgstr "Mes shifts"
#: 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"
+msgstr "Les shifts de mon équipe"
#. 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_sheet_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
@@ -1050,24 +1457,60 @@ 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"
+msgstr "Nouveau Supercoopérateur"
#. 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"
+msgstr "Prochaine date de décompte"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:220
+#: sql_constraint:beesdoo.shift.sheet:0
+#, python-format
+msgid "Non-annotated sheets can't be marked as read."
+msgstr "Les feuilles de présences non-annotées ne peuvent pas êtres marquées comme lues."
#. 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."
+msgstr "Absence à votre dernier shift."
+
+#. module: beesdoo_shift
+#: model:ir.actions.act_window,name:beesdoo_shift.action_sheet_admin_non_validated
+#: model:ir.ui.menu,name:beesdoo_shift.menu_sheet_admin_non_validated
+msgid "Non-validated sheets"
+msgstr "Non-validées"
+
+#. module: beesdoo_shift
+#: selection:beesdoo.shift.sheet,state:0
+msgid "Not Validated"
+msgstr "Non validée"
+
+#. module: beesdoo_shift
+#: selection:beesdoo.shift.sheet,worker_nb_feedback:0
+msgid "Not enough workers"
+msgstr "Pas assez de travailleurs"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_notes
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_notes
+msgid "Notes"
+msgstr "Notes pour le Bureau des Membres"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_notes
+msgid "Notes about the attendance for the Members Office"
+msgstr "Information concernant les présences"
#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_message_needaction_counter
#: 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_sheet_message_needaction_counter
#: 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"
@@ -1075,9 +1518,10 @@ 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"
+msgstr "Nombre de shifts"
#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_message_unread_counter
#: 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"
@@ -1085,32 +1529,50 @@ 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"
+msgstr "Nombre de travailleurs"
#. 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,help:beesdoo_shift.field_beesdoo_shift_sheet_added_is_compensation
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_expected_is_compensation
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_shift_is_compensation
+msgid "Only for regular workers"
+msgstr "Seulement pour les travailleurs réguliers"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/wizard/validate_attendance_sheet.py:110
+#, python-format
+msgid "Only super-cooperators and administrators can validate attendance sheets."
+msgstr "Seuls les supercoopérateurs et les administrateurs peuvent valider les feuilles de présence."
+
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_parent_barcode
msgid "Parent Barcode"
-msgstr "Parent Barcode"
+msgstr "Code-barre du parent"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_parent_eater_id
msgid "Parent Worker"
-msgstr "Parent Worker"
+msgstr "Parent du travailleur"
#. module: beesdoo_shift
#: model:ir.model,name:beesdoo_shift.model_res_partner
msgid "Partner"
msgstr "Partenaire"
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_password
+msgid "Password"
+msgstr "Mot de passe"
+
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_search
msgid "Place Available"
-msgstr "Place Available"
+msgstr "Place disponible"
#. module: beesdoo_shift
#: model:ir.ui.menu,name:beesdoo_shift.menu_task_top
@@ -1127,12 +1589,12 @@ msgstr "Planning Action"
#. module: beesdoo_shift
#: model:res.groups,name:beesdoo_shift.group_planning_management
msgid "Planning Management"
-msgstr "Planning Management"
+msgstr "Shifts - Planning"
#. module: beesdoo_shift
#: model:ir.ui.menu,name:beesdoo_shift.menu_planning
msgid "Planning Week"
-msgstr "Planning Week"
+msgstr "Planning par semaines"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_planning_planning_id
@@ -1140,12 +1602,37 @@ msgstr "Planning Week"
#: 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"
+msgstr "Id du planning"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/wizard/validate_attendance_sheet.py:99
+#, python-format
+msgid "Please enter your login."
+msgstr "Veuillez entrer votre login."
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:590
+#, python-format
+msgid "Please give your feedback about the number of workers."
+msgstr "L'équipe était-elle assez nombreuse ?"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/wizard/validate_attendance_sheet.py:94
+#, python-format
+msgid "Please set a correct barcode."
+msgstr "Veuillez entrer un code-barre valide."
+
+#. module: beesdoo_shift
+#: selection:beesdoo.shift.sheet.added,state:0
+#: selection:beesdoo.shift.sheet.expected,state:0
+#: selection:beesdoo.shift.sheet.shift,state:0
+msgid "Present"
+msgstr "Présent"
#. 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?"
+msgstr "Imprimer la carte BEES ?"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_website_private
@@ -1155,71 +1642,86 @@ 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"
+msgstr "Lecture seule 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"
+msgstr "Travailleur récurrent assigné"
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_form
msgid "Recurring Workers"
-msgstr "Recurring Workers"
+msgstr "Travailleurs récurrents"
#. module: beesdoo_shift
-#: code:addons/beesdoo_shift/models/cooperative_status.py:469
+#: code:addons/beesdoo_shift/models/cooperative_status.py:479
#, python-format
msgid "Register Holiday"
-msgstr "Register Holiday"
+msgstr "Enregistrer des vacances"
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.super_coop_partner_inherited_view_form
msgid "Register Holidays"
-msgstr "Register Holidays"
+msgstr "Enregistrer des vacances"
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_shift_view_kanban
msgid "Regular Shift"
-msgstr "Regular Shift"
+msgstr "Shift régulier"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_is_regular
msgid "Regular shift"
-msgstr "Regular shift"
+msgstr "Shift régulier"
#. module: beesdoo_shift
#: selection:beesdoo.shift.subscribe,working_mode:0
#: selection:cooperative.status,working_mode:0
msgid "Regular worker"
-msgstr "Regular worker"
+msgstr "Travailleur régulier"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_remaining_worker
msgid "Remaining Place"
-msgstr "Remaining Place"
+msgstr "Places restantes"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_replaced_id
msgid "Replaced id"
-msgstr "Replaced id"
+msgstr "Id du remplaçant"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_replacement_worker_id
+msgid "Replacement Worker"
+msgstr "Travailleur remplaçant"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_expected_replacement_worker_id
+msgid "Replacement Worker (must be regular)"
+msgstr "Travailleur remplaçant (doit être régulier)"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.task_shift_view_kanban
+msgid "Replacement worker:"
+msgstr "Travailleur remplaçant:"
#. 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"
+msgstr "Réinitialiser le compteur de compensations"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_reset_counter
msgid "Reset counter"
-msgstr "Reset counter"
+msgstr "Réinitialiser le compteur"
#. 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"
+msgstr "Démissionnaire"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_revert_info
@@ -1229,95 +1731,139 @@ 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"
+msgstr "Lancer à nouveau pour aujourd'hui"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.validate_attendance_sheet_form
+msgid "Save"
+msgstr "Sauvegarder"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_config_settings_card_support
+msgid "Scan cooperators cards instead of login for sheets validation"
+msgstr "Scanner les cartes de membres à la place du login pour la validation des feuilles de présence."
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.validate_attendance_sheet_form
+msgid "Scan your card"
+msgstr "Scannez votre carte"
#. 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"
+#: model:ir.actions.act_window,name:beesdoo_shift.action_shift_settings
+#: model:ir.ui.menu,name:beesdoo_shift.menu_shift_settings
+#: model:ir.ui.view,arch_db:beesdoo_shift.shift_settings_view_form
+msgid "Settings"
+msgstr "Configuration"
#. 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"
+#: model:ir.ui.menu,name:beesdoo_shift.menu_task
+msgid "Shifts"
+msgstr "Shifts"
#. module: beesdoo_shift
#: model:ir.ui.menu,name:beesdoo_shift.menu_configuration_day
msgid "Shift Day"
-msgstr "Shift Day"
+msgstr "Jours des shifts"
#. 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"
+msgstr "Gestion des shifts"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_added_state
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_state
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_shift_state
+msgid "Shift State"
+msgstr "État du shift"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:574
+#, python-format
+msgid "Shift State is missing for %s"
+msgstr "État du shift manquant pour %s"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:557
+#, python-format
+msgid "Shift State is missing or wrong for %s"
+msgstr "État du shift manquant ou incorrect pour %s"
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search
msgid "Shift Template"
-msgstr "Shift Template"
+msgstr "Template de shifts"
#. 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"
+msgstr "Type de shifts"
+
+#. module: beesdoo_shift
+#: model:res.groups,name:beesdoo_shift.group_shift_attendance
+msgid "Shift and Worker Access"
+msgstr "Shifts - Présences"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_shift_id
msgid "Shift id"
-msgstr "Shift id"
+msgstr "Id du shift"
#. 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"
+msgstr "Ids des shifts"
#. 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"
+msgstr "Planning"
#. 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"
+msgstr "Date et horaire de début"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_start_time
+msgid "Start Time"
+msgstr "Date et horaire 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"
+msgstr "Début"
#. 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"
+msgstr "Date de début de l'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"
+msgstr "Date de début des vacances"
#. 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"
+msgstr "Date et horaire de début"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_state
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_state
+msgid "State"
+msgstr "État"
#. module: beesdoo_shift
#: model:ir.ui.menu,name:beesdoo_shift.menu_status_top
@@ -1328,12 +1874,12 @@ msgstr "Statut"
#. module: beesdoo_shift
#: selection:cooperative.status.history,type:0
msgid "Status Change"
-msgstr "Status Change"
+msgstr "Changement de statut"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_history_status_id
msgid "Status id"
-msgstr "Status id"
+msgstr "Id du statut"
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_shift_view_kanban
@@ -1341,15 +1887,15 @@ msgid "Status:"
msgstr "Statut :"
#. module: beesdoo_shift
-#: code:addons/beesdoo_shift/models/cooperative_status.py:434
+#: code:addons/beesdoo_shift/models/cooperative_status.py:444
#, python-format
msgid "Subscribe Cooperator"
-msgstr "Subscribe Cooperator"
+msgstr "Inscrire le coopérateur"
#. 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"
+msgstr "Inscription à un régime de travail ou à un créneau"
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.super_coop_partner_inherited_view_form
@@ -1365,71 +1911,88 @@ msgstr "Subscribed shift ids"
#: 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:"
+msgstr "Supercoopérateur :"
#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_super_coop_id
#: 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"
+msgstr "Supercoopérateur"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_super
msgid "Super Cooperator"
-msgstr "Super Cooperator"
+msgstr "Supercoopérateur"
#. module: beesdoo_shift
#: selection:cooperative.status,status:0
msgid "Suspended"
-msgstr "Suspended"
+msgstr "Suspendu"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_added_task_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_task_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_shift_task_id
+msgid "Task"
+msgstr "Tâche"
#. module: beesdoo_shift
#: model:ir.actions.act_window,name:beesdoo_shift.action_task
-msgid "Task Action"
-msgstr "Task Action"
+msgid "Shifts"
+msgstr "Shifts"
#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_added_task_type_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_task_type_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_shift_task_type_id
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_task_type_id
msgid "Task Type"
-msgstr "Task Type"
+msgstr "Type de tâche"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:562
+#, python-format
+msgid "Task Type is missing for %s"
+msgstr "Le type de tâche est manquant pour %s"
#. 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"
+msgstr "Id du template de tâche"
#. 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"
+msgstr "Ids des templates de tâche"
#. module: beesdoo_shift
#: model:ir.ui.menu,name:beesdoo_shift.menu_template_top
msgid "Templates"
-msgstr "Modèles"
+msgstr "Templates"
#. module: beesdoo_shift
-#: code:addons/beesdoo_shift/models/cooperative_status.py:480
+#: code:addons/beesdoo_shift/models/cooperative_status.py:490
#: 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"
+msgstr "Exemption temporaire"
#. 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"
+msgstr "Fin de l'exemption temporaire"
#. 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"
+msgstr "Début de l'exemption temporaire"
#. module: beesdoo_shift
#: model:ir.model.fields,help:beesdoo_shift.field_res_users_website_url
@@ -1437,26 +2000,53 @@ 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
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:438
+#, python-format
+msgid "The sheet has already been marked as read."
+msgstr "La feuille de présence a déjà été marquée comme lue."
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:319
+#, python-format
+msgid "The sheet has already been validated and can't be edited."
+msgstr "La feuille de présence a déjà été validée et ne peut plus être modifiée."
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:543
#, 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"
+msgid "The sheet has already been validated."
+msgstr "La feuille de présence a déjà été validée."
#. 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"
+msgstr "Il n'y a plus de places disponibles pour ce 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.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_time_slot
+msgid "Time Slot"
+msgstr "Horaire"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_config_settings_attendance_sheet_generation_interval
+msgid "Time interval expressed in minutes"
+msgstr "Intervalle de temps exprimé en minutes"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_config_settings_attendance_sheet_generation_interval
+msgid "Time interval for attendance sheet generation"
+msgstr "Générer les feuilles de présences ... minutes avant le début des shifts"
+
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.coop_status_form_view
msgid "Timing information"
-msgstr "Timing information"
+msgstr "Informations sur le timing"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_today
@@ -1465,10 +2055,15 @@ msgid "Today"
msgstr "Aujourd'hui"
#. module: beesdoo_shift
-#: code:addons/beesdoo_shift/models/cooperative_status.py:463
+#: selection:beesdoo.shift.sheet,worker_nb_feedback:0
+msgid "Too many workers"
+msgstr "Trop de travailleurs"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/cooperative_status.py:473
#, python-format
msgid "Trigger Grace Delay"
-msgstr "Trigger Grace Delay"
+msgstr "Déclencher le délai de grâce"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_task_type_id
@@ -1480,7 +2075,7 @@ 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"
+msgstr "Id du Type"
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_shift_view_kanban
@@ -1494,15 +2089,28 @@ msgid "Unassigned"
msgstr "Non assigné"
#. module: beesdoo_shift
+#: selection:beesdoo.shift.shift,state:0
+msgid "Unconfirmed"
+msgstr "Non confirmé"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_message_unread
#: 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_sheet_message_unread_counter
#: 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.actions.act_window,name:beesdoo_shift.action_sheet_admin_annotated
+#: model:ir.ui.menu,name:beesdoo_shift.menu_sheet_admin_annotated
+msgid "Unread notes"
+msgstr "Notes non lues"
+
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.super_coop_partner_inherited_view_form
msgid "Unsubscribe"
@@ -1512,12 +2120,12 @@ msgstr "Se désabonner"
#: selection:cooperative.status,status:0
#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_unsubscribed
msgid "Unsubscribed"
-msgstr "Unsubscribed"
+msgstr "Gelé"
#. module: beesdoo_shift
#: selection:cooperative.status,status:0
msgid "Up to Date"
-msgstr "Up to Date"
+msgstr "A jour"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_history_user_id
@@ -1529,6 +2137,37 @@ msgstr "Utilisateur"
msgid "Users"
msgstr "Utilisateurs"
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.validate_attendance_sheet_form
+msgid "Validate"
+msgstr "Valider"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_view_form
+msgid "Validate Sheet"
+msgstr "Valider la feuille de présence"
+
+#. module: beesdoo_shift
+#: selection:beesdoo.shift.sheet,state:0
+msgid "Validated"
+msgstr "Validée"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validated_by
+msgid "Validated by"
+msgstr "Validée par"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.validate_attendance_sheet_form
+msgid "Validation"
+msgstr "Validation"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet__barcode_scanned
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_validate__barcode_scanned
+msgid "Value of the last barcode scanned."
+msgstr "Valeur du dernier code-barres scanné"
+
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_website_published
msgid "Visible in Website"
@@ -1538,15 +2177,23 @@ msgstr "Visible sur le site web"
#: 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"
+msgstr "Désire quitter la BEES"
#. module: beesdoo_shift
-#: code:addons/beesdoo_shift/models/planning.py:197
+#: code:addons/beesdoo_shift/models/planning.py:198
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_warning_regular_workers
#, python-format
msgid "Warning"
-msgstr "Warning"
+msgstr "Avertissement"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_worker_nb_feedback
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_worker_nb_feedback
+msgid "Was your team big enough ?"
+msgstr "L'équipe était-elle assez nombreuse ?"
#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_website_message_ids
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_website_message_ids
msgid "Website Messages"
msgstr "Messages du site web"
@@ -1567,6 +2214,7 @@ msgid "Website URL"
msgstr "URL du site"
#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_website_message_ids
#: 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"
@@ -1586,10 +2234,15 @@ msgstr "Mots clefs du site web"
msgid "Website meta title"
msgstr "Titre du site web"
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_week
+msgid "Week"
+msgstr "Semaine"
+
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_search
msgid "Week Day"
-msgstr "Week Day"
+msgstr "Jour de la semaine"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_line_wizard_id
@@ -1597,36 +2250,62 @@ 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"
+msgstr "Travailleurs"
+
+#. module: beesdoo_shift
+#: model:ir.actions.act_window,name:beesdoo_shift.action_worker
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_added_worker_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_worker_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_shift_worker_id
+msgid "Worker"
+msgstr "Travailleur"
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_kanban
msgid "Worker Number:"
-msgstr "Worker Number:"
+msgstr "Nombre de travailleurs :"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_worker_id
msgid "Worker id"
-msgstr "Worker id"
+msgstr "Id du travailleur"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_worker_name
msgid "Worker name"
-msgstr "Worker name"
+msgstr "Nom du travailleur"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:553
+#, python-format
+msgid "Worker name is missing for an added shift."
+msgstr "Le nom d'un des travailleurs manque pour un shift ajouté."
#. 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"
+msgstr "Nombre de travailleurs"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:330
+#, python-format
+msgid "Worker not found (invalid barcode or status)."
+msgstr "Aucun travailleur trouvé (code-barre ou statut invalide)."
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_shift_view_kanban
msgid "Worker:"
-msgstr "Worker:"
+msgstr "Travailleur :"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_added_working_mode
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_working_mode
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_shift_working_mode
+msgid "Working Mode"
+msgstr "Régime de travail"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_working_mode
@@ -1634,75 +2313,116 @@ msgstr "Worker:"
#: 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"
+msgstr "Régime de travail"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:567
+#, python-format
+msgid "Working mode is missing for %s"
+msgstr "Le régime de travail n'est pas indiqué pour %s"
#. module: beesdoo_shift
-#: code:addons/beesdoo_shift/models/task.py:20
+#: code:addons/beesdoo_shift/models/task.py:266
#, python-format
-msgid "You Cannot delete Task Stage"
-msgstr "You Cannot delete Task Stage"
+msgid "Working mode is not properly defined. Please check if the worker is subscribed"
+msgstr "Le régime de travail n'est pas défini. Veuillez regarder si le travailleur est inscrit."
#. module: beesdoo_shift
-#: code:addons/beesdoo_shift/models/cooperative_status.py:408
+#: code:addons/beesdoo_shift/models/cooperative_status.py:418
#: 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"
+msgstr "Vous ne pouvez créer qu'un seul journal par jour."
#. module: beesdoo_shift
-#: code:addons/beesdoo_shift/models/cooperative_status.py:353
+#: code:addons/beesdoo_shift/models/cooperative_status.py:363
#: 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"
+msgstr "Vous ne pouvez inscrire qu'un seul statut de coopérateur par coopérateur"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:304
+#, python-format
+msgid "You can't add the same worker more than once to an attendance sheet."
+msgstr "Vous ne pouvez pas ajouter le même travailleur plus d'une fois à une feuille de présence."
#. module: beesdoo_shift
-#: code:addons/beesdoo_shift/models/task.py:195
+#: code:addons/beesdoo_shift/models/task.py:225
#, 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"
+msgid "You cannot change to the status %s if no worker is defined for the shift"
+msgstr "Vous ne pouvez encoder le statut %s si aucun travailleur n'est défini pour le 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"
+msgstr "Vous ne pouvez pas encoder de vacances tant que les précédentes ne sont pas encore terminées."
#. 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"
+msgstr "Vous ne pouvez pas encoder d'exemption temporaire tant que la précédente n'est pas encore terminée."
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:325
+#, python-format
+msgid "A validated attendance sheet can't be modified"
+msgstr "Vous ne pouvez pas modifier une feuille de présence validée"
#. 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"
+msgstr "Vous ne pouvez réaliser cette opération sur vous-même."
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/task.py:89
+#, python-format
+msgid "Shift state of a future shift can't be set to 'present' or 'absent'."
+msgstr "Vous ne pouvez inscrire un shift futur comme 'present' ou 'absent'."
#. module: beesdoo_shift
-#: code:addons/beesdoo_shift/models/cooperative_status.py:415
+#: code:addons/beesdoo_shift/models/cooperative_status.py:425
#, python-format
msgid "You don't have the access to perform this action"
-msgstr "You don't have the access to perform this action"
+msgstr "Vous n'avez pas les accès nécessaires pour effectuer cette opération."
#. 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."
+msgstr "Vous n'avez pas les accès nécessaires pour effectuer cette opération."
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:103
+#, python-format
+msgid "A compensation number is required"
+msgstr "Vous devez choisir un nombre de compensations"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:546
+#, python-format
+msgid "Attendance sheet can only be validated once the shifts have started."
+msgstr "Vous devez attendre que le créneau ait débuté pour valider la feuille de présence."
#. 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"
+msgstr "Vous ne devriez pas réaliser d'extension manuelle tant que le délai de grâce n'a pas été déclenché."
#. 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"
+msgstr "Vous ne devriez pas réaliser d'extension manuelle durant le délai de grâce."
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_view_form
+msgid "You will be able to write notes about what you cannot encode here when clicking on 'validate'."
+msgstr "En cliquant sur 'Valider', tu pourras noter ce que tu ne peux pas encoder ici."
#. module: beesdoo_shift
#: model:mail.template,subject:beesdoo_shift.email_template_shift_summary
@@ -1830,7 +2550,7 @@ msgid "unknown"
msgstr "inconnu"
#. module: beesdoo_shift
-#: code:addons/beesdoo_shift/models/planning.py:141
+#: code:addons/beesdoo_shift/models/planning.py:142
#, 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
index b19a476..6d379c6 100644
--- a/beesdoo_shift/i18n/fr_BE.po
+++ b/beesdoo_shift/i18n/fr_BE.po
@@ -6,8 +6,8 @@ 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"
+"POT-Creation-Date: 2020-01-23 13:26+0000\n"
+"PO-Revision-Date: 2020-01-23 13:26+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@@ -16,55 +16,138 @@ msgstr ""
"Plural-Forms: \n"
#. module: beesdoo_shift
-#: model:mail.template,body_html:beesdoo_shift.email_template_non_validated_sheet
+#: code:addons/beesdoo_shift/wizard/validate_attendance_sheet.py:48
+#, python-format
msgid "\n"
-"
\n"
+"%s attended its shift as a normal one but was not expected. Something may be wrong in his/her personnal informations.\n"
+""
+msgstr "\n"
+"%s a effectué son shift comme un shift normal mais n'était pas attendu(e). Veuillez vérifier son inscription à ce créneau.\n"
+""
+
+#. module: beesdoo_shift
+#: model:mail.template,body_html:beesdoo_shift.email_template_non_attendance
+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"
+" % if object.replaced_id:\n"
+"
Hello ${object.replaced_id.name},\n"
"\n"
-"
\n"
-" "
-msgstr "\n"
-"
\n"
+"
You have been recorded as non-attended during your last shift (${format_tz(object.start_time,object.replaced_id.tz or 'Europe/Brussels','%d.%m.%Y - %H:%M')}),\n"
+" and you were supposed to replace ${object.worker_id.name}.\n"
+"
Your current status is \"${object.worker_id.cooperative_status_ids.get_status_value()}\".\n"
+" % endif\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"
+" % if not object.replaced_id:\n"
+"
Hello ${object.worker_id.name},
\n"
"\n"
-"
\n"
+"
You have been recorded as non-attended during your last shift (${format_tz(object.start_time,object.worker_id.tz or 'Europe/Brussels','%d.%m.%Y - %H:%M')}).\n"
+"
Your current status is \"${object.worker_id.cooperative_status_ids.get_status_value()}\".\n"
+" % endif\n"
+"\n"
+" % if object.worker_id.working_mode == 'regular':\n"
+" % if object.state == 'absent_0':\n"
+"
Super-cooperator assigned you 0 compensation, so you won't have any additionnal shift to do before your next regular shift.\n"
+" % endif\n"
+" % if object.state == 'absent_1':\n"
+"
Super-cooperator assigned you 1 compensation, so you have to attend one additionnal shift before your next regular shift.\n"
+" % endif\n"
+" % if object.state == 'absent_2':\n"
+"
Super-cooperator assigned you 2 compensations, so you have to attend two additionnal shifts before your next regular shift.\n"
+" % endif\n"
+" % endif\n"
+"\n"
+" % if object.worker_id.working_mode == 'irregular':\n"
+" Your shift counter is ${object.worker_id.cooperative_status_ids.sr}.\n"
+" You should be at a minimum of 0 before the ${object.worker_id.cooperative_status_ids.future_alert_date}.\n"
+" % endif\n"
+"\n"
+" If you have any question regarding this non-attendance, just answer this e-mail.\n"
+"
\n"
+" \n"
+"
Cooperatively yours, \n"
+" The Members' office volunteers
\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"
+"
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"
+"
Tu as été encodé(e) comme absent(e) à ton dernier shift (${format_tz(object.start_time,object.replaced_id.tz or 'Europe/Brussels','%d.%m.%Y - %H:%M')}), et tu devais remplacer ${object.worker_id.name}.\n"
+"
Ton statut est désormais \"${object.worker_id.cooperative_status_ids.get_status_value()}\".\n"
+" % endif\n"
"\n"
-"
Please contact us at ${object.worker_id.company_id.email} if you have any trouble attending the shift.\n"
+" % if not object.replaced_id:\n"
+"
Bonjour ${object.worker_id.name},
\n"
+"\n"
+"
Tu as été encodé(e) comme absent(e) à ton dernier shift (${format_tz(object.start_time,object.worker_id.tz or 'Europe/Brussels','%d.%m.%Y - %H:%M')}).\n"
+"
Ton statut est désormais \"${object.worker_id.cooperative_status_ids.get_status_value()}\".\n"
+" % endif\n"
+"\n"
+" % if object.worker_id.working_mode == 'regular':\n"
+" % if object.state == 'absent_0':\n"
+"
Ton/ta supercoop t'a attribué 0 compensation, tu n'as donc pas de shifts à réaliser avant ton prochain shift régulier.\n"
+" % endif\n"
+" % if object.state == 'absent_1':\n"
+"
Ton/ta supercoop t'a attribué 1 compensation, tu dois donc faire un shift avant ton prochain shift régulier.\n"
+" % endif\n"
+" % if object.state == 'absent_2':\n"
+"
Ton/ta supercoop t'a attribué 2 compensations, tu dois donc faire deux shifts avant ton prochain shift régulier.\n"
+" % endif\n"
+" % endif\n"
+"\n"
+" % if object.worker_id.working_mode == 'irregular':\n"
+" Ton compteur de shifts vaut ${object.worker_id.cooperative_status_ids.sr}.\n"
+" Il doit au minimum être à 0 avant le ${object.worker_id.cooperative_status_ids.future_alert_date}.\n"
+" % endif\n"
+"\n"
+" Si tu as une question à propos de cette absence, réponds à cet e-mail.\n"
"
\n"
-" \n"
-"
Sustainably yours,
\n"
-"
${object.worker_id.company_id.name}.
\n"
+" \n"
+"
Coopérativement, \n"
+" Les bénévoles du Bureau des Membres
\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"
+" ${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"
+" ${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"
+" ${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"
@@ -82,62 +165,41 @@ msgid "\n"
" %endif\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"
-"
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"
+" "
+msgstr "\n"
+"
\n"
"\n"
-"
En cas d'indisponibilité, vous pouvez nous contacter à l'adresse suivante : ${object.worker_id.company_id.email}.\n"
+"
${object.day}\n"
+"
La feuille de présence pour ${object.time_slot} n'est pas validée.\n"
+"
Veuillez la valider le plus rapidement possible pour que les statuts des travailleurs puissent être adaptés.\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"
-"
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"
+"
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"
-"
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"
+"
Please contact us at ${object.worker_id.company_id.email} if you have any trouble attending the shift.\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"
+"
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"
-"
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"
+"
En cas d'indisponibilité, vous pouvez nous contacter à l'adresse suivante : ${object.worker_id.company_id.email}.\n"
"
\n"
-" \n"
-"
Sustainably yours,
\n"
-"
${object.worker_id.company_id.name}.
\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"
+" ${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"
+" ${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"
+" ${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"
@@ -206,32 +264,56 @@ msgstr "\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"
"
\n"
" %endif\n"
"
\n"
" "
#. module: beesdoo_shift
-#: code:addons/beesdoo_shift/models/planning.py:192
+#: code:addons/beesdoo_shift/models/planning.py:193
#, python-format
msgid " is already assigned to "
-msgstr " is already assigned to "
+msgstr " est déjà assigné à "
#. 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
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:519
+#, python-format
+msgid "%s (added)"
+msgstr "%s (added)"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:359
+#, python-format
+msgid "%s is %s and should be regular or irregular."
+msgstr "%s est %s et devrait être régulier ou volant."
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:374
+#, python-format
+msgid "%s was expected as replaced."
+msgstr "%s devait être remplacé."
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/task.py:145
+#, python-format
+msgid "'Now' must be a datetime."
+msgstr "'Now' must be a datetime."
+
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search
msgid "4 next days"
-msgstr "4 next days"
+msgstr "4 prochains jours"
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_kanban
@@ -241,32 +323,76 @@ msgstr " \n"
" Recurring Workers"
#. module: beesdoo_shift
+#: selection:beesdoo.shift.sheet.added,state:0
+#: selection:beesdoo.shift.sheet.expected,state:0
+#: selection:beesdoo.shift.sheet.shift,state:0
+msgid "Absent"
+msgstr "Absent"
+
+#. module: beesdoo_shift
+#: selection:beesdoo.shift.shift,state:0
+msgid "Absent - 0 compensation"
+msgstr "Absent - 0 compensation"
+
+#. module: beesdoo_shift
+#: selection:beesdoo.shift.shift,state:0
+msgid "Absent - 1 compensation"
+msgstr "Absent - 1 compensation"
+
+#. module: beesdoo_shift
+#: selection:beesdoo.shift.shift,state:0
+msgid "Absent - 2 compensations"
+msgstr "Absent - 2 compensations"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_message_needaction
#: 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_sheet_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.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_active_sheet
+msgid "Active sheet"
+msgstr "Active sheet"
+
#. module: beesdoo_shift
#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_sheet_added
msgid "Added Shift"
-msgstr "Added Shift"
+msgstr "Shift ajouté"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_added_shift_ids
+msgid "Added Shifts"
+msgstr "Shifts ajoutés"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_view_form
+msgid "Added workers"
+msgstr "Travailleurs ajoutés"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.validate_attendance_sheet_form
+msgid "Additional informations"
+msgstr "Informations supplémentaires"
#. 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"
+msgstr "Nombre de jours ajoutés à l'extension automatique, 5 signifiant que vous avez un total de 15 jours d'extension si le nombre par défaut est 10"
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.journal_form_view
-msgid "Affected cooperator"
-msgstr "Affected cooperator"
+msgid "Assigned cooperator"
+msgstr "Cooperator affecté"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_age
@@ -276,43 +402,120 @@ 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"
+msgstr "Début d'alerte"
#. module: beesdoo_shift
#: selection:cooperative.status,status:0
msgid "Alerte"
msgstr "Alerte"
+#. module: beesdoo_shift
+#: model:ir.actions.act_window,name:beesdoo_shift.action_sheet_admin_list
+#: model:ir.ui.menu,name:beesdoo_shift.menu_sheet_admin_list
+msgid "All sheets"
+msgstr "Toutes les feuilles"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_view_search
+msgid "Annotated (read)"
+msgstr "Annotées (lues)"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_view_search
+msgid "Annotated (unread)"
+msgstr "Annotées (non-lues)"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.shift_settings_view_form
+msgid "Apply"
+msgstr "Appliquer"
+
#. 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.ui.view,arch_db:beesdoo_shift.sheet_view_search
+msgid "Archived"
+msgstr "Archivé"
+
#. 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"
+msgstr "Etes-vous sûr de vouloir désinscrire ce coopérateur ?"
#. 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 ?"
+msgstr "Etes-vous sûr de vouloir désinscrire ce coopérateur ?"
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search
msgid "Assigned"
-msgstr "Assigned"
+msgstr "Assigné"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_added_attendance_sheet_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_attendance_sheet_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_shift_attendance_sheet_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_attendance_sheet_id
+msgid "Attendance Sheet"
+msgstr "Feuille de présence"
+
+#. module: beesdoo_shift
+#: model:res.groups,name:beesdoo_shift.group_shift_attendance_sheet
+msgid "Attendance Sheet Generic Access"
+msgstr "Feuilles de présence"
+
+#. module: beesdoo_shift
+#: model:ir.ui.menu,name:beesdoo_shift.menu_sheet_top
+msgid "Attendance Sheets"
+msgstr "Feuilles de présence"
#. module: beesdoo_shift
#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_sheet
msgid "Attendance sheet"
-msgstr "Attendance sheet"
+msgstr "Feuille de présence"
+
+#. module: beesdoo_shift
+#: selection:beesdoo.shift.shift,state:0
+msgid "Attended"
+msgstr "Présent"
#. 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"
+msgstr "Extension auto"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_barcode
+msgid "Barcode"
+msgstr "Code-barre"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet__barcode_scanned
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate__barcode_scanned
+msgid "Barcode Scanned"
+msgstr "Code-barre scanné"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_view_form
+msgid "Beware : a validated sheet cannot be edited anymore and you won't be able to add any latecomers. The counters of those who didn't attend will be updated and they will get warning emails."
+msgstr "Attention : une feuille de présence validée ne peut plus être modifiée et tu ne pourras pas ajouter de retardataires. Le compteur des travailleurs absents sera mis à jour et ils recevront et un e-mail d'avertissement."
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:352
+#, python-format
+msgid "Beware, you are recorded as resigning. Please contact member's office if this is incorrect. Thank you."
+msgstr "Attention, ton compte est "en démission". Contacte le Bureau des Membres si c'est incorrect. Merci"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:342
+#, python-format
+msgid "Beware, your account is frozen because your shift counter is at %s. Please contact Members Office to unfreeze it. If you want to attend this shift, your supercoop can write your name in the notes field during validation."
+msgstr "Attention, ton compte est gelé parce que ton compteur est à %s. Contacte le Bureau des Membres pour dégeler ton compte. Si tu souhaites participer à ce shift, ton supercoop peut écrire ton nom dans la case "Information concernant les présences" au moment de la validation."
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_calendar
@@ -323,40 +526,52 @@ 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"
+msgstr "Peut faire ses courses"
#. 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.shift_settings_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
+#: model:ir.ui.view,arch_db:beesdoo_shift.validate_attendance_sheet_form
msgid "Cancel"
msgstr "Annuler"
+#. module: beesdoo_shift
+#: selection:beesdoo.shift.shift,state:0
+msgid "Cancelled"
+msgstr "Annulé"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_card_support
+msgid "Card support"
+msgstr "Support des cartes de membre"
+
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_history_change
msgid "Change"
-msgstr "Change"
+msgstr "Changement"
#. module: beesdoo_shift
#: model:ir.actions.act_window,name:beesdoo_shift.act_assign_new_super_coop
msgid "Change Super Coop"
-msgstr "Change Super Coop"
+msgstr "Changer de supercoopérateur"
#. 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"
+msgstr "Vérifie le nom d'utilisateur et valide la feuille de présence.\n"
+" Inutile pour les utilisateurs appartenant à 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."
+msgstr "Cocher cette case si le coopérateur n'est plus un membre effectif."
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_child_eater_ids
@@ -366,16 +581,10 @@ 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"
+msgstr "Nettoyer l'historique"
#. 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"
@@ -384,20 +593,49 @@ msgstr "Couleur"
msgid "Color Index"
msgstr "Couleur"
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_feedback
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_feedback
+msgid "Comments about the shift"
+msgstr "Commentaires à propos du shift"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:582
+#, python-format
+msgid "Compensation number is missing for %s"
+msgstr "Veuillez entrer un nombre de compensations pour %s"
+
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_is_compensation
msgid "Compensation shift"
-msgstr "Compensation shift"
+msgstr "Shift de compensation"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_added_is_compensation
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_is_compensation
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_shift_is_compensation
+msgid "Compensation shift ?"
+msgstr "Shift de compensation ?"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_compensation_no
+msgid "Compensations"
+msgstr "Compensations"
#. 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"
+msgid "Compensation shifts counter"
+msgstr "Compteur shifts 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"
+msgid "Regular shifts counter"
+msgstr "Compteur shifts réguliers"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_week
+msgid "Computed from planning names"
+msgstr "Calculé à partir du nom du planning"
#. module: beesdoo_shift
#: model:ir.ui.menu,name:beesdoo_shift.menu_configuration_top
@@ -415,27 +653,32 @@ msgstr "Configuration"
msgid "Confirm"
msgstr "Confirmer"
+#. module: beesdoo_shift
+#: selection:beesdoo.shift.shift,state:0
+msgid "Confirmed"
+msgstr "Confirmé"
+
#. module: beesdoo_shift
#: model:res.groups,name:beesdoo_shift.group_cooperative_admin
msgid "Cooperative Admin"
-msgstr "Cooperative Admin"
+msgstr "Shifts - Administrateur"
#. 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"
+msgstr "Statut du coopérateur"
#. 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"
+msgstr "Ids statut de coopérateur"
#. module: beesdoo_shift
#: model:ir.actions.act_window,name:beesdoo_shift.action_coop_status
msgid "Cooperator Status"
-msgstr "Cooperator Status"
+msgstr "Statut du coopérateur"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_cooperator_type
@@ -451,45 +694,49 @@ msgstr "Type de coopérateur"
#: 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"
+msgstr "Coopérateur"
#. 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"
+msgstr "Copie d'un shift réel dans une feuille de présence"
#. module: beesdoo_shift
#: selection:cooperative.status.history,type:0
msgid "Counter Change"
-msgstr "Counter Change"
+msgstr "Changement de compteur"
#. module: beesdoo_shift
#: model:ir.actions.act_window,name:beesdoo_shift.action_journal
msgid "Counter Journal"
-msgstr "Counter Journal"
+msgstr "Journal des compteurs"
#. module: beesdoo_shift
#: model:ir.ui.menu,name:beesdoo_shift.menu_journal
msgid "Counter Update Journal"
-msgstr "Counter Update Journal"
+msgstr "Journal de mise à jour des compteurs"
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.coop_status_form_view
msgid "Counter and Status"
-msgstr "Counter and Status"
+msgstr "Compteur et statut"
#. 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_config_settings_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_sheet_added_create_uid
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_create_uid
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_create_uid
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_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
@@ -505,13 +752,17 @@ msgstr "Créé par"
#: 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_config_settings_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_sheet_added_create_date
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_create_date
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_create_date
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_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
@@ -525,12 +776,18 @@ 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."
+msgstr "Le travailleur actual a plus d'un seul shift, l'inscription à un nouveau créneau supprimera tous ses shifts précédents."
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_generation_view_form
msgid "Daily Schedule"
-msgstr "Daily Schedule"
+msgstr "Agenda journalier"
+
+#. module: beesdoo_shift
+#: model:ir.actions.act_window,name:beesdoo_shift.action_sheet_daily
+#: model:ir.ui.menu,name:beesdoo_shift.menu_sheet
+msgid "Daily Feuilles de présence"
+msgstr "Feuilles de présence du jour"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_journal_date
@@ -541,29 +798,47 @@ 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"
+msgstr "Date de la session d'information"
#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_message_last_post
#: 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_sheet_day
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_day_nb_id
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_view_search
#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search
msgid "Day"
msgstr "Jour"
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_day_abbrevation
+msgid "Day Abbrevation"
+msgstr "Abbrévation du 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"
+msgstr "Numéro du jour"
#. 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"
+msgstr "Ids des jours"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_config_settings_default_task_type_id
+msgid "Default Task Type"
+msgstr "Type de tâche par défaut"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_config_settings_default_task_type_id
+msgid "Default task type for attendance sheet pre-filling"
+msgstr "Type de shift par défaut pour le remplissage automatique des feuilles de présence"
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_kanban
@@ -587,13 +862,18 @@ msgstr "Description"
#: 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_config_settings_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_sheet_added_display_name
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_display_name
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_display_name
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_shift_display_name
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_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
@@ -612,24 +892,22 @@ 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"
+msgstr "Durée en heures"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_eater
msgid "Eater/Worker"
-msgstr "Eater/Worker"
+msgstr "Mangeur/Travailleur"
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_shift_view_kanban
msgid "Edit Shift"
-msgstr "Edit Shift"
+msgstr "Editer le 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"
+msgstr "Editer le modèle de shift\n"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_effective_date
@@ -641,22 +919,32 @@ msgstr "Date effective"
msgid "Email Thread"
msgstr "Discussion par courriel"
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_end_time
+msgid "End Time"
+msgstr "Date et horaire de fin"
+
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_end_date
msgid "End date"
-msgstr "End date"
+msgstr "Fin"
#. 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)"
+msgstr "Fin des vacances (inclue)"
#. 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"
+msgstr "Date et horaire de fin"
+
+#. module: beesdoo_shift
+#: selection:beesdoo.shift.sheet,worker_nb_feedback:0
+msgid "Enough workers"
+msgstr " Assez de travailleurs"
#. module: beesdoo_shift
#: model:ir.actions.act_window,name:beesdoo_shift.action_exempt_reason
@@ -674,12 +962,23 @@ msgstr "Raison d'exemption"
#: selection:cooperative.status,status:0
#: selection:cooperative.status,working_mode:0
msgid "Exempted"
-msgstr "Exempted"
+msgstr "Exempté"
#. module: beesdoo_shift
#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_sheet_expected
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_expected_view_form
msgid "Expected Shift"
-msgstr "Expected Shift"
+msgstr "Shift attendu"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_shift_ids
+msgid "Expected Shifts"
+msgstr "Shifts attendus"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_view_form
+msgid "Expected workers"
+msgstr "Travailleurs attendus"
#. module: beesdoo_shift
#: selection:cooperative.status,status:0
@@ -689,18 +988,28 @@ 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"
+msgstr "Nombre de jours d'extension"
#. 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"
+msgstr "Début d'extension"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_extension_extension_days
msgid "Extension days"
-msgstr "Extension days"
+msgstr "Jours d'extension"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_view_form
+msgid "Feedback"
+msgstr "Retour"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_view_search
+msgid "Feedback on number of workers"
+msgstr "Retour sur le nombre de travailleurs"
#. module: beesdoo_shift
#: model:ir.model.fields,help:beesdoo_shift.field_cooperative_status_today
@@ -710,24 +1019,27 @@ msgstr "Field that allow to compute field and store them even if they are based
#. 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"
+msgstr "Premier jour du 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"
+msgstr "A suivi une session d'information"
#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_message_follower_ids
#: 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_sheet_message_channel_ids
#: 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_sheet_message_partner_ids
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_partner_ids
msgid "Followers (Partners)"
msgstr "Abonnés (Partenaires)"
@@ -735,60 +1047,83 @@ 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"
+msgstr "Pour test"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_first_name
+msgid "Frist Name (Legacy)"
+msgstr "First Name (Legacy)"
#. 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..."
+msgstr "De 1 à N. Quand vous créerez le planning, le jour 1 sera la date de début, jour 2 la suivante, etc."
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_added_worker_name
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_worker_name
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_shift_worker_name
+msgid "Full Name"
+msgstr "Nom Complet"
#. 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"
+msgstr "Prochaine date d'alerte"
#. 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.shift_settings_view_form
+msgid "General Settings"
+msgstr "Paramètres Généraux"
+
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.coop_status_form_view
msgid "General information"
-msgstr "General information"
+msgstr "Informations générales"
#. module: beesdoo_shift
#: model:ir.actions.act_window,name:beesdoo_shift.action_generate_shift_template_wizard
msgid "Generate Shift Template"
-msgstr "Generate Shift Template"
+msgstr "Générer le template de shifts"
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.type_view_form
msgid "Generate shift Templates"
-msgstr "Generate shift Templates"
+msgstr "Générer les templates de shift"
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.planning_view_form
msgid "Generate shifts"
-msgstr "Generate shifts"
+msgstr "Génerer les shifts"
#. module: beesdoo_shift
#: code:addons/beesdoo_shift/wizard/instanciate_planning.py:20
#, python-format
msgid "Generated Shift"
-msgstr "Generated Shift"
+msgstr "Shift généré"
#. module: beesdoo_shift
#: code:addons/beesdoo_shift/wizard/batch_template.py:37
#, python-format
msgid "Generated Shift Template"
-msgstr "Generated Shift Template"
+msgstr "Modèle de shifts généré"
#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_view_search
#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search
msgid "Group By"
msgstr "Regrouper par"
+#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_is_read
+msgid "Has notes been read by an administrator ?"
+msgstr "La note a-t-elle été lue par un administrateur ?"
+
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.coop_status_form_view
msgid "History"
@@ -802,17 +1137,17 @@ msgstr "History ids"
#. module: beesdoo_shift
#: selection:cooperative.status,status:0
msgid "Holidays"
-msgstr "Holidays"
+msgstr "Vacances"
#. 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"
+msgstr "Date de fin des vacances"
#. 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"
+msgstr "Début des vacances"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_assign_super_coop_id
@@ -820,13 +1155,18 @@ msgstr "Holidays Start Day"
#: 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_config_settings_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_sheet_added_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_shift_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_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
@@ -838,58 +1178,82 @@ msgid "ID"
msgstr "ID"
#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_message_unread
#: 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."
+msgstr "Si elle est cochée, de nouveaux messages demandent votre attention."
#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_message_needaction
#: 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,help:beesdoo_shift.field_beesdoo_shift_sheet_max_worker_no
+msgid "Indicative maximum number of workers."
+msgstr "Nombre de travailleurs maximal indicatif."
+
#. 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 ?"
+msgstr "Session d'information ?"
#. 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"
+msgstr "Date de la session d'information"
#. module: beesdoo_shift
#: model:ir.actions.act_window,name:beesdoo_shift.action_generate_shift_wizard
msgid "Instanciate Planning Action"
-msgstr "Instanciate Planning Action"
+msgstr "Instancier 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"
+msgstr "Compteur d'absences (volant)"
#. 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"
+msgstr "Date d'absence (volant)"
#. 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"
+msgstr "Date de début (volant)"
#. module: beesdoo_shift
#: selection:beesdoo.shift.subscribe,working_mode:0
#: selection:cooperative.status,working_mode:0
msgid "Irregular worker"
-msgstr "Irregular worker"
+msgstr "Travailleur volant"
#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/cooperative_status.py:207
+#, python-format
+msgid "Irregular workers must have an irregular start date."
+msgstr "Les travailleurs volants doivent avoir une date de début."
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_message_is_follower
#: 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.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_is_annotated
+msgid "Is annotated"
+msgstr "Est annotée"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_validate_warning_regular_workers
+msgid "Is any regular worker doing its regular shift as an added one ?"
+msgstr "Est-ce que le travailleur régulier réalise son shift habituel sans être attendu ?"
+
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search
msgid "J-1"
@@ -916,6 +1280,7 @@ msgid "J-5"
msgstr "J-5"
#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_message_last_post
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_last_post
msgid "Last Message Date"
msgstr "Date du dernier message"
@@ -926,13 +1291,18 @@ msgstr "Date du dernier message"
#: 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_config_settings___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_sheet___last_update
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_added___last_update
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected___last_update
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_shift___last_update
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate___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
@@ -943,18 +1313,27 @@ msgstr "Date du dernier message"
msgid "Last Modified on"
msgstr "Dernière modification le"
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_last_name
+msgid "Last Name (Legacy)"
+msgstr "Last Name (Legacy)"
+
#. 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_config_settings_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_sheet_added_write_uid
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_write_uid
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_write_uid
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_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
@@ -970,13 +1349,17 @@ msgstr "Mis à jour par"
#: 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_config_settings_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_sheet_added_write_date
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_write_date
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_write_date
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_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
@@ -990,41 +1373,65 @@ 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"
+msgstr "Dernière impression le"
#. 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"
+msgstr "Ids des lignes"
#. module: beesdoo_shift
-#: code:addons/beesdoo_shift/models/cooperative_status.py:451
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_login
+#: model:ir.ui.view,arch_db:beesdoo_shift.validate_attendance_sheet_form
+msgid "Login"
+msgstr "Identifiant"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/cooperative_status.py:461
#: model:ir.ui.view,arch_db:beesdoo_shift.super_coop_partner_inherited_view_form
#, python-format
msgid "Manual Extension"
-msgstr "Manual Extension"
+msgstr "Extension manuelle"
#. module: beesdoo_shift
#: model:ir.model.fields,help:beesdoo_shift.field_cooperative_status_unsubscribed
msgid "Manually unsubscribed"
-msgstr "Manually unsubscribed"
+msgstr "Manuellement gelé"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_is_read
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_view_form
+msgid "Mark as read"
+msgstr "Marquer comme lu"
#. 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"
+msgstr "Nombre maximal de travailleur pour cette tâche"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_max_worker_no
+msgid "Maximum number of workers"
+msgstr "Maximum de travailleurs"
#. 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"
+msgstr "Ids des cartes de membre"
#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_message_ids
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_ids
msgid "Messages"
msgstr "Messages"
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:333
+#, python-format
+msgid "Multiple workers are corresponding this barcode."
+msgstr "Plusieurs travailleurs correspondent à ce code-barre."
+
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search
msgid "My Shift"
@@ -1034,13 +1441,13 @@ msgstr "Mes shifts"
#: 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"
+msgstr "Les shifts de mon équipe"
#. 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_sheet_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
@@ -1050,24 +1457,60 @@ 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"
+msgstr "Nouveau Supercoopérateur"
#. 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"
+msgstr "Prochaine date de décompte"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:220
+#: sql_constraint:beesdoo.shift.sheet:0
+#, python-format
+msgid "Non-annotated sheets can't be marked as read."
+msgstr "Les feuilles de présences non-annotées ne peuvent pas êtres marquées comme lues."
#. 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."
+msgstr "Absence à votre dernier shift."
+
+#. module: beesdoo_shift
+#: model:ir.actions.act_window,name:beesdoo_shift.action_sheet_admin_non_validated
+#: model:ir.ui.menu,name:beesdoo_shift.menu_sheet_admin_non_validated
+msgid "Non-validated sheets"
+msgstr "Non-validées"
+
+#. module: beesdoo_shift
+#: selection:beesdoo.shift.sheet,state:0
+msgid "Not Validated"
+msgstr "Non validée"
+
+#. module: beesdoo_shift
+#: selection:beesdoo.shift.sheet,worker_nb_feedback:0
+msgid "Not enough workers"
+msgstr "Pas assez de travailleurs"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_notes
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_notes
+msgid "Notes"
+msgstr "Notes pour le Bureau des Membres"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_notes
+msgid "Notes about the attendance for the Members Office"
+msgstr "Information concernant les présences"
#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_message_needaction_counter
#: 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_sheet_message_needaction_counter
#: 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"
@@ -1075,9 +1518,10 @@ 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"
+msgstr "Nombre de shifts"
#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_message_unread_counter
#: 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"
@@ -1085,32 +1529,50 @@ 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"
+msgstr "Nombre de travailleurs"
#. 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,help:beesdoo_shift.field_beesdoo_shift_sheet_added_is_compensation
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_expected_is_compensation
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_shift_is_compensation
+msgid "Only for regular workers"
+msgstr "Seulement pour les travailleurs réguliers"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/wizard/validate_attendance_sheet.py:110
+#, python-format
+msgid "Only super-cooperators and administrators can validate attendance sheets."
+msgstr "Seuls les supercoopérateurs et les administrateurs peuvent valider les feuilles de présence."
+
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_parent_barcode
msgid "Parent Barcode"
-msgstr "Parent Barcode"
+msgstr "Code-barre du parent"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_parent_eater_id
msgid "Parent Worker"
-msgstr "Parent Worker"
+msgstr "Parent du travailleur"
#. module: beesdoo_shift
#: model:ir.model,name:beesdoo_shift.model_res_partner
msgid "Partner"
msgstr "Partenaire"
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_password
+msgid "Password"
+msgstr "Mot de passe"
+
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_search
msgid "Place Available"
-msgstr "Place Available"
+msgstr "Place disponible"
#. module: beesdoo_shift
#: model:ir.ui.menu,name:beesdoo_shift.menu_task_top
@@ -1127,12 +1589,12 @@ msgstr "Planning Action"
#. module: beesdoo_shift
#: model:res.groups,name:beesdoo_shift.group_planning_management
msgid "Planning Management"
-msgstr "Planning Management"
+msgstr "Shifts - Planning"
#. module: beesdoo_shift
#: model:ir.ui.menu,name:beesdoo_shift.menu_planning
msgid "Planning Week"
-msgstr "Planning Week"
+msgstr "Planning par semaines"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_planning_planning_id
@@ -1140,12 +1602,37 @@ msgstr "Planning Week"
#: 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"
+msgstr "Id du planning"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/wizard/validate_attendance_sheet.py:99
+#, python-format
+msgid "Please enter your login."
+msgstr "Veuillez entrer votre login."
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:590
+#, python-format
+msgid "Please give your feedback about the number of workers."
+msgstr "Veuillez remplir votre retour concernant le nombre de travailleurs."
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/wizard/validate_attendance_sheet.py:94
+#, python-format
+msgid "Please set a correct barcode."
+msgstr "Veuillez entrer un code-barre valide."
+
+#. module: beesdoo_shift
+#: selection:beesdoo.shift.sheet.added,state:0
+#: selection:beesdoo.shift.sheet.expected,state:0
+#: selection:beesdoo.shift.sheet.shift,state:0
+msgid "Present"
+msgstr "Présent"
#. 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?"
+msgstr "Imprimer la carte BEES ?"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_website_private
@@ -1155,71 +1642,86 @@ 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"
+msgstr "Lecture seule 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"
+msgstr "Travailleur récurrent assigné"
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_form
msgid "Recurring Workers"
-msgstr "Recurring Workers"
+msgstr "Travailleurs récurrents"
#. module: beesdoo_shift
-#: code:addons/beesdoo_shift/models/cooperative_status.py:469
+#: code:addons/beesdoo_shift/models/cooperative_status.py:479
#, python-format
msgid "Register Holiday"
-msgstr "Register Holiday"
+msgstr "Enregistrer des vacances"
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.super_coop_partner_inherited_view_form
msgid "Register Holidays"
-msgstr "Register Holidays"
+msgstr "Enregistrer des vacances"
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_shift_view_kanban
msgid "Regular Shift"
-msgstr "Regular Shift"
+msgstr "Shift régulier"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_is_regular
msgid "Regular shift"
-msgstr "Regular shift"
+msgstr "Shift régulier"
#. module: beesdoo_shift
#: selection:beesdoo.shift.subscribe,working_mode:0
#: selection:cooperative.status,working_mode:0
msgid "Regular worker"
-msgstr "Regular worker"
+msgstr "Travailleur régulier"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_remaining_worker
msgid "Remaining Place"
-msgstr "Remaining Place"
+msgstr "Places restantes"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_replaced_id
msgid "Replaced id"
-msgstr "Replaced id"
+msgstr "Id du remplaçant"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_replacement_worker_id
+msgid "Replacement Worker"
+msgstr "Travailleur remplaçant"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_expected_replacement_worker_id
+msgid "Replacement Worker (must be regular)"
+msgstr "Travailleur remplaçant (doit être régulier)"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.task_shift_view_kanban
+msgid "Replacement worker:"
+msgstr "Travailleur remplaçant:"
#. 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"
+msgstr "Réinitialiser le compteur de compensations"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_reset_counter
msgid "Reset counter"
-msgstr "Reset counter"
+msgstr "Réinitialiser le compteur"
#. 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"
+msgstr "Démissionnaire"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_revert_info
@@ -1229,95 +1731,139 @@ 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"
+msgstr "Lancer à nouveau pour aujourd'hui"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.validate_attendance_sheet_form
+msgid "Save"
+msgstr "Sauvegarder"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_config_settings_card_support
+msgid "Scan cooperators cards instead of login for sheets validation"
+msgstr "Scanner les cartes de membres à la place du login pour la validation des feuilles de présence."
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.validate_attendance_sheet_form
+msgid "Scan your card"
+msgstr "Scannez votre carte"
#. 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"
+#: model:ir.actions.act_window,name:beesdoo_shift.action_shift_settings
+#: model:ir.ui.menu,name:beesdoo_shift.menu_shift_settings
+#: model:ir.ui.view,arch_db:beesdoo_shift.shift_settings_view_form
+msgid "Settings"
+msgstr "Configuration"
#. 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"
+#: model:ir.ui.menu,name:beesdoo_shift.menu_task
+msgid "Shifts"
+msgstr "Shifts"
#. module: beesdoo_shift
#: model:ir.ui.menu,name:beesdoo_shift.menu_configuration_day
msgid "Shift Day"
-msgstr "Shift Day"
+msgstr "Jours des shifts"
#. 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"
+msgstr "Gestion des shifts"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_added_state
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_state
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_shift_state
+msgid "Shift State"
+msgstr "État du shift"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:574
+#, python-format
+msgid "Shift State is missing for %s"
+msgstr "État du shift manquant pour %s"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:557
+#, python-format
+msgid "Shift State is missing or wrong for %s"
+msgstr "État du shift manquant ou incorrect pour %s"
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search
msgid "Shift Template"
-msgstr "Shift Template"
+msgstr "Template de shifts"
#. 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"
+msgstr "Type de shifts"
+
+#. module: beesdoo_shift
+#: model:res.groups,name:beesdoo_shift.group_shift_attendance
+msgid "Shift and Worker Access"
+msgstr "Shifts - Présences"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_shift_id
msgid "Shift id"
-msgstr "Shift id"
+msgstr "Id du shift"
#. 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"
+msgstr "Ids des shifts"
#. 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"
+msgstr "Planning"
#. 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"
+msgstr "Date et horaire de début"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_start_time
+msgid "Start Time"
+msgstr "Date et horaire 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"
+msgstr "Début"
#. 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"
+msgstr "Date de début de l'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"
+msgstr "Date de début des vacances"
#. 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"
+msgstr "Date et horaire de début"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_state
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_state
+msgid "State"
+msgstr "État"
#. module: beesdoo_shift
#: model:ir.ui.menu,name:beesdoo_shift.menu_status_top
@@ -1328,12 +1874,12 @@ msgstr "Statut"
#. module: beesdoo_shift
#: selection:cooperative.status.history,type:0
msgid "Status Change"
-msgstr "Status Change"
+msgstr "Changement de statut"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_history_status_id
msgid "Status id"
-msgstr "Status id"
+msgstr "Id du statut"
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_shift_view_kanban
@@ -1341,15 +1887,15 @@ msgid "Status:"
msgstr "Statut :"
#. module: beesdoo_shift
-#: code:addons/beesdoo_shift/models/cooperative_status.py:434
+#: code:addons/beesdoo_shift/models/cooperative_status.py:444
#, python-format
msgid "Subscribe Cooperator"
-msgstr "Subscribe Cooperator"
+msgstr "Inscrire le coopérateur"
#. 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"
+msgstr "Inscription à un régime de travail ou à un créneau"
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.super_coop_partner_inherited_view_form
@@ -1365,71 +1911,88 @@ msgstr "Subscribed shift ids"
#: 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:"
+msgstr "Supercoopérateur :"
#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_super_coop_id
#: 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"
+msgstr "Supercoopérateur"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_super
msgid "Super Cooperator"
-msgstr "Super Cooperator"
+msgstr "Supercoopérateur"
#. module: beesdoo_shift
#: selection:cooperative.status,status:0
msgid "Suspended"
-msgstr "Suspended"
+msgstr "Suspendu"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_added_task_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_task_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_shift_task_id
+msgid "Task"
+msgstr "Tâche"
#. module: beesdoo_shift
#: model:ir.actions.act_window,name:beesdoo_shift.action_task
-msgid "Task Action"
-msgstr "Task Action"
+msgid "Shifts"
+msgstr "Shifts"
#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_added_task_type_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_task_type_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_shift_task_type_id
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_task_type_id
msgid "Task Type"
-msgstr "Task Type"
+msgstr "Type de tâche"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:562
+#, python-format
+msgid "Task Type is missing for %s"
+msgstr "Le type de tâche est manquant pour %s"
#. 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"
+msgstr "Id du template de tâche"
#. 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"
+msgstr "Ids des templates de tâche"
#. module: beesdoo_shift
#: model:ir.ui.menu,name:beesdoo_shift.menu_template_top
msgid "Templates"
-msgstr "Modèles"
+msgstr "Templates"
#. module: beesdoo_shift
-#: code:addons/beesdoo_shift/models/cooperative_status.py:480
+#: code:addons/beesdoo_shift/models/cooperative_status.py:490
#: 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"
+msgstr "Exemption temporaire"
#. 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"
+msgstr "Fin de l'exemption temporaire"
#. 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"
+msgstr "Début de l'exemption temporaire"
#. module: beesdoo_shift
#: model:ir.model.fields,help:beesdoo_shift.field_res_users_website_url
@@ -1437,26 +2000,53 @@ 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
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:438
+#, python-format
+msgid "The sheet has already been marked as read."
+msgstr "La feuille de présence a déjà été marquée comme lue."
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:319
+#, python-format
+msgid "The sheet has already been validated and can't be edited."
+msgstr "La feuille de présence a déjà été validée et ne peut plus être modifiée."
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:543
#, 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"
+msgid "The sheet has already been validated."
+msgstr "La feuille de présence a déjà été validée."
#. 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"
+msgstr "Il n'y a plus de places disponibles pour ce 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.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_time_slot
+msgid "Time Slot"
+msgstr "Horaire"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_config_settings_attendance_sheet_generation_interval
+msgid "Time interval expressed in minutes"
+msgstr "Intervalle de temps exprimé en minutes"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_config_settings_attendance_sheet_generation_interval
+msgid "Time interval for attendance sheet generation"
+msgstr "Générer les feuilles de présences ... minutes avant le début des shifts"
+
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.coop_status_form_view
msgid "Timing information"
-msgstr "Timing information"
+msgstr "Informations sur le timing"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_today
@@ -1465,10 +2055,15 @@ msgid "Today"
msgstr "Aujourd'hui"
#. module: beesdoo_shift
-#: code:addons/beesdoo_shift/models/cooperative_status.py:463
+#: selection:beesdoo.shift.sheet,worker_nb_feedback:0
+msgid "Too many workers"
+msgstr "Trop de travailleurs"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/cooperative_status.py:473
#, python-format
msgid "Trigger Grace Delay"
-msgstr "Trigger Grace Delay"
+msgstr "Déclencher le délai de grâce"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_task_type_id
@@ -1480,7 +2075,7 @@ 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"
+msgstr "Id du Type"
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_shift_view_kanban
@@ -1494,15 +2089,28 @@ msgid "Unassigned"
msgstr "Non assigné"
#. module: beesdoo_shift
+#: selection:beesdoo.shift.shift,state:0
+msgid "Unconfirmed"
+msgstr "Non confirmé"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_message_unread
#: 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_sheet_message_unread_counter
#: 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.actions.act_window,name:beesdoo_shift.action_sheet_admin_annotated
+#: model:ir.ui.menu,name:beesdoo_shift.menu_sheet_admin_annotated
+msgid "Unread notes"
+msgstr "Notes non lues"
+
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.super_coop_partner_inherited_view_form
msgid "Unsubscribe"
@@ -1512,12 +2120,12 @@ msgstr "Se désabonner"
#: selection:cooperative.status,status:0
#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_unsubscribed
msgid "Unsubscribed"
-msgstr "Unsubscribed"
+msgstr "Gelé"
#. module: beesdoo_shift
#: selection:cooperative.status,status:0
msgid "Up to Date"
-msgstr "Up to Date"
+msgstr "A jour"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_cooperative_status_history_user_id
@@ -1529,6 +2137,37 @@ msgstr "Utilisateur"
msgid "Users"
msgstr "Utilisateurs"
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.validate_attendance_sheet_form
+msgid "Validate"
+msgstr "Valider"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_view_form
+msgid "Validate Sheet"
+msgstr "Valider la feuille de présence"
+
+#. module: beesdoo_shift
+#: selection:beesdoo.shift.sheet,state:0
+msgid "Validated"
+msgstr "Validée"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validated_by
+msgid "Validated by"
+msgstr "Validée par"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.validate_attendance_sheet_form
+msgid "Validation"
+msgstr "Validation"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet__barcode_scanned
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_validate__barcode_scanned
+msgid "Value of the last barcode scanned."
+msgstr "Valeur du dernier code-barres scanné"
+
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_website_published
msgid "Visible in Website"
@@ -1538,15 +2177,23 @@ msgstr "Visible sur le site web"
#: 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"
+msgstr "Désire quitter la BEES"
#. module: beesdoo_shift
-#: code:addons/beesdoo_shift/models/planning.py:197
+#: code:addons/beesdoo_shift/models/planning.py:198
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_warning_regular_workers
#, python-format
msgid "Warning"
-msgstr "Warning"
+msgstr "Avertissement"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_worker_nb_feedback
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_worker_nb_feedback
+msgid "Was your team big enough ?"
+msgstr "L'équipe était-elle assez nombreuse ?"
#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_website_message_ids
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_website_message_ids
msgid "Website Messages"
msgstr "Messages du site web"
@@ -1567,6 +2214,7 @@ msgid "Website URL"
msgstr "URL du site"
#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_website_message_ids
#: 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"
@@ -1586,10 +2234,15 @@ msgstr "Mots clefs du site web"
msgid "Website meta title"
msgstr "Titre du site web"
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_week
+msgid "Week"
+msgstr "Semaine"
+
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_search
msgid "Week Day"
-msgstr "Week Day"
+msgstr "Jour de la semaine"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_line_wizard_id
@@ -1597,36 +2250,62 @@ 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"
+msgstr "Travailleurs"
+
+#. module: beesdoo_shift
+#: model:ir.actions.act_window,name:beesdoo_shift.action_worker
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_added_worker_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_worker_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_shift_worker_id
+msgid "Worker"
+msgstr "Travailleur"
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_kanban
msgid "Worker Number:"
-msgstr "Worker Number:"
+msgstr "Nombre de travailleurs :"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_worker_id
msgid "Worker id"
-msgstr "Worker id"
+msgstr "Id du travailleur"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_worker_name
msgid "Worker name"
-msgstr "Worker name"
+msgstr "Nom du travailleur"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:553
+#, python-format
+msgid "Worker name is missing for an added shift."
+msgstr "Le nom d'un des travailleurs manque pour un shift ajouté."
#. 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"
+msgstr "Nombre de travailleurs"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:330
+#, python-format
+msgid "Worker not found (invalid barcode or status)."
+msgstr "Aucun travailleur trouvé (code-barre ou statut invalide)."
#. module: beesdoo_shift
#: model:ir.ui.view,arch_db:beesdoo_shift.task_shift_view_kanban
msgid "Worker:"
-msgstr "Worker:"
+msgstr "Travailleur :"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_added_working_mode
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_working_mode
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_shift_working_mode
+msgid "Working Mode"
+msgstr "Régime de travail"
#. module: beesdoo_shift
#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_working_mode
@@ -1634,75 +2313,116 @@ msgstr "Worker:"
#: 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"
+msgstr "Régime de travail"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:567
+#, python-format
+msgid "Working mode is missing for %s"
+msgstr "Le régime de travail n'est pas indiqué pour %s"
#. module: beesdoo_shift
-#: code:addons/beesdoo_shift/models/task.py:20
+#: code:addons/beesdoo_shift/models/task.py:266
#, python-format
-msgid "You Cannot delete Task Stage"
-msgstr "You Cannot delete Task Stage"
+msgid "Working mode is not properly defined. Please check if the worker is subscribed"
+msgstr "Le régime de travail n'est pas défini. Veuillez regarder si le travailleur est inscrit."
#. module: beesdoo_shift
-#: code:addons/beesdoo_shift/models/cooperative_status.py:408
+#: code:addons/beesdoo_shift/models/cooperative_status.py:418
#: 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"
+msgstr "Vous ne pouvez créer qu'un seul journal par jour."
#. module: beesdoo_shift
-#: code:addons/beesdoo_shift/models/cooperative_status.py:353
+#: code:addons/beesdoo_shift/models/cooperative_status.py:363
#: 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"
+msgstr "Vous ne pouvez inscrire qu'un seul statut de coopérateur par coopérateur"
#. module: beesdoo_shift
-#: code:addons/beesdoo_shift/models/task.py:195
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:304
#, 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"
+msgid "You can't add the same worker more than once to an attendance sheet."
+msgstr "Vous ne pouvez pas ajouter le même travailleur plus d'une fois à une feuille de présence."
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/task.py:225
+#, python-format
+msgid "You cannot change to the status %s if no worker is defined for the shift"
+msgstr "Vous ne pouvez encoder le statut %s si aucun travailleur n'est défini pour le 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"
+msgstr "Vous ne pouvez pas encoder de vacances tant que les précédentes ne sont pas encore terminées."
#. 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"
+msgstr "Vous ne pouvez pas encoder d'exemption temporaire tant que la précédente n'est pas encore terminée."
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:325
+#, python-format
+msgid "A validated attendance sheet can't be modified"
+msgstr "Vous ne pouvez pas modifier une feuille de présence validée"
#. 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"
+msgstr "Vous ne pouvez réaliser cette opération sur vous-même."
#. module: beesdoo_shift
-#: code:addons/beesdoo_shift/models/cooperative_status.py:415
+#: code:addons/beesdoo_shift/models/task.py:89
+#, python-format
+msgid "Shift state of a future shift can't be set to 'present' or 'absent'."
+msgstr "Vous ne pouvez inscrire un shift futur comme 'present' ou 'absent'."
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/cooperative_status.py:425
#, python-format
msgid "You don't have the access to perform this action"
-msgstr "You don't have the access to perform this action"
+msgstr "Vous n'avez pas les accès nécessaires pour effectuer cette opération."
#. 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."
+msgstr "Vous n'avez pas les accès nécessaires pour effectuer cette opération."
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:103
+#, python-format
+msgid "A compensation number is required"
+msgstr "Vous devez choisir un nombre de compensations"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:546
+#, python-format
+msgid "Attendance sheet can only be validated once the shifts have started."
+msgstr "Vous devez attendre que le créneau ait débuté pour valider la feuille de présence."
#. 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"
+msgstr "Vous ne devriez pas réaliser d'extension manuelle tant que le délai de grâce n'a pas été déclenché."
#. 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"
+msgstr "Vous ne devriez pas réaliser d'extension manuelle durant le délai de grâce."
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_view_form
+msgid "You will be able to write notes about what you cannot encode here when clicking on 'validate'."
+msgstr "En cliquant sur 'Valider', tu pourras noter ce que tu ne peux pas encoder ici."
#. module: beesdoo_shift
#: model:mail.template,subject:beesdoo_shift.email_template_shift_summary
@@ -1830,8 +2550,7 @@ msgid "unknown"
msgstr "inconnu"
#. module: beesdoo_shift
-#: code:addons/beesdoo_shift/models/planning.py:141
+#: code:addons/beesdoo_shift/models/planning.py:142
#, 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/nl_BE.po b/beesdoo_shift/i18n/nl_BE.po
new file mode 100644
index 0000000..b821003
--- /dev/null
+++ b/beesdoo_shift/i18n/nl_BE.po
@@ -0,0 +1,2556 @@
+# 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: 2020-01-21 13:20+0000\n"
+"PO-Revision-Date: 2020-01-21 13:20+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
+#: code:addons/beesdoo_shift/wizard/validate_attendance_sheet.py:48
+#, python-format
+msgid "\n"
+"%s attended its shift as a normal one but was not expected. Something may be wrong in his/her personnal informations.\n"
+""
+msgstr "\n"
+"%s voerde zijn shift uit als een normale shift, maar werd niet verwacht. Controleer zijn registratie voor dit tijdslot.\n"
+""
+
+#. module: beesdoo_shift
+#: model:mail.template,body_html:beesdoo_shift.email_template_non_attendance
+msgid "\n"
+"
\n"
+"\n"
+" % if object.replaced_id:\n"
+"
Hello ${object.replaced_id.name},\n"
+"\n"
+"
You have been recorded as non-attended during your last shift (${format_tz(object.start_time,object.replaced_id.tz or 'Europe/Brussels','%d.%m.%Y - %H:%M')}),\n"
+" and you were supposed to replace ${object.worker_id.name}.\n"
+"
Your current status is \"${object.worker_id.cooperative_status_ids.get_status_value()}\".\n"
+" % endif\n"
+"\n"
+" % if not object.replaced_id:\n"
+"
Hello ${object.worker_id.name},
\n"
+"\n"
+"
You have been recorded as non-attended during your last shift (${format_tz(object.start_time,object.worker_id.tz or 'Europe/Brussels','%d.%m.%Y - %H:%M')}).\n"
+"
Your current status is \"${object.worker_id.cooperative_status_ids.get_status_value()}\".\n"
+" % endif\n"
+"\n"
+" % if object.worker_id.working_mode == 'regular':\n"
+" % if object.state == 'absent_0':\n"
+"
Super-cooperator assigned you 0 compensation, so you won't have any additionnal shift to do before your next regular shift.\n"
+" % endif\n"
+" % if object.state == 'absent_1':\n"
+"
Super-cooperator assigned you 1 compensation, so you have to attend one additionnal shift before your next regular shift.\n"
+" % endif\n"
+" % if object.state == 'absent_2':\n"
+"
Super-cooperator assigned you 2 compensations, so you have to attend two additionnal shifts before your next regular shift.\n"
+" % endif\n"
+" % endif\n"
+"\n"
+" % if object.worker_id.working_mode == 'irregular':\n"
+" Your shift counter is ${object.worker_id.cooperative_status_ids.sr}.\n"
+" You should be at a minimum of 0 before the ${object.worker_id.cooperative_status_ids.future_alert_date}.\n"
+" % endif\n"
+"\n"
+" If you have any question regarding this non-attendance, just answer this e-mail.\n"
+"
\n"
+" \n"
+"
Cooperatively yours, \n"
+" The Members' office volunteers
\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"
+" % if object.replaced_id:\n"
+"
Hello ${object.replaced_id.name},\n"
+"\n"
+"
You have been recorded as non-attended during your last shift (${format_tz(object.start_time,object.replaced_id.tz or 'Europe/Brussels','%d.%m.%Y - %H:%M')}),\n"
+" and you were supposed to replace ${object.worker_id.name}.\n"
+"
Your current status is \"${object.worker_id.cooperative_status_ids.get_status_value()}\".\n"
+" % endif\n"
+"\n"
+" % if not object.replaced_id:\n"
+"
Hello ${object.worker_id.name},
\n"
+"\n"
+"
You have been recorded as non-attended during your last shift (${format_tz(object.start_time,object.worker_id.tz or 'Europe/Brussels','%d.%m.%Y - %H:%M')}).\n"
+"
Your current status is \"${object.worker_id.cooperative_status_ids.get_status_value()}\".\n"
+" % endif\n"
+"\n"
+" % if object.worker_id.working_mode == 'regular':\n"
+" % if object.state == 'absent_0':\n"
+"
Super-cooperator assigned you 0 compensation, so you won't have any additionnal shift to do before your next regular shift.\n"
+" % endif\n"
+" % if object.state == 'absent_1':\n"
+"
Super-cooperator assigned you 1 compensation, so you have to attend one additionnal shift before your next regular shift.\n"
+" % endif\n"
+" % if object.state == 'absent_2':\n"
+"
Super-cooperator assigned you 2 compensations, so you have to attend two additionnal shifts before your next regular shift.\n"
+" % endif\n"
+" % endif\n"
+"\n"
+" % if object.worker_id.working_mode == 'irregular':\n"
+" Your shift counter is ${object.worker_id.cooperative_status_ids.sr}.\n"
+" You should be at a minimum of 0 before the ${object.worker_id.cooperative_status_ids.future_alert_date}.\n"
+" % endif\n"
+"\n"
+" If you have any question regarding this non-attendance, just answer this e-mail.\n"
+"
\n"
+" \n"
+"
Cooperatively yours, \n"
+" The Members' office volunteers
\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"
+"
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"
+"
Dag ${object.worker_id.name},
\n"
+"\n"
+"
U wordt verwacht op ${format_tz(object.start_time,object.worker_id.tz or 'Europe/Brussels','%d.%m.%Y')}\n"
+" voor de shift die aanvangt om ${format_tz(object.start_time,object.worker_id.tz or 'Europe/Brussels','%H:%M')}.\n"
+"\n"
+"
Gelieve ons te contacteren op ${object.worker_id.company_id.email} moest u op deze shift niet aanwezig kunnen zijn.\n"
+"
\n"
+" \n"
+"
Coöperatieve groeten,,
\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:193
+#, 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 "# Issues"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:519
+#, python-format
+msgid "%s (added)"
+msgstr "%s (added)"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:359
+#, python-format
+msgid "%s is %s and should be regular or irregular."
+msgstr "%s is %s and should be regular or irregular."
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:374
+#, python-format
+msgid "%s was expected as replaced."
+msgstr "%s was expected as replaced."
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/task.py:145
+#, python-format
+msgid "'Now' must be a datetime."
+msgstr "'Now' must be a datetime."
+
+#. 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
+#: selection:beesdoo.shift.sheet.added,state:0
+#: selection:beesdoo.shift.sheet.expected,state:0
+#: selection:beesdoo.shift.sheet.shift,state:0
+msgid "Absent"
+msgstr "Afwezig"
+
+#. module: beesdoo_shift
+#: selection:beesdoo.shift.shift,state:0
+msgid "Absent - 0 compensation"
+msgstr "Afwezig - 0 compensatie"
+
+#. module: beesdoo_shift
+#: selection:beesdoo.shift.shift,state:0
+msgid "Absent - 1 compensation"
+msgstr "Afwezig - 1 compensatie"
+
+#. module: beesdoo_shift
+#: selection:beesdoo.shift.shift,state:0
+msgid "Absent - 2 compensations"
+msgstr "Afwezig - 2 compensatie"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_message_needaction
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_needaction
+msgid "Action Needed"
+msgstr "Vereist actie"
+
+#. 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_sheet_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 "Actief"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_active_sheet
+msgid "Active sheet"
+msgstr "Active sheet"
+
+#. 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,field_description:beesdoo_shift.field_beesdoo_shift_sheet_added_shift_ids
+msgid "Added Shifts"
+msgstr "Added Shifts"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_view_form
+msgid "Added workers"
+msgstr "Toegevoegde werkers"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.validate_attendance_sheet_form
+msgid "Additional informations"
+msgstr "Additional informations"
+
+#. 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.actions.act_window,name:beesdoo_shift.action_sheet_admin_list
+#: model:ir.ui.menu,name:beesdoo_shift.menu_sheet_admin_list
+msgid "All sheets"
+msgstr "Alle lijsten"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_view_search
+msgid "Annotated (read)"
+msgstr "Annotated (read)"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_view_search
+msgid "Annotated (unread)"
+msgstr "Annotated (unread)"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.shift_settings_view_form
+msgid "Apply"
+msgstr "Toepassen"
+
+#. 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.ui.view,arch_db:beesdoo_shift.sheet_view_search
+msgid "Archived"
+msgstr "Gearchiveerd"
+
+#. 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.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_added_attendance_sheet_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_attendance_sheet_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_shift_attendance_sheet_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_attendance_sheet_id
+msgid "Attendance Sheet"
+msgstr "Aanwezigheidslijsten"
+
+#. module: beesdoo_shift
+#: model:res.groups,name:beesdoo_shift.group_shift_attendance_sheet
+msgid "Attendance Sheet Generic Access"
+msgstr "Aanwezigheidslijsten"
+
+#. module: beesdoo_shift
+#: model:ir.ui.menu,name:beesdoo_shift.menu_sheet_top
+msgid "Attendance Sheets"
+msgstr "Aanwezigheidslijsten"
+
+#. module: beesdoo_shift
+#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_sheet
+msgid "Attendance sheet"
+msgstr "Aanwezigheidslijsten"
+
+#. module: beesdoo_shift
+#: selection:beesdoo.shift.shift,state:0
+msgid "Attended"
+msgstr "Aanwezig"
+
+#. 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.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_barcode
+msgid "Barcode"
+msgstr "Barcode"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet__barcode_scanned
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate__barcode_scanned
+msgid "Barcode Scanned"
+msgstr "Barcode gescand"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_view_form
+msgid "Beware : a validated sheet cannot be edited anymore and you won't be able to add any latecomers. The counters of those who didn't attend will be updated and they will get warning emails."
+msgstr "Pas op: een gevalideerde aanwezigheidslijst kan niet meer worden gewijzigd en je kunt geen laatkomers meer toevoegen.
+De tellers van de afwezige werkers zullen worden bijgewerkt en ze zullen een waarschuwing ontvangen per email."
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:352
+#, python-format
+msgid "Beware, you are recorded as resigning. Please contact member's office if this is incorrect. Thank you."
+msgstr "Pas op: uw account is "resigning". Neem contact op met het Ledenbureau als dit niet correct is.
+Dank u."
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:342
+#, python-format
+msgid "Beware, your account is frozen because your shift counter is at %s. Please contact Members Office to unfreeze it. If you want to attend this shift, your supercoop can write your name in the notes field during validation."
+msgstr "Pas op: jouw rekening is bevroren omdat jouw meter op %sstaat.
+Neem contact op met het ledenbureau om jouw account te deblokkeren.
+Als je wenst deel te nemen aan deze shift, kan jouw supercooöp jouw naam schrijven in het vakje "Informatie over de aanwezigheden" op het moment van de validatie."
+
+#. 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 "Kalenderoverzicht"
+
+#. 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.shift_settings_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
+#: model:ir.ui.view,arch_db:beesdoo_shift.validate_attendance_sheet_form
+msgid "Cancel"
+msgstr "Annuleren"
+
+#. module: beesdoo_shift
+#: selection:beesdoo.shift.shift,state:0
+msgid "Cancelled"
+msgstr "Geannuleerd"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_card_support
+msgid "Card support"
+msgstr "Card support"
+
+#. 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_shift_color
+msgid "Color"
+msgstr "Kleur"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_color
+msgid "Color Index"
+msgstr "Kleurindex"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_feedback
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_feedback
+msgid "Comments about the shift"
+msgstr "Opmerkingen over jouw shift"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:582
+#, python-format
+msgid "Compensation number is missing for %s"
+msgstr "Een compensatie nummer is vereist (%s)"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_is_compensation
+msgid "Compensation shift"
+msgstr "Compensatie shift"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_added_is_compensation
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_is_compensation
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_shift_is_compensation
+msgid "Compensation shift ?"
+msgstr "Compensatie shift ?"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_compensation_no
+msgid "Compensations"
+msgstr "Compensations"
+
+#. 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.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_week
+msgid "Computed from planning names"
+msgstr "Computed from planning names"
+
+#. module: beesdoo_shift
+#: model:ir.ui.menu,name:beesdoo_shift.menu_configuration_top
+msgid "Configuration"
+msgstr "Instellingen"
+
+#. 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 "Bevestigen"
+
+#. module: beesdoo_shift
+#: selection:beesdoo.shift.shift,state:0
+msgid "Confirmed"
+msgstr "Confirmed"
+
+#. module: beesdoo_shift
+#: model:res.groups,name:beesdoo_shift.group_cooperative_admin
+msgid "Cooperative Admin"
+msgstr "Shifts - Administrateur"
+
+#. 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 "Cooperator Type"
+
+#. 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_config_settings_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_sheet_added_create_uid
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_create_uid
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_create_uid
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_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_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 "Gemaakt door"
+
+#. 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_config_settings_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_sheet_added_create_date
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_create_date
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_create_date
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_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_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 "Aangemaakt op"
+
+#. 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.actions.act_window,name:beesdoo_shift.action_sheet_daily
+#: model:ir.ui.menu,name:beesdoo_shift.menu_sheet
+msgid "Daily attendance sheets"
+msgstr "Aanwezigheidslijsten van de dag"
+
+#. 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 "Datum"
+
+#. 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_sheet_message_last_post
+#: 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 "Datum laatste bericht voor dit record."
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_day
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_day_nb_id
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_view_search
+#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search
+msgid "Day"
+msgstr "Day"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_day_abbrevation
+msgid "Day Abbrevation"
+msgstr "Day Abbrevation"
+
+#. 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.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_config_settings_default_task_type_id
+msgid "Default Task Type"
+msgstr "Standaard Soort taak"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_config_settings_default_task_type_id
+msgid "Default task type for attendance sheet pre-filling"
+msgstr "Standaard soort taak toe te kennen bij voor-invullen van aanwezigheidslijst"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_kanban
+msgid "Delete"
+msgstr "Verwijderen"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_property_delivery_carrier_id
+msgid "Delivery Method"
+msgstr "Leveringsmethode"
+
+#. 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 "Omschrijving"
+
+#. 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_config_settings_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_sheet_added_display_name
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_display_name
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_display_name
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_shift_display_name
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_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_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 "Schermnaam"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_duration
+msgid "Duration"
+msgstr "Duur"
+
+#. 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 "Effective date"
+
+#. module: beesdoo_shift
+#: model:ir.model,name:beesdoo_shift.model_beesdoo_shift_shift
+msgid "Email Thread"
+msgstr "E-mail discussie"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_end_time
+msgid "End Time"
+msgstr "End Time"
+
+#. 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
+#: selection:beesdoo.shift.sheet,worker_nb_feedback:0
+msgid "Enough workers"
+msgstr "Genoeg werkers"
+
+#. 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 "Exempt Reason"
+
+#. 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
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_expected_view_form
+msgid "Expected Shift"
+msgstr "Expected Shift"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_shift_ids
+msgid "Expected Shifts"
+msgstr "Expected Shifts"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_view_form
+msgid "Expected workers"
+msgstr "Verwachte werkers"
+
+#. 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.ui.view,arch_db:beesdoo_shift.sheet_view_form
+msgid "Feedback"
+msgstr "Feedback"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_view_search
+msgid "Feedback on number of workers"
+msgstr "Was het team groot genoeg ?"
+
+#. 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_sheet_message_follower_ids
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_follower_ids
+msgid "Followers"
+msgstr "Volgers"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_message_channel_ids
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_channel_ids
+msgid "Followers (Channels)"
+msgstr "Volgers (Kanalen)"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_message_partner_ids
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_partner_ids
+msgid "Followers (Partners)"
+msgstr "Volgers (Partners)"
+
+#. 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,field_description:beesdoo_shift.field_res_users_first_name
+msgid "Frist Name (Legacy)"
+msgstr "Frist Name (Legacy)"
+
+#. 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_beesdoo_shift_sheet_added_worker_name
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_worker_name
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_shift_worker_name
+msgid "Full Name"
+msgstr "Volledige naam"
+
+#. 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 "Gender"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.shift_settings_view_form
+msgid "General Settings"
+msgstr "Algemene instellingen"
+
+#. 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.sheet_view_search
+#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search
+msgid "Group By"
+msgstr "Groeperen op"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_is_read
+msgid "Has notes been read by an administrator ?"
+msgstr "Has notes been read by an administrator ?"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.coop_status_form_view
+msgid "History"
+msgstr "Geschiedenis"
+
+#. 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_config_settings_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_sheet_added_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_shift_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_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_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_sheet_message_unread
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_shift_message_unread
+msgid "If checked new messages require your attention."
+msgstr "Als dit is ingeschakeld, zijn er nieuwe berichten die uw aandacht vragen."
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_message_needaction
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_shift_message_needaction
+msgid "If checked, new messages require your attention."
+msgstr "Indien aangevinkt vragen nieuwe berichten uw aandacht."
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_max_worker_no
+msgid "Indicative maximum number of workers."
+msgstr "Indicatief max. aantal werkers."
+
+#. 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
+#: code:addons/beesdoo_shift/models/cooperative_status.py:207
+#, python-format
+msgid "Irregular workers must have an irregular start date."
+msgstr "Irregular workers must have an irregular start date."
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_message_is_follower
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_is_follower
+msgid "Is Follower"
+msgstr "Is Volger"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_is_annotated
+msgid "Is annotated"
+msgstr "Is annotated"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_validate_warning_regular_workers
+msgid "Is any regular worker doing its regular shift as an added one ?"
+msgstr "Is any regular worker doing its regular shift as an added one ?"
+
+#. 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_sheet_message_last_post
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_last_post
+msgid "Last Message Date"
+msgstr "Datum laatste bericht"
+
+#. 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_config_settings___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_sheet___last_update
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_added___last_update
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected___last_update
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_shift___last_update
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate___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_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 "Laatst Aangepast op"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_last_name
+msgid "Last Name (Legacy)"
+msgstr "Last Name (Legacy)"
+
+#. 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_config_settings_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_sheet_added_write_uid
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_write_uid
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_write_uid
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_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_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 "Laatst bijgewerkt door"
+
+#. 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_config_settings_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_sheet_added_write_date
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_write_date
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_write_date
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_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_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 "Laatst bijgewerkt op"
+
+#. 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
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_login
+#: model:ir.ui.view,arch_db:beesdoo_shift.validate_attendance_sheet_form
+msgid "Login"
+msgstr "Login"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/cooperative_status.py:461
+#: 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,field_description:beesdoo_shift.field_beesdoo_shift_sheet_is_read
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_view_form
+msgid "Mark as read"
+msgstr "Markeer als gelezen"
+
+#. 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_beesdoo_shift_sheet_max_worker_no
+msgid "Maximum number of workers"
+msgstr "Max. aantal werkers"
+
+#. 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_sheet_message_ids
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_ids
+msgid "Messages"
+msgstr "Berichten"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:333
+#, python-format
+msgid "Multiple workers are corresponding this barcode."
+msgstr "Multiple workers are corresponding this barcode."
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search
+msgid "My Shift"
+msgstr "Mijn 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_sheet_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_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 "Naam:"
+
+#. 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
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:220
+#: sql_constraint:beesdoo.shift.sheet:0
+#, python-format
+msgid "Non-annotated sheets can't be marked as read."
+msgstr "Non-annotated sheets can't be marked as read."
+
+#. 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.actions.act_window,name:beesdoo_shift.action_sheet_admin_non_validated
+#: model:ir.ui.menu,name:beesdoo_shift.menu_sheet_admin_non_validated
+msgid "Non-validated sheets"
+msgstr "Niet-gevalideerde lijsten"
+
+#. module: beesdoo_shift
+#: selection:beesdoo.shift.sheet,state:0
+msgid "Not Validated"
+msgstr "Not Validated"
+
+#. module: beesdoo_shift
+#: selection:beesdoo.shift.sheet,worker_nb_feedback:0
+msgid "Not enough workers"
+msgstr "Niet genoeg werkers"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_notes
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_notes
+msgid "Notes"
+msgstr "Notities"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_message_needaction_counter
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_needaction_counter
+msgid "Number of Actions"
+msgstr "Aantal acties"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_message_needaction_counter
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_shift_message_needaction_counter
+msgid "Number of messages which requires an action"
+msgstr "Aantal berichten die actie vereisen"
+
+#. 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_sheet_message_unread_counter
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_shift_message_unread_counter
+msgid "Number of unread messages"
+msgstr "Aantal ongelezen berichten"
+
+#. 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 "Old cooperator"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_added_is_compensation
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_expected_is_compensation
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_shift_is_compensation
+msgid "Only for regular workers"
+msgstr "Only for regular workers"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/wizard/validate_attendance_sheet.py:110
+#, python-format
+msgid "Only super-cooperators and administrators can validate attendance sheets."
+msgstr "Only super-cooperators and administrators can validate attendance sheets."
+
+#. 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 "Relatie"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_password
+msgid "Password"
+msgstr "Wachtwoord"
+
+#. 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 "Shifts - Planning"
+
+#. 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
+#: code:addons/beesdoo_shift/wizard/validate_attendance_sheet.py:99
+#, python-format
+msgid "Please enter your login."
+msgstr "Please enter your login."
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:590
+#, python-format
+msgid "Please give your feedback about the number of workers."
+msgstr "Was het team groot genoeg ?"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/wizard/validate_attendance_sheet.py:94
+#, python-format
+msgid "Please set a correct barcode."
+msgstr "Please set a correct barcode."
+
+#. module: beesdoo_shift
+#: selection:beesdoo.shift.sheet.added,state:0
+#: selection:beesdoo.shift.sheet.expected,state:0
+#: selection:beesdoo.shift.sheet.shift,state:0
+msgid "Present"
+msgstr "Aanwezig"
+
+#. 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 "Privé profiel"
+
+#. module: beesdoo_shift
+#: model:res.groups,comment:beesdoo_shift.group_shift_attendance
+msgid "Read only sur worker.info "
+msgstr "Read only sur worker.info "
+
+#. 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:479
+#, 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_sheet_expected_replacement_worker_id
+msgid "Replacement Worker"
+msgstr "Vervangingswerker"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_expected_replacement_worker_id
+msgid "Replacement Worker (must be regular)"
+msgstr "Vervangingswerker (regelmatig werkregime vereist)"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.task_shift_view_kanban
+msgid "Replacement worker:"
+msgstr "Vervangingswerker :"
+
+#. 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.ui.view,arch_db:beesdoo_shift.validate_attendance_sheet_form
+msgid "Save"
+msgstr "Opslaan"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_config_settings_card_support
+msgid "Scan cooperators cards instead of login for sheets validation"
+msgstr "Scan cooperators cards instead of login for sheets validation"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.validate_attendance_sheet_form
+msgid "Scan your card"
+msgstr "Scan your card"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_planning_sequence
+msgid "Sequence"
+msgstr "Reeks"
+
+#. module: beesdoo_shift
+#: model:ir.actions.act_window,name:beesdoo_shift.action_shift_settings
+#: model:ir.ui.menu,name:beesdoo_shift.menu_shift_settings
+#: model:ir.ui.view,arch_db:beesdoo_shift.shift_settings_view_form
+msgid "Settings"
+msgstr "Instellingen"
+
+#. module: beesdoo_shift
+#: model:ir.ui.menu,name:beesdoo_shift.menu_task
+msgid "Shift"
+msgstr "Shift"
+
+#. 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.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_added_state
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_state
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_shift_state
+msgid "Shift State"
+msgstr "Shift Staat"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:574
+#, python-format
+msgid "Shift State is missing for %s"
+msgstr "De shift status van %s ontbreekt"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:557
+#, python-format
+msgid "Shift State is missing or wrong for %s"
+msgstr "Shift State is missing or wrong for %s"
+
+#. 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:res.groups,name:beesdoo_shift.group_shift_attendance
+msgid "Shift and Worker Access"
+msgstr "Shifts - Aanwezigheden"
+
+#. 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_subscribe_irregular_start_date
+msgid "Start Date"
+msgstr "Begindatum"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_start_time
+msgid "Start Time"
+msgstr "Start Time"
+
+#. 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.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_state
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_state
+msgid "State"
+msgstr "Staat/Provincie"
+
+#. 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 "Status"
+
+#. 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 "Status:"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/cooperative_status.py:444
+#, 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_sheet_expected_super_coop_id
+#: 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 "Supercoöperant"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_subscribe_super
+msgid "Super Cooperator"
+msgstr "Supercoöperant"
+
+#. module: beesdoo_shift
+#: selection:cooperative.status,status:0
+msgid "Suspended"
+msgstr "Suspended"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_added_task_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_task_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_shift_task_id
+msgid "Task"
+msgstr "Taak"
+
+#. 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_sheet_added_task_type_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_task_type_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_shift_task_type_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_task_type_id
+msgid "Task Type"
+msgstr "Soort taak"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:562
+#, python-format
+msgid "Task Type is missing for %s"
+msgstr "Task Type is missing for %s"
+
+#. 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 "Sjablonen"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/cooperative_status.py:490
+#: 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 "De volledige URL om het document te kunnen raadplegen via de website."
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:438
+#, python-format
+msgid "The sheet has already been marked as read."
+msgstr "De aanwezigheidslijst is al gemarkeerd als gelezen."
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:319
+#, python-format
+msgid "The sheet has already been validated and can't be edited."
+msgstr "De aanwezigheidslijst is al gevalideerd en kan niet meer worden gewijzigd."
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:543
+#, python-format
+msgid "The sheet has already been validated."
+msgstr "De aanwezigheidslijst is al gevalideerd."
+
+#. 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 "Deze verzendwijze wordt gebruikt bij facturatie vanaf verzamelopdracht."
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_time_slot
+msgid "Time Slot"
+msgstr "Tijdslot"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_config_settings_attendance_sheet_generation_interval
+msgid "Time interval expressed in minutes"
+msgstr "Time interval expressed in minutes"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_config_settings_attendance_sheet_generation_interval
+msgid "Time interval for attendance sheet generation"
+msgstr "Time interval for attendance sheet generation"
+
+#. 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 "Vandaag"
+
+#. module: beesdoo_shift
+#: selection:beesdoo.shift.sheet,worker_nb_feedback:0
+msgid "Too many workers"
+msgstr "Te veel werkers"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/cooperative_status.py:473
+#, 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 "Soort:"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.task_view_search
+msgid "Unassigned"
+msgstr "Niet toegewezen"
+
+#. module: beesdoo_shift
+#: selection:beesdoo.shift.shift,state:0
+msgid "Unconfirmed"
+msgstr "Unconfirmed"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_message_unread
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_unread
+msgid "Unread Messages"
+msgstr "Ongelezen berichten"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_message_unread_counter
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_message_unread_counter
+msgid "Unread Messages Counter"
+msgstr "Teller ongelezen berichten"
+
+#. module: beesdoo_shift
+#: model:ir.actions.act_window,name:beesdoo_shift.action_sheet_admin_annotated
+#: model:ir.ui.menu,name:beesdoo_shift.menu_sheet_admin_annotated
+msgid "Unread notes"
+msgstr "Ongelezen notities"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.super_coop_partner_inherited_view_form
+msgid "Unsubscribe"
+msgstr "Uitschrijven"
+
+#. 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 "Gebruiker"
+
+#. module: beesdoo_shift
+#: model:ir.model,name:beesdoo_shift.model_res_users
+msgid "Users"
+msgstr "Gebruikers"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.validate_attendance_sheet_form
+msgid "Validate"
+msgstr "Bevestig"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.sheet_view_form
+msgid "Validate Sheet"
+msgstr "Validate Sheet"
+
+#. module: beesdoo_shift
+#: selection:beesdoo.shift.sheet,state:0
+msgid "Validated"
+msgstr "Validated"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validated_by
+msgid "Validated by"
+msgstr "Validated by"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.validate_attendance_sheet_form
+msgid "Validation"
+msgstr "Validation"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet__barcode_scanned
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_validate__barcode_scanned
+msgid "Value of the last barcode scanned."
+msgstr "Waarde van de laatst gescande barcode."
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_website_published
+msgid "Visible in Website"
+msgstr "Zichtbaar in website"
+
+#. 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:198
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_warning_regular_workers
+#, python-format
+msgid "Warning"
+msgstr "Warning"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_validate_worker_nb_feedback
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_worker_nb_feedback
+msgid "Was your team big enough ?"
+msgstr "Was het team groot genoeg?"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_website_message_ids
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_website_message_ids
+msgid "Website Messages"
+msgstr "Websiteberichten"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_website_description
+msgid "Website Partner Full Description"
+msgstr "Website relatie volledige omschrijving"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_website_short_description
+msgid "Website Partner Short Description"
+msgstr "Website relatie korte omschrijving"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_website_url
+msgid "Website URL"
+msgstr "Website URL"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_website_message_ids
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_shift_website_message_ids
+msgid "Website communication history"
+msgstr "Websitecommunicatiehistoriek"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_website_meta_description
+msgid "Website meta description"
+msgstr "Website meta omschrijving"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_website_meta_keywords
+msgid "Website meta keywords"
+msgstr "Website meta trefwoorden"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_website_meta_title
+msgid "Website meta title"
+msgstr "Website meta titel"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_week
+msgid "Week"
+msgstr "Week"
+
+#. 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.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_added_worker_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_worker_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_shift_worker_id
+#: model:ir.ui.menu,name:beesdoo_shift.menu_worker
+#: model:ir.ui.menu,name:beesdoo_shift.menu_worker_top
+msgid "Worker"
+msgstr "Vervangingswerker"
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.task_template_view_kanban
+msgid "Worker Number:"
+msgstr "Werker's nummer :"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_shift_worker_id
+msgid "Worker id"
+msgstr "Werker id"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_template_worker_name
+msgid "Worker name"
+msgstr "Werker's naam"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:553
+#, python-format
+msgid "Worker name is missing for an added shift."
+msgstr "Worker name is missing for an added shift."
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesddoo_shift_generate_shift_template_line_worker_nb
+msgid "Worker nb"
+msgstr "Werknemernummer"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:330
+#, python-format
+msgid "Worker not found (invalid barcode or status)."
+msgstr "Werker niet gevonden (ongeldige barcode of status)."
+
+#. module: beesdoo_shift
+#: model:ir.ui.view,arch_db:beesdoo_shift.task_shift_view_kanban
+msgid "Worker:"
+msgstr "Werker:"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_added_working_mode
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_working_mode
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_shift_working_mode
+msgid "Working Mode"
+msgstr "Werkregime"
+
+#. 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 "Werkregime"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:567
+#, python-format
+msgid "Working mode is missing for %s"
+msgstr "Werkregime van %s ontbreekt"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/task.py:266
+#, python-format
+msgid "Working mode is not properly defined. Please check if the worker is subscribed"
+msgstr "Werkregime is niet correct gedefinieerd. Gelieve na te gaan of de werker geregistreerd en niet geblokkeerd is"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/cooperative_status.py:418
+#: 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:363
+#: 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/attendance_sheet.py:304
+#, python-format
+msgid "You can't add the same worker more than once to an attendance sheet."
+msgstr "Je kunt dezelfde werker niet meer dan één keer aan een aanwezigheidslijst toevoegen."
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/task.py:225
+#, python-format
+msgid "You cannot change to the status %s if no worker is defined for the shift"
+msgstr "You cannot change to the status %s if no worker is defined for 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/models/attendance_sheet.py:325
+#, python-format
+msgid "A validated attendance sheet can't be modified"
+msgstr "Een gevalideerde aanwezigheidslijst kan niet bewerkt worden"
+
+#. 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/task.py:89
+#, python-format
+msgid "Shift state of a future shift can't be set to 'present' or 'absent'."
+msgstr "De shift status van een toekomstige shift kan niet op 'aanwezig' of 'afwezig' worden gezet."
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/cooperative_status.py:425
+#, 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/models/attendance_sheet.py:103
+#, python-format
+msgid "A compensation number is required"
+msgstr "Een compensatie nummer is vereist"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/attendance_sheet.py:546
+#, python-format
+msgid "Attendance sheet can only be validated once the shifts have started."
+msgstr "Aanwezigheidslijsten kunnen pas worden gevalideerd nadat de shifts begonnen zijn."
+
+#. 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:ir.ui.view,arch_db:beesdoo_shift.sheet_view_form
+msgid "You will be able to write notes about what you cannot encode here when clicking on 'validate'."
+msgstr "You will be able to write notes about what you cannot encode here when clicking on 'validate'."
+
+#. 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 "Your next 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 "Naam"
+
+#. 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 "of"
+
+#. module: beesdoo_shift
+#: model:ir.model.fields,field_description:beesdoo_shift.field_res_users_self
+msgid "unknown"
+msgstr "onbekend"
+
+#. module: beesdoo_shift
+#: code:addons/beesdoo_shift/models/planning.py:142
+#, 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/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py
index ab7eff4..cd98dfe 100644
--- a/beesdoo_shift/models/attendance_sheet.py
+++ b/beesdoo_shift/models/attendance_sheet.py
@@ -100,7 +100,7 @@ class AttendanceSheetShiftExpected(models.Model):
def _constrain_compensation_no(self):
if self.state == "absent":
if not self.compensation_no:
- raise UserError(_("You must choose a compensation number."))
+ raise UserError(_("A compensation number is required"))
class AttendanceSheetShiftAdded(models.Model):
@@ -157,7 +157,7 @@ class AttendanceSheet(models.Model):
)
week = fields.Char(
string="Week",
- help="Computed from planning names",
+ help="Computed from planning name",
compute="_compute_week",
)
@@ -178,7 +178,7 @@ class AttendanceSheet(models.Model):
readonly=True,
help="Indicative maximum number of workers.",
)
- notes = fields.Text("Notes", default="")
+ notes = fields.Text("Notes", default="", help="Notes about the attendance for the Members Office")
is_annotated = fields.Boolean(
compute="_compute_is_annotated",
string="Is annotated",
@@ -322,7 +322,7 @@ class AttendanceSheet(models.Model):
def on_barcode_scanned(self, barcode):
if self.state == "validated":
raise UserError(
- _("You cannot modify a validated attendance sheet.")
+ _("A validated attendance sheet can't be modified")
)
worker = self.env["res.partner"].search([("barcode", "=", barcode)])
@@ -543,7 +543,7 @@ class AttendanceSheet(models.Model):
raise UserError(_("The sheet has already been validated."))
if start_time_dt > datetime.now():
raise UserError(
- _("You must wait for the shifts to begin to validate sheet.")
+ _("Attendance sheet can only be validated once the shifts have started.")
)
# Fields validation
diff --git a/beesdoo_shift/models/cooperative_status.py b/beesdoo_shift/models/cooperative_status.py
index eb3a400..266859e 100644
--- a/beesdoo_shift/models/cooperative_status.py
+++ b/beesdoo_shift/models/cooperative_status.py
@@ -43,8 +43,8 @@ class CooperativeStatus(models.Model):
info_session = fields.Boolean('Information Session ?')
info_session_date = fields.Datetime('Information Session Date')
super = fields.Boolean("Super Cooperative")
- sr = fields.Integer("Compteur shift regulier", default=0)
- sc = fields.Integer("Compteur shift de compensation", default=0)
+ sr = fields.Integer("Regular shifts counter", default=0)
+ sc = fields.Integer("Compensation shifts counter", default=0)
time_extension = fields.Integer("Extension Days NB", default=0, help="Addtional days to the automatic extension, 5 mean that you have a total of 15 extension days of default one is set to 10")
holiday_start_time = fields.Date("Holidays Start Day")
holiday_end_time = fields.Date("Holidays End Day")
diff --git a/beesdoo_shift/models/planning.py b/beesdoo_shift/models/planning.py
index 5f69e3c..84c650f 100644
--- a/beesdoo_shift/models/planning.py
+++ b/beesdoo_shift/models/planning.py
@@ -139,7 +139,7 @@ class TaskTemplate(models.Model):
def _nb_worker_max(self):
for rec in self:
if len(rec.worker_ids) > rec.worker_nb:
- raise UserError(_('you cannot assign more worker then the number maximal define on the template'))
+ raise UserError(_('You cannot assign more workers than the maximal number defined on template.'))
@api.onchange('start_time', 'end_time')
diff --git a/beesdoo_shift/models/task.py b/beesdoo_shift/models/task.py
index 253279d..75ad52c 100644
--- a/beesdoo_shift/models/task.py
+++ b/beesdoo_shift/models/task.py
@@ -87,8 +87,8 @@ class Task(models.Model):
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."
+ "Shift state of a future shift "
+ "can't be set to 'present' or 'absent'."
))
@api.constrains('is_regular', 'is_compensation')
diff --git a/beesdoo_shift/views/cooperative_status.xml b/beesdoo_shift/views/cooperative_status.xml
index d75bbb5..85cca36 100644
--- a/beesdoo_shift/views/cooperative_status.xml
+++ b/beesdoo_shift/views/cooperative_status.xml
@@ -149,7 +149,7 @@
-
+
diff --git a/beesdoo_shift/views/task.xml b/beesdoo_shift/views/task.xml
index dcb7b47..9643887 100644
--- a/beesdoo_shift/views/task.xml
+++ b/beesdoo_shift/views/task.xml
@@ -202,7 +202,7 @@
- Task Action
+ Shiftsbeesdoo.shift.shiftkanban,calendar,tree,form,pivot{'search_default_today': 1,
@@ -213,7 +213,7 @@
-
From 6d6826260dff07e96fefd5ab000d98ebc0f52f91 Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Thu, 23 Jan 2020 14:04:49 +0100
Subject: [PATCH 126/208] [FIX] b_shift : email for non-attended shifts
---
beesdoo_shift/data/mail_template.xml | 113 +++++++++++----------
beesdoo_shift/models/cooperative_status.py | 9 ++
2 files changed, 69 insertions(+), 53 deletions(-)
diff --git a/beesdoo_shift/data/mail_template.xml b/beesdoo_shift/data/mail_template.xml
index aa8d7cc..265bb55 100644
--- a/beesdoo_shift/data/mail_template.xml
+++ b/beesdoo_shift/data/mail_template.xml
@@ -11,67 +11,74 @@
${object.worker_id.lang}
+
- % if object.replaced_id:
-
Hello ${object.replaced_id.name},
+ % if object.replaced_id:
+
Hello ${object.replaced_id.name},
-
You have been recorded as non-attended during your last shift (${format_tz(object.start_time,object.replaced_id.tz or 'Europe/Brussels','%d.%m.%Y - %H:%M')}).
-
You were supposed to replace ${object.worker_id.name}.
- % endif
+
You have been recorded as non-attended during your last shift (${format_tz(object.start_time,object.replaced_id.tz or 'Europe/Brussels','%d.%m.%Y - %H:%M')}),
+ and you were supposed to replace ${object.worker_id.name}.
+
Your current status is "${object.worker_id.cooperative_status_ids.get_status_value()}".
+ % endif
- % if object.worker_id:
-
Hello ${object.worker_id.name},
+ % if not object.replaced_id:
+
Hello ${object.worker_id.name},
-
You have been recorded as non-attended during your last shift (${format_tz(object.start_time,object.worker_id.tz or 'Europe/Brussels','%d.%m.%Y - %H:%M')}).
-
- % endif
+
You have been recorded as non-attended during your last shift (${format_tz(object.start_time,object.worker_id.tz or 'Europe/Brussels','%d.%m.%Y - %H:%M')}).
+
Your current status is "${object.worker_id.cooperative_status_ids.get_status_value()}".
+ % endif
- % if object.state == 'absent_0':
- Super-cooperator assigned you 0 compensation, so you won't have any additionnal shift to do.
- % endif
- % if object.state == 'absent_1':
- Super-cooperator assigned you 1 compensation, so you have to attend another shift.
- % endif
- % if object.state == 'absent_2':
- Super-cooperator assigned you 2 compensations, so you have to attend 2 anothers shifts.
- % endif
+ % if object.worker_id.working_mode == 'regular':
+ % if object.state == 'absent_0':
+
Super-cooperator assigned you 0 compensation, so you won't have any additionnal shift to do before your next regular shift.
+ % endif
+ % if object.state == 'absent_1':
+
Super-cooperator assigned you 1 compensation, so you have to attend one additionnal shift before your next regular shift.
+ % endif
+ % if object.state == 'absent_2':
+
Super-cooperator assigned you 2 compensations, so you have to attend two additionnal shifts before your next regular shift.
+ % endif
+ % endif
-
Your status have been updated to "${object.worker_id.state}".
-
If you have any question regarding this non-attendance, just answer this e-mail.
-
-
-
Cooperatively yours,
- The Members' office volunteers
-
${object.worker_id.company_id.name}.
+ % if object.worker_id.working_mode == 'irregular':
+ Your shift counter is ${object.worker_id.cooperative_status_ids.sr}.
+ You should be at a minimum of 0 before the ${object.worker_id.cooperative_status_ids.future_alert_date}.
+ % endif
- % 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 you have any question regarding this non-attendance, just answer this e-mail.
+
+
+
Cooperatively yours,
+ The Members' office volunteers
+ Generate attendance sheets before shifts start.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Default Task Type
+
+ For attendance sheets automatic pre-filling.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Day Number
+ beesdoo.shift.daynumber
+ tree
+
+
+
+
+
+ Shift Type
+ beesdoo.shift.type
+ tree,form
+
+
+
+
+
+ Settings
+ ir.actions.act_window
+ res.config.settings
+ form
+ inline
+ {'module' : 'beesdoo_shift'}
+
+
+
+
+
+
diff --git a/beesdoo_shift/views/res_config_view.xml b/beesdoo_shift/views/res_config_view.xml
deleted file mode 100644
index 68b6dac..0000000
--- a/beesdoo_shift/views/res_config_view.xml
+++ /dev/null
@@ -1,91 +0,0 @@
-
-
-
-
-
- Day Number List
- beesdoo.shift.daynumber
-
-
-
-
-
-
-
-
-
-
- Shift Type List
- beesdoo.shift.type
-
-
-
-
-
-
-
-
-
-
- Shifts Configuration Form
- beesdoo.shift.config.settings
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Day Number
- beesdoo.shift.daynumber
- tree
-
-
-
-
-
- Shift Type
- beesdoo.shift.type
- tree,form
-
-
-
-
-
- Settings
- beesdoo.shift.config.settings
- form
- inline
-
-
-
-
-
-
From f5ea1faf220d9e67aa63d068b1dce9dac8f34a07 Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Mon, 27 Jan 2020 14:44:18 +0100
Subject: [PATCH 143/208] [MIG] b_shift : change cron definitions to fit 12.0
requirements
---
beesdoo_shift/data/cron.xml | 32 ++++++++++++-------
beesdoo_shift/wizard/extension.py | 4 +--
.../wizard/validate_attendance_sheet.py | 2 +-
3 files changed, 23 insertions(+), 15 deletions(-)
diff --git a/beesdoo_shift/data/cron.xml b/beesdoo_shift/data/cron.xml
index 6e50214..16d172a 100644
--- a/beesdoo_shift/data/cron.xml
+++ b/beesdoo_shift/data/cron.xml
@@ -2,61 +2,71 @@
Update Cooperatoor status base on the date
+
+ code
+ model._set_today()24hours-1
-
- model._set_today()Generate Next Planning
+
+ code
+ model._generate_next_planning()1weeks-1
-
- model._generate_next_planning()
+
Generate Attendance Sheets
+
+ code
+ model._generate_attendance_sheet()
+ 4minutes-1
-
- model._generate_attendance_sheet()Compute Shift Counter
+
+ code
+ model._cron_compute_counter_irregular()4hours-1
-
- model._cron_compute_counter_irregular()Check for non-validated sheets
+
+ code
+ model._cron_non_validated_sheets()1days-1
-
- model._cron_non_validated_sheets()Send weekly shift summary
+
+ code
+ model._cron_send_weekly_emails()7days-1
@@ -64,8 +74,6 @@
-
- _cron_send_weekly_emails()
diff --git a/beesdoo_shift/wizard/extension.py b/beesdoo_shift/wizard/extension.py
index bb20eea..df256c5 100644
--- a/beesdoo_shift/wizard/extension.py
+++ b/beesdoo_shift/wizard/extension.py
@@ -6,7 +6,7 @@ class Subscribe(models.TransientModel):
_inherit = 'beesdoo.shift.action_mixin'
def _get_default_extension_delay(self):
- return int(self.env['ir.config_parameter'].get_param('default_extension_delay', 28))
+ return int(self.env['ir.config_parameter'].sudo().get_param('default_extension_delay', 28))
extension_start_date = fields.Date(string="Start date for the extension", default=fields.Date.today, readonly=True)
@@ -22,7 +22,7 @@ class Subscribe(models.TransientModel):
@api.multi
def extension(self):
self = self._check() #maybe a different group
- grace_delay = int(self.env['ir.config_parameter'].get_param('default_grace_delay', 10))
+ grace_delay = int(self.env['ir.config_parameter'].sudo().get_param('default_grace_delay', 10))
status_id = self.env['cooperative.status'].search([('cooperator_id', '=', self.cooperator_id.id)])
if not status_id.extension_start_time:
raise UserError(_('You should not make a manual extension when the grace delay has not been triggered yet'))
diff --git a/beesdoo_shift/wizard/validate_attendance_sheet.py b/beesdoo_shift/wizard/validate_attendance_sheet.py
index e41da1b..3a4ba70 100644
--- a/beesdoo_shift/wizard/validate_attendance_sheet.py
+++ b/beesdoo_shift/wizard/validate_attendance_sheet.py
@@ -21,7 +21,7 @@ class ValidateAttendanceSheet(models.TransientModel):
def _get_card_support_setting(self):
return ast.literal_eval(
- self.env["ir.config_parameter"].get_param(
+ self.env["ir.config_parameter"].sudo().get_param(
"beesdoo_shift.card_support"
)
)
From ef1ad141bdd00b1a8a1a6fc9e60137a20b0bd470 Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Mon, 27 Jan 2020 15:20:21 +0100
Subject: [PATCH 144/208] [MIG] b_shift : fix validation wizard to fit 12.0
requirements
---
beesdoo_shift/wizard/validate_attendance_sheet.py | 8 ++++----
beesdoo_shift/wizard/validate_attendance_sheet.xml | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/beesdoo_shift/wizard/validate_attendance_sheet.py b/beesdoo_shift/wizard/validate_attendance_sheet.py
index 3a4ba70..08b1fd4 100644
--- a/beesdoo_shift/wizard/validate_attendance_sheet.py
+++ b/beesdoo_shift/wizard/validate_attendance_sheet.py
@@ -64,10 +64,10 @@ class ValidateAttendanceSheet(models.TransientModel):
default=_get_warning_regular_workers,
help="Is any regular worker doing its regular shift as an added one ?",
)
- notes = fields.Text(related="active_sheet.notes")
- feedback = fields.Text(related="active_sheet.feedback")
+ notes = fields.Text(related="active_sheet.notes", readonly=False)
+ feedback = fields.Text(related="active_sheet.feedback", readonly=False)
worker_nb_feedback = fields.Selection(
- related="active_sheet.worker_nb_feedback", required=True
+ related="active_sheet.worker_nb_feedback", readonly=False, required=True
)
def on_barcode_scanned(self, barcode):
@@ -97,7 +97,7 @@ class ValidateAttendanceSheet(models.TransientModel):
if not self.login:
raise UserError(_("Please enter your login."))
user = self.env["res.users"].search([("login", "=", self.login)])
- user.sudo(user.id).check_credentials(self.password)
+ user.sudo(user.id)._check_credentials(self.password)
partner = user.partner_id
is_admin = partner.user_ids.has_group(
diff --git a/beesdoo_shift/wizard/validate_attendance_sheet.xml b/beesdoo_shift/wizard/validate_attendance_sheet.xml
index d124e77..6b20d6e 100644
--- a/beesdoo_shift/wizard/validate_attendance_sheet.xml
+++ b/beesdoo_shift/wizard/validate_attendance_sheet.xml
@@ -13,7 +13,7 @@
readonly="1"
attrs="{'invisible': [('warning_regular_workers', '=', False)]}"
/>
-
+
From b4c7fd1b66b5c9a0b131614c8ea0bd0c6c9a3db9 Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Mon, 27 Jan 2020 15:22:18 +0100
Subject: [PATCH 145/208] [MIG] b_shift : fix views to fit 12.0 requirements
---
beesdoo_shift/views/attendance_sheet.xml | 38 +++++++++---------------
1 file changed, 14 insertions(+), 24 deletions(-)
diff --git a/beesdoo_shift/views/attendance_sheet.xml b/beesdoo_shift/views/attendance_sheet.xml
index fb58306..e7c4800 100644
--- a/beesdoo_shift/views/attendance_sheet.xml
+++ b/beesdoo_shift/views/attendance_sheet.xml
@@ -137,19 +137,15 @@
-
-
-
-
-
+
+
@@ -171,28 +167,22 @@
-
-
-
You will be able to write notes
about what you cannot encode here
- when clicking on 'validate'.
+ when clicking on 'validate'.
+
+
-
-
-
-
-
-
-
+
From 7b313c57b984f56f666d2d0b7d81606d88480b63 Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Mon, 27 Jan 2020 15:22:35 +0100
Subject: [PATCH 146/208] [MIG] b_shift : i18n for 12.0
---
beesdoo_shift/i18n/fr.po | 4 ++--
beesdoo_shift/i18n/fr_BE.po | 4 ++--
beesdoo_shift/i18n/nl_BE.po | 4 ++--
3 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/beesdoo_shift/i18n/fr.po b/beesdoo_shift/i18n/fr.po
index 97fca52..0c363dc 100644
--- a/beesdoo_shift/i18n/fr.po
+++ b/beesdoo_shift/i18n/fr.po
@@ -831,12 +831,12 @@ msgid "Day ids"
msgstr "Ids des jours"
#. module: beesdoo_shift
-#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_config_settings_default_task_type_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_config_settings_task_type_default_id
msgid "Default Task Type"
msgstr "Type de tâche par défaut"
#. module: beesdoo_shift
-#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_config_settings_default_task_type_id
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_config_settings_task_type_default_id
msgid "Default task type for attendance sheet pre-filling"
msgstr "Type de shift par défaut pour le remplissage automatique des feuilles de présence"
diff --git a/beesdoo_shift/i18n/fr_BE.po b/beesdoo_shift/i18n/fr_BE.po
index 6d379c6..96ea5c6 100644
--- a/beesdoo_shift/i18n/fr_BE.po
+++ b/beesdoo_shift/i18n/fr_BE.po
@@ -831,12 +831,12 @@ msgid "Day ids"
msgstr "Ids des jours"
#. module: beesdoo_shift
-#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_config_settings_default_task_type_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_config_settings_task_type_default_id
msgid "Default Task Type"
msgstr "Type de tâche par défaut"
#. module: beesdoo_shift
-#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_config_settings_default_task_type_id
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_config_settings_task_type_default_id
msgid "Default task type for attendance sheet pre-filling"
msgstr "Type de shift par défaut pour le remplissage automatique des feuilles de présence"
diff --git a/beesdoo_shift/i18n/nl_BE.po b/beesdoo_shift/i18n/nl_BE.po
index b821003..9dafc42 100644
--- a/beesdoo_shift/i18n/nl_BE.po
+++ b/beesdoo_shift/i18n/nl_BE.po
@@ -838,12 +838,12 @@ msgid "Day ids"
msgstr "Day ids"
#. module: beesdoo_shift
-#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_config_settings_default_task_type_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_config_settings_task_type_default_id
msgid "Default Task Type"
msgstr "Standaard Soort taak"
#. module: beesdoo_shift
-#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_config_settings_default_task_type_id
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_config_settings_task_type_default_id
msgid "Default task type for attendance sheet pre-filling"
msgstr "Standaard soort taak toe te kennen bij voor-invullen van aanwezigheidslijst"
From 4a437f7b475945b7e217e30dccc9d5a903c93830 Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Mon, 27 Jan 2020 17:59:25 +0100
Subject: [PATCH 147/208] [REF] b_shift : code cleaning
---
beesdoo_shift/models/cooperative_status.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/beesdoo_shift/models/cooperative_status.py b/beesdoo_shift/models/cooperative_status.py
index e551a4a..5b16592 100644
--- a/beesdoo_shift/models/cooperative_status.py
+++ b/beesdoo_shift/models/cooperative_status.py
@@ -69,7 +69,7 @@ class CooperativeStatus(models.Model):
exempt_reason_id = fields.Many2one('cooperative.exempt.reason', 'Exempt Reason')
status = fields.Selection([('ok', 'Up to Date'),
('holiday', 'Holidays'),
- ('alert', 'Alerte'),
+ ('alert', 'Alert'),
('extension', 'Extension'),
('suspended', 'Suspended'),
('exempted', 'Exempted'),
From eedc759b00c622f74c8247e4e8f269c67e8ab9f2 Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Tue, 28 Jan 2020 11:21:05 +0100
Subject: [PATCH 148/208] [FIX] b_shift : error messages
---
beesdoo_shift/models/attendance_sheet.py | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py
index 2f2c441..366b963 100644
--- a/beesdoo_shift/models/attendance_sheet.py
+++ b/beesdoo_shift/models/attendance_sheet.py
@@ -319,10 +319,18 @@ class AttendanceSheet(models.Model):
worker = self.env["res.partner"].search([("barcode", "=", barcode)])
if not len(worker):
- raise UserError(_("Worker not found (invalid barcode or status)."))
+ raise UserError(
+ _(
+ "Worker not found (invalid barcode or status). \nBarcode : %s"
+ )
+ % barcode
+ )
if len(worker) > 1:
raise UserError(
- _("Multiple workers are corresponding this barcode.")
+ _(
+ "Multiple workers are corresponding this barcode. \nBarcode : %s"
+ )
+ % barcode
)
if worker.state == "unsubscribed":
@@ -349,8 +357,7 @@ class AttendanceSheet(models.Model):
if worker.working_mode not in ("regular", "irregular"):
raise UserError(
_("%s is %s and should be regular or irregular.")
- % worker.name,
- worker.working_mode,
+ % (worker.name, worker.working_mode)
)
# Expected shifts status update
From eb453473d58edf418497a956b7cb43a4f9ebd6a4 Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Tue, 28 Jan 2020 14:38:59 +0100
Subject: [PATCH 149/208] [UPD] b_shift : traductions
---
beesdoo_shift/i18n/fr.po | 6 +++---
beesdoo_shift/i18n/fr_BE.po | 4 ++--
beesdoo_shift/i18n/nl_BE.po | 4 ++--
3 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/beesdoo_shift/i18n/fr.po b/beesdoo_shift/i18n/fr.po
index 0c363dc..ff653ee 100644
--- a/beesdoo_shift/i18n/fr.po
+++ b/beesdoo_shift/i18n/fr.po
@@ -35,7 +35,7 @@ msgid "\n"
"\n"
"
You have been recorded as non-attended during your last shift (${format_tz(object.start_time,object.replaced_id.tz or 'Europe/Brussels','%d.%m.%Y - %H:%M')}),\n"
" and you were supposed to replace ${object.worker_id.name}.\n"
-"
Your current status is \"${object.worker_id.cooperative_status_ids.get_status_value()}\".\n"
+"
Your current status is \"${object.replaced_id.cooperative_status_ids.get_status_value()}\".\n"
" % endif\n"
"\n"
" % if not object.replaced_id:\n"
@@ -103,7 +103,7 @@ msgstr "
Bonjour ${object.replaced_id.name},\n"
"\n"
"
Tu as été encodé(e) comme absent(e) à ton dernier shift (${format_tz(object.start_time,object.replaced_id.tz or 'Europe/Brussels','%d.%m.%Y - %H:%M')}), et tu devais remplacer ${object.worker_id.name}.\n"
-"
Ton statut est désormais \"${object.worker_id.cooperative_status_ids.get_status_value()}\".\n"
+"
Ton statut est désormais \"${object.replaced_id.cooperative_status_ids.get_status_value()}\".\n"
" % endif\n"
"\n"
" % if not object.replaced_id:\n"
@@ -1614,7 +1614,7 @@ msgstr "Veuillez entrer votre login."
#: code:addons/beesdoo_shift/models/attendance_sheet.py:590
#, python-format
msgid "Please give your feedback about the number of workers."
-msgstr "L'équipe était-elle assez nombreuse ?"
+msgstr "Veuillez remplir votre retour concernant le nombre de travailleurs."
#. module: beesdoo_shift
#: code:addons/beesdoo_shift/wizard/validate_attendance_sheet.py:94
diff --git a/beesdoo_shift/i18n/fr_BE.po b/beesdoo_shift/i18n/fr_BE.po
index 96ea5c6..ff653ee 100644
--- a/beesdoo_shift/i18n/fr_BE.po
+++ b/beesdoo_shift/i18n/fr_BE.po
@@ -35,7 +35,7 @@ msgid "\n"
"\n"
"
You have been recorded as non-attended during your last shift (${format_tz(object.start_time,object.replaced_id.tz or 'Europe/Brussels','%d.%m.%Y - %H:%M')}),\n"
" and you were supposed to replace ${object.worker_id.name}.\n"
-"
Your current status is \"${object.worker_id.cooperative_status_ids.get_status_value()}\".\n"
+"
Your current status is \"${object.replaced_id.cooperative_status_ids.get_status_value()}\".\n"
" % endif\n"
"\n"
" % if not object.replaced_id:\n"
@@ -103,7 +103,7 @@ msgstr "
Bonjour ${object.replaced_id.name},\n"
"\n"
"
Tu as été encodé(e) comme absent(e) à ton dernier shift (${format_tz(object.start_time,object.replaced_id.tz or 'Europe/Brussels','%d.%m.%Y - %H:%M')}), et tu devais remplacer ${object.worker_id.name}.\n"
-"
Ton statut est désormais \"${object.worker_id.cooperative_status_ids.get_status_value()}\".\n"
+"
Ton statut est désormais \"${object.replaced_id.cooperative_status_ids.get_status_value()}\".\n"
" % endif\n"
"\n"
" % if not object.replaced_id:\n"
diff --git a/beesdoo_shift/i18n/nl_BE.po b/beesdoo_shift/i18n/nl_BE.po
index 9dafc42..08e3e74 100644
--- a/beesdoo_shift/i18n/nl_BE.po
+++ b/beesdoo_shift/i18n/nl_BE.po
@@ -35,7 +35,7 @@ msgid "\n"
"\n"
"
You have been recorded as non-attended during your last shift (${format_tz(object.start_time,object.replaced_id.tz or 'Europe/Brussels','%d.%m.%Y - %H:%M')}),\n"
" and you were supposed to replace ${object.worker_id.name}.\n"
-"
Your current status is \"${object.worker_id.cooperative_status_ids.get_status_value()}\".\n"
+"
Your current status is \"${object.replaced_id.cooperative_status_ids.get_status_value()}\".\n"
" % endif\n"
"\n"
" % if not object.replaced_id:\n"
@@ -105,7 +105,7 @@ msgstr "\n"
"\n"
"
You have been recorded as non-attended during your last shift (${format_tz(object.start_time,object.replaced_id.tz or 'Europe/Brussels','%d.%m.%Y - %H:%M')}),\n"
" and you were supposed to replace ${object.worker_id.name}.\n"
-"
Your current status is \"${object.worker_id.cooperative_status_ids.get_status_value()}\".\n"
+"
Your current status is \"${object.replaced_id.cooperative_status_ids.get_status_value()}\".\n"
" % endif\n"
"\n"
" % if not object.replaced_id:\n"
From f6b18e7f2b55fe6b69b4443ac4d14fd1c564e1fe Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Wed, 29 Jan 2020 11:12:32 +0100
Subject: [PATCH 150/208] [REF] b_shift : remove state computation for
attendance shifts
replacement_worker_id -> replaced_id
---
beesdoo_shift/i18n/fr.po | 4 +-
beesdoo_shift/i18n/fr_BE.po | 4 +-
beesdoo_shift/i18n/nl_BE.po | 4 +-
beesdoo_shift/models/__init__.py | 11 +--
beesdoo_shift/models/attendance_sheet.py | 89 +++++++++-------------
beesdoo_shift/security/ir.model.access.csv | 1 +
beesdoo_shift/tests/test_beesdoo_shift.py | 14 ++--
beesdoo_shift/views/attendance_sheet.xml | 14 +---
8 files changed, 60 insertions(+), 81 deletions(-)
diff --git a/beesdoo_shift/i18n/fr.po b/beesdoo_shift/i18n/fr.po
index ff653ee..7964daa 100644
--- a/beesdoo_shift/i18n/fr.po
+++ b/beesdoo_shift/i18n/fr.po
@@ -1692,12 +1692,12 @@ msgid "Replaced id"
msgstr "Id du remplaçant"
#. module: beesdoo_shift
-#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_replacement_worker_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_replaced_id
msgid "Replacement Worker"
msgstr "Travailleur remplaçant"
#. module: beesdoo_shift
-#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_expected_replacement_worker_id
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_expected_replaced_id
msgid "Replacement Worker (must be regular)"
msgstr "Travailleur remplaçant (doit être régulier)"
diff --git a/beesdoo_shift/i18n/fr_BE.po b/beesdoo_shift/i18n/fr_BE.po
index ff653ee..7964daa 100644
--- a/beesdoo_shift/i18n/fr_BE.po
+++ b/beesdoo_shift/i18n/fr_BE.po
@@ -1692,12 +1692,12 @@ msgid "Replaced id"
msgstr "Id du remplaçant"
#. module: beesdoo_shift
-#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_replacement_worker_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_replaced_id
msgid "Replacement Worker"
msgstr "Travailleur remplaçant"
#. module: beesdoo_shift
-#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_expected_replacement_worker_id
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_expected_replaced_id
msgid "Replacement Worker (must be regular)"
msgstr "Travailleur remplaçant (doit être régulier)"
diff --git a/beesdoo_shift/i18n/nl_BE.po b/beesdoo_shift/i18n/nl_BE.po
index 08e3e74..0b16aa5 100644
--- a/beesdoo_shift/i18n/nl_BE.po
+++ b/beesdoo_shift/i18n/nl_BE.po
@@ -1696,12 +1696,12 @@ msgid "Replaced id"
msgstr "Replaced id"
#. module: beesdoo_shift
-#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_replacement_worker_id
+#: model:ir.model.fields,field_description:beesdoo_shift.field_beesdoo_shift_sheet_expected_replaced_id
msgid "Replacement Worker"
msgstr "Vervangingswerker"
#. module: beesdoo_shift
-#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_expected_replacement_worker_id
+#: model:ir.model.fields,help:beesdoo_shift.field_beesdoo_shift_sheet_expected_replaced_id
msgid "Replacement Worker (must be regular)"
msgstr "Vervangingswerker (regelmatig werkregime vereist)"
diff --git a/beesdoo_shift/models/__init__.py b/beesdoo_shift/models/__init__.py
index 4bb8e67..f3e2a19 100644
--- a/beesdoo_shift/models/__init__.py
+++ b/beesdoo_shift/models/__init__.py
@@ -1,5 +1,6 @@
-from . import attendance_sheet
-from . import planning
-from . import res_config_settings
-from . import task
-from . import cooperative_status
+# -*- coding: utf-8 -*-
+import task
+import attendance_sheet
+import planning
+import res_config
+import cooperative_status
diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py
index 366b963..b405750 100644
--- a/beesdoo_shift/models/attendance_sheet.py
+++ b/beesdoo_shift/models/attendance_sheet.py
@@ -1,6 +1,4 @@
-import unittest
-
from datetime import date, datetime, timedelta
from lxml import etree
@@ -17,7 +15,11 @@ class AttendanceSheetShift(models.AbstractModel):
@api.model
def task_type_default_id(self):
parameters = self.env["ir.config_parameter"].sudo()
- id = int(parameters.get_param("beesdoo_shift.task_type_default_id", default=1))
+ id = int(
+ parameters.get_param(
+ "beesdoo_shift.default_task_type_id", default=1
+ )
+ )
task_types = self.env["beesdoo.shift.type"]
return task_types.browse(id)
@@ -30,7 +32,12 @@ class AttendanceSheetShift(models.AbstractModel):
ondelete="cascade",
)
state = fields.Selection(
- [("done", "Present"), ("absent", "Absent"),],
+ [
+ ("done", "Present"),
+ ("absent_0", "Absent - 0 Compensation"),
+ ("absent_1", "Absent - 1 Compensation"),
+ ("absent_2", "Absent - 2 Compensations"),
+ ],
string="Shift State",
required=True,
)
@@ -59,7 +66,7 @@ class AttendanceSheetShift(models.AbstractModel):
class AttendanceSheetShiftExpected(models.Model):
"""
- Already existing shifts on sheet creation.
+ Shifts already expected.
"""
_name = "beesdoo.shift.sheet.expected"
@@ -69,10 +76,7 @@ class AttendanceSheetShiftExpected(models.Model):
super_coop_id = fields.Many2one(
related="task_id.super_coop_id", store=True
)
- compensation_no = fields.Selection(
- [("0", "0"), ("1", "1"), ("2", "2"),], string="Compensations",
- )
- replacement_worker_id = fields.Many2one(
+ replaced_id = fields.Many2one(
"res.partner",
string="Replacement Worker",
help="Replacement Worker (must be regular)",
@@ -83,29 +87,15 @@ class AttendanceSheetShiftExpected(models.Model):
],
)
- @api.onchange("replacement_worker_id")
+ @api.onchange("replaced_id")
def on_change_replacement_worker(self):
- if self.replacement_worker_id:
+ if self.replaced_id:
self.state = "done"
- @api.onchange("state")
- def on_change_state(self):
- if not self.state or self.state == "done":
- self.compensation_no = False
- if self.state == "absent":
- self.compensation_no = "2"
-
- @api.constrains("state", "compensation_no")
- def _constrain_compensation_no(self):
- if self.state == "absent":
- if not self.compensation_no:
- raise UserError(_("A compensation number is required"))
-
class AttendanceSheetShiftAdded(models.Model):
"""
- Not already registered shifts.
- Added shifts are necessarily 'Present'
+ Shifts added during time slot.
"""
_name = "beesdoo.shift.sheet.added"
@@ -177,7 +167,11 @@ class AttendanceSheet(models.Model):
readonly=True,
help="Indicative maximum number of workers.",
)
- notes = fields.Text("Notes", default="", help="Notes about the attendance for the Members Office")
+ notes = fields.Text(
+ "Notes",
+ default="",
+ help="Notes about the attendance for the Members Office",
+ )
is_annotated = fields.Boolean(
compute="_compute_is_annotated",
string="Is annotated",
@@ -285,9 +279,9 @@ class AttendanceSheet(models.Model):
added_ids = [s.worker_id.id for s in self.added_shift_ids]
expected_ids = [s.worker_id.id for s in self.expected_shift_ids]
replacement_ids = [
- s.replacement_worker_id.id
+ s.replaced_id.id
for s in self.expected_shift_ids
- if s.replacement_worker_id.id
+ if s.replaced_id.id
]
ids = added_ids + expected_ids + replacement_ids
@@ -318,6 +312,7 @@ class AttendanceSheet(models.Model):
)
worker = self.env["res.partner"].search([("barcode", "=", barcode)])
+
if not len(worker):
raise UserError(
_(
@@ -364,11 +359,11 @@ class AttendanceSheet(models.Model):
for id in self.expected_shift_ids.ids:
shift = self.env["beesdoo.shift.sheet.expected"].browse(id)
if (
- shift.worker_id == worker and not shift.replacement_worker_id
- ) or shift.replacement_worker_id == worker:
+ shift.worker_id == worker and not shift.replaced_id
+ ) or shift.replaced_id == worker:
shift.state = "done"
return
- if shift.worker_id == worker and shift.replacement_worker_id:
+ if shift.worker_id == worker and shift.replaced_id:
raise UserError(
_("%s was expected as replaced.") % worker.name
)
@@ -416,10 +411,9 @@ class AttendanceSheet(models.Model):
"attendance_sheet_id": new_sheet.id,
"task_id": task.id,
"worker_id": task.worker_id.id,
- "replacement_worker_id": task.replaced_id.id,
+ "replaced_id": task.replaced_id.id,
"task_type_id": task.task_type_id.id,
- "state": "absent",
- "compensation_no": "2",
+ "state": "absent_2",
"working_mode": task.working_mode,
"is_compensation": task.is_compensation,
}
@@ -453,19 +447,10 @@ class AttendanceSheet(models.Model):
# Expected shifts status update
for expected_shift in self.expected_shift_ids:
actual_shift = expected_shift.task_id
- # Merge state with compensations number to fit Task model
- if (
- expected_shift.state == "absent"
- and expected_shift.compensation_no
- ):
- state_converted = "absent_%s" % expected_shift.compensation_no
- else:
- state_converted = expected_shift.state
-
- actual_shift.replaced_id = expected_shift.replacement_worker_id
- actual_shift.state = state_converted
+ actual_shift.replaced_id = expected_shift.replaced_id
+ actual_shift.state = expected_shift.state
- if expected_shift.state == "absent":
+ if expected_shift.state != "done":
mail_template = self.env.ref(
"beesdoo_shift.email_template_non_attendance", False
)
@@ -509,10 +494,8 @@ class AttendanceSheet(models.Model):
{
"state": added_shift.state,
"worker_id": added_shift.worker_id.id,
- "is_regular": not is_compensation
- and is_regular_worker,
- "is_compensation": is_compensation
- and is_regular_worker,
+ "is_regular": not is_compensation and is_regular_worker,
+ "is_compensation": is_compensation and is_regular_worker,
}
)
added_shift.task_id = actual_shift.id
@@ -530,7 +513,9 @@ class AttendanceSheet(models.Model):
raise UserError(_("The sheet has already been validated."))
if self.start_time > datetime.now():
raise UserError(
- _("Attendance sheet can only be validated once the shifts have started.")
+ _(
+ "Attendance sheet can only be validated once the shifts have started."
+ )
)
# Fields validation
diff --git a/beesdoo_shift/security/ir.model.access.csv b/beesdoo_shift/security/ir.model.access.csv
index e99c766..54c57d2 100644
--- a/beesdoo_shift/security/ir.model.access.csv
+++ b/beesdoo_shift/security/ir.model.access.csv
@@ -2,6 +2,7 @@ id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
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_shift,create_beesdoo_shift_sheet_shift,model_beesdoo_shift_sheet_shift,group_shift_attendance_sheet,1,1,1,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
diff --git a/beesdoo_shift/tests/test_beesdoo_shift.py b/beesdoo_shift/tests/test_beesdoo_shift.py
index 84a7fbc..7b3f358 100644
--- a/beesdoo_shift/tests/test_beesdoo_shift.py
+++ b/beesdoo_shift/tests/test_beesdoo_shift.py
@@ -223,17 +223,16 @@ class TestBeesdooShift(TransactionCase):
# Test consistency with actual shift for sheet 1
for shift in sheet_1.expected_shift_ids:
- self.assertEqual(shift.worker_id, shift.task_id.worker_id)
- self.assertEqual(
- shift.replacement_worker_id, shift.task_id.replaced_id
+ self.assertEquals(shift.worker_id, shift.task_id.worker_id)
+ self.assertEquals(
+ shift.replaced_id, shift.task_id.replaced_id
)
self.assertEqual(shift.task_type_id, shift.task_id.task_type_id)
self.assertEqual(shift.super_coop_id, shift.task_id.super_coop_id)
self.assertEqual(shift.working_mode, shift.task_id.working_mode)
# Status should be "absent" for all shifts
- self.assertEqual(shift.state, "absent")
- self.assertEqual(shift.compensation_no, "2")
+ self.assertEquals(shift.state, "absent_2")
# Empty shift should be considered in max worker number calculation
self.assertEqual(sheet_1.max_worker_no, 4)
@@ -330,8 +329,7 @@ class TestBeesdooShift(TransactionCase):
# Expected shifts edition
sheet_1.expected_shift_ids[1].state = "done"
- sheet_1.expected_shift_ids[1].compensation_no = False
- sheet_1.expected_shift_ids[2].compensation_no = "1"
+ sheet_1.expected_shift_ids[2].state = "absent_1"
# Added shits addition
sheet_1.added_shift_ids |= sheet_1.added_shift_ids.new(
@@ -408,7 +406,7 @@ class TestBeesdooShift(TransactionCase):
)
# sheet_1.expected_shift_ids[0].worker_id
- # sheet_1.expected_shift_ids[2].replacement_worker_id
+ # sheet_1.expected_shift_ids[2].replaced_id
def test_shift_counters(self):
"Test shift counters calculation and cooperative status update"
diff --git a/beesdoo_shift/views/attendance_sheet.xml b/beesdoo_shift/views/attendance_sheet.xml
index e7c4800..941916e 100644
--- a/beesdoo_shift/views/attendance_sheet.xml
+++ b/beesdoo_shift/views/attendance_sheet.xml
@@ -36,24 +36,18 @@
Expected Shifts Listbeesdoo.shift.sheet.expected
-
-
-
@@ -88,7 +82,7 @@
-
+
From 10665e96e561a665cefc389bcf82d8c3fba5470e Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Tue, 28 Jan 2020 16:42:33 +0100
Subject: [PATCH 151/208] [FIX] b_shift : security groups for coop admin
---
beesdoo_shift/__manifest__.py | 1 -
beesdoo_shift/demo/users.xml | 13 -------------
2 files changed, 14 deletions(-)
delete mode 100644 beesdoo_shift/demo/users.xml
diff --git a/beesdoo_shift/__manifest__.py b/beesdoo_shift/__manifest__.py
index c627ef6..a14dcfa 100644
--- a/beesdoo_shift/__manifest__.py
+++ b/beesdoo_shift/__manifest__.py
@@ -40,7 +40,6 @@
],
'demo': [
"demo/workers.xml",
- "demo/users.xml",
"demo/templates.xml",
]
}
diff --git a/beesdoo_shift/demo/users.xml b/beesdoo_shift/demo/users.xml
deleted file mode 100644
index c95957e..0000000
--- a/beesdoo_shift/demo/users.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
From 3a3d49e2cca43f43ca150f51b28758fcaf22a1a0 Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Wed, 29 Jan 2020 10:31:34 +0100
Subject: [PATCH 152/208] [ADD] b_shift : constrains on exempted workers
---
beesdoo_shift/models/attendance_sheet.py | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py
index b405750..85791d8 100644
--- a/beesdoo_shift/models/attendance_sheet.py
+++ b/beesdoo_shift/models/attendance_sheet.py
@@ -539,6 +539,14 @@ class AttendanceSheet(models.Model):
_("Working mode is missing for %s")
% added_shift.worker_id.name
)
+ if added_shift.working_mode not in ["regular", "irregular"]:
+ raise UserError(
+ _("Warning : Working mode for %s is %s")
+ % (
+ added_shift.worker_id.name,
+ added_shift.worker_id.working_mode,
+ )
+ )
for expected_shift in self.expected_shift_ids:
if not expected_shift.state:
From 2558aa481bc25918b5bba8db3da795989600b996 Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Wed, 29 Jan 2020 11:37:02 +0100
Subject: [PATCH 153/208] [REF] b_shift : demos
---
beesdoo_shift/demo/templates.xml | 4 ----
1 file changed, 4 deletions(-)
diff --git a/beesdoo_shift/demo/templates.xml b/beesdoo_shift/demo/templates.xml
index fb6143f..d635a58 100644
--- a/beesdoo_shift/demo/templates.xml
+++ b/beesdoo_shift/demo/templates.xml
@@ -7,25 +7,21 @@
Inventaire
- 1Inventaire frais et vrac.Bureau des Membres
- 2Gestion admin (encodage liste présences, etc.)Magasin
- 3Gestion du magasin.Découpe fromage
- 4Caisse, remplissage des rayons, accueil.
From a0401953be5736f2052b64508a4e6d2ddd204730 Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Wed, 29 Jan 2020 11:37:26 +0100
Subject: [PATCH 154/208] [ADD] b_shift : domain on attendance shifts
---
beesdoo_shift/views/attendance_sheet.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/beesdoo_shift/views/attendance_sheet.xml b/beesdoo_shift/views/attendance_sheet.xml
index 941916e..e8dee8a 100644
--- a/beesdoo_shift/views/attendance_sheet.xml
+++ b/beesdoo_shift/views/attendance_sheet.xml
@@ -62,6 +62,7 @@
Date: Wed, 29 Jan 2020 17:43:47 +0100
Subject: [PATCH 155/208] [FIX] b_shift : automatic error message
For regular non-attended not doing
their compensation shift.
---
beesdoo_shift/wizard/validate_attendance_sheet.py | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/beesdoo_shift/wizard/validate_attendance_sheet.py b/beesdoo_shift/wizard/validate_attendance_sheet.py
index 08b1fd4..8bfc4d6 100644
--- a/beesdoo_shift/wizard/validate_attendance_sheet.py
+++ b/beesdoo_shift/wizard/validate_attendance_sheet.py
@@ -33,7 +33,8 @@ class ValidateAttendanceSheet(models.TransientModel):
but should be doing their regular shifts. This warning is added
to sheet's notes at validation.
"""
- sheet = self.active_sheet
+ sheet = self._get_active_sheet()
+
warning_message = ""
if sheet:
for added_shift in sheet.added_shift_ids:
@@ -64,8 +65,8 @@ class ValidateAttendanceSheet(models.TransientModel):
default=_get_warning_regular_workers,
help="Is any regular worker doing its regular shift as an added one ?",
)
- notes = fields.Text(related="active_sheet.notes", readonly=False)
- feedback = fields.Text(related="active_sheet.feedback", readonly=False)
+ notes = fields.Text(related="active_sheet.notes", default="", readonly=False)
+ feedback = fields.Text(related="active_sheet.feedback", default="", readonly=False)
worker_nb_feedback = fields.Selection(
related="active_sheet.worker_nb_feedback", readonly=False, required=True
)
@@ -83,7 +84,6 @@ class ValidateAttendanceSheet(models.TransientModel):
@api.multi
def validate_sheet(self):
sheet = self.active_sheet
-
if self.card_support:
# Login with barcode
card = self.env["member.card"].search(
@@ -111,6 +111,10 @@ class ValidateAttendanceSheet(models.TransientModel):
)
)
- self.notes += self.warning_regular_workers
+ if self.notes and self.warning_regular_workers:
+ self.notes += self.warning_regular_workers
+ elif self.warning_regular_workers:
+ self.notes = self.warning_regular_workers
+
self.save()
sheet._validate(partner or self.env.user.partner_id)
From c162e9bb4841d823302cdb99d67ecd90d4b935ad Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Thu, 30 Jan 2020 11:05:21 +0100
Subject: [PATCH 156/208] [UPD] b_shift : security groups
Add a new groupe only for attendance
sheets validation.
---
beesdoo_shift/models/attendance_sheet.py | 8 +++++-
beesdoo_shift/security/group.xml | 28 +++++++++++--------
beesdoo_shift/security/ir.model.access.csv | 6 ++--
beesdoo_shift/tests/test_beesdoo_shift.py | 18 ++++++------
beesdoo_shift/views/attendance_sheet.xml | 16 +++++------
.../wizard/validate_attendance_sheet.py | 8 +++---
6 files changed, 48 insertions(+), 36 deletions(-)
diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py
index 85791d8..b86fd1d 100644
--- a/beesdoo_shift/models/attendance_sheet.py
+++ b/beesdoo_shift/models/attendance_sheet.py
@@ -306,6 +306,12 @@ class AttendanceSheet(models.Model):
)
def on_barcode_scanned(self, barcode):
+ if self.env.user.has_group("beesdoo_shift.group_shift_attendance"):
+ raise UserError(
+ _("You must be logged as 'Attendance Sheet Generic Access' "
+ " if you want to scan cards.")
+ )
+
if self.state == "validated":
raise UserError(
_("A validated attendance sheet can't be modified")
@@ -564,7 +570,7 @@ class AttendanceSheet(models.Model):
)
# Open a validation wizard only if not admin
- if self.env.user.has_group("beesdoo_shift.group_cooperative_admin"):
+ if self.env.user.has_group("beesdoo_shift.group_shift_attendance_sheet_validation"):
if not self.worker_nb_feedback:
raise UserError(
_("Please give your feedback about the number of workers.")
diff --git a/beesdoo_shift/security/group.xml b/beesdoo_shift/security/group.xml
index 4c4197e..bc64bed 100644
--- a/beesdoo_shift/security/group.xml
+++ b/beesdoo_shift/security/group.xml
@@ -4,17 +4,20 @@
+
+ Attendance Sheet Validation
+
+
+
- Shift and Worker Access
-
+ Shift and Worker Read Access
+
+
- Shift Management
-
-
+ Shifts and Attendance Sheets Management
+
+ Planning Management
@@ -25,10 +28,11 @@
Cooperative Admin
-
-
+
+
diff --git a/beesdoo_shift/security/ir.model.access.csv b/beesdoo_shift/security/ir.model.access.csv
index 54c57d2..76458a3 100644
--- a/beesdoo_shift/security/ir.model.access.csv
+++ b/beesdoo_shift/security/ir.model.access.csv
@@ -12,13 +12,13 @@ access_beesdoo_shift_daynumber,access_beesdoo_shift_daynumber,model_beesdoo_shif
read_beesdoo_shift_planning,read_beesdoo_shift_planning,model_beesdoo_shift_planning,,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_shift,manage_beesdoo_shift_shift,model_beesdoo_shift_shift,group_shift_attendance,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_beesdoo_shift_sheet_shift,beesdoo_shift_sheet_shift,model_beesdoo_shift_sheet_shift,group_shift_attendance,1,1,1,1
+manage_beesdoo_shift_sheet_expected,manage_beesdoo_shift_sheet_expected,model_beesdoo_shift_sheet_expected,group_shift_attendance,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
diff --git a/beesdoo_shift/tests/test_beesdoo_shift.py b/beesdoo_shift/tests/test_beesdoo_shift.py
index 7b3f358..a97fbb7 100644
--- a/beesdoo_shift/tests/test_beesdoo_shift.py
+++ b/beesdoo_shift/tests/test_beesdoo_shift.py
@@ -257,6 +257,7 @@ class TestBeesdooShift(TransactionCase):
self.user_generic
)._generate_attendance_sheet()
sheet_1 = self.search_sheets(self.start_in_1, self.end_in_1,)
+ sheet_1 = sheet_1.sudo(self.user_generic)
"""
Expected workers are :
@@ -354,14 +355,6 @@ class TestBeesdooShift(TransactionCase):
}
)
- # Wait necessary time for shifts to begin
- waiting_time = (self.start_in_1 - datetime.now()).total_seconds()
- if waiting_time > 0:
- with self.assertRaises(UserError) as e:
- sheet_1.validate_with_checks()
- self.assertIn("wait", str(e.exception))
- time.sleep(waiting_time)
-
# TODO: test validation with wizard (as generic user)
# class odoo.tests.common.Form(recordp, view=None)
# is only available from version 12
@@ -370,6 +363,15 @@ class TestBeesdooShift(TransactionCase):
# Validation without wizard (as admin user)
sheet_1 = sheet_1.sudo(self.user_admin)
+
+ # Wait necessary time for shifts to begin
+ waiting_time = (self.start_in_1 - datetime.now()).total_seconds()
+ if waiting_time > 0:
+ with self.assertRaises(UserError) as e:
+ sheet_1.validate_with_checks()
+ self.assertIn("wait", str(e.exception))
+ time.sleep(waiting_time)
+
sheet_1.worker_nb_feedback = "enough"
sheet_1.feedback = "Great session."
sheet_1.notes = "Important information."
diff --git a/beesdoo_shift/views/attendance_sheet.xml b/beesdoo_shift/views/attendance_sheet.xml
index e8dee8a..a3480fd 100644
--- a/beesdoo_shift/views/attendance_sheet.xml
+++ b/beesdoo_shift/views/attendance_sheet.xml
@@ -147,11 +147,11 @@
@@ -57,17 +54,14 @@
Added Shifts Listbeesdoo.shift.sheet.added
-
+
-
+
@@ -79,12 +73,15 @@
beesdoo.shift.sheet.expected
From d163dba0c22f5f148d6e27b2b9406fcba6f97d21 Mon Sep 17 00:00:00 2001
From: Elouan Le Bars
Date: Thu, 6 Feb 2020 15:52:41 +0100
Subject: [PATCH 174/208] [REF] b_shift : attendance sheet validation wizard
---
beesdoo_shift/wizard/validate_attendance_sheet.py | 6 +++++-
beesdoo_shift/wizard/validate_attendance_sheet.xml | 2 +-
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/beesdoo_shift/wizard/validate_attendance_sheet.py b/beesdoo_shift/wizard/validate_attendance_sheet.py
index 2b295d3..dd90506 100644
--- a/beesdoo_shift/wizard/validate_attendance_sheet.py
+++ b/beesdoo_shift/wizard/validate_attendance_sheet.py
@@ -68,7 +68,7 @@ class ValidateAttendanceSheet(models.TransientModel):
notes = fields.Text(related="active_sheet.notes", default="", readonly=False)
feedback = fields.Text(related="active_sheet.feedback", default="", readonly=False)
worker_nb_feedback = fields.Selection(
- related="active_sheet.worker_nb_feedback", readonly=False, required=True
+ related="active_sheet.worker_nb_feedback", readonly=False
)
def on_barcode_scanned(self, barcode):
@@ -84,6 +84,10 @@ class ValidateAttendanceSheet(models.TransientModel):
@api.multi
def validate_sheet(self):
sheet = self.active_sheet
+
+ if not self.worker_nb_feedback:
+ raise UserError(_("Please give your feedback on the number of workers."))
+
if self.card_support:
# Login with barcode
card = self.env["member.card"].search(
diff --git a/beesdoo_shift/wizard/validate_attendance_sheet.xml b/beesdoo_shift/wizard/validate_attendance_sheet.xml
index 0d475a3..05de63b 100644
--- a/beesdoo_shift/wizard/validate_attendance_sheet.xml
+++ b/beesdoo_shift/wizard/validate_attendance_sheet.xml
@@ -35,7 +35,7 @@
@@ -819,17 +824,6 @@
-
-
-
-
-
-
-
-
-
-
-
@@ -863,18 +857,18 @@
-
-
+
+
-
-
+
+
-
-
+
+
@@ -883,7 +877,10 @@
-
+
+
+
+
@@ -925,7 +922,7 @@
-
+
Please, subscribe, in priority, to the highlighted shifts. To sign up to a shift click on the
subscribe button. Notice that you can not unsubscribe online. To unsubscribe to a shift, please,
@@ -943,17 +940,6 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/beesdoo_website_shift/views/shift_website_templates.xml b/beesdoo_website_shift/views/shift_website_templates.xml
index bc261f7..96894e3 100644
--- a/beesdoo_website_shift/views/shift_website_templates.xml
+++ b/beesdoo_website_shift/views/shift_website_templates.xml
@@ -3,7 +3,7 @@
Copyright 2017-2018 Rémy Taymans
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-->
-
+
@@ -11,13 +11,13 @@
Shifts Irregular/shift_irregular_worker
- 50
+ 50Shifts Regular/shift_template_regular_worker
- 51
+ 51
@@ -206,4 +206,4 @@
-
+
diff --git a/beesdoo_worker_status/__init__.py b/beesdoo_worker_status/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/beesdoo_worker_status/__manifest__.py b/beesdoo_worker_status/__manifest__.py
new file mode 100644
index 0000000..13c8ca7
--- /dev/null
+++ b/beesdoo_worker_status/__manifest__.py
@@ -0,0 +1,26 @@
+{
+ 'name': "Beescoop Worker Status manager",
+
+ 'summary': """
+ Worker status management specific to beescoop""",
+
+ 'description': """
+
+ """,
+
+ 'author': "Thibault Francois, Elouan Le Bars, Coop It Easy",
+ 'website': "https://github.com/beescoop/Obeesdoo",
+
+ 'category': 'Cooperative management',
+ 'version': '12.0.1.0.0',
+
+ 'depends': [
+ 'beesdoo_base',
+ 'beesdoo_shift',
+ ],
+
+ 'data': [
+ ],
+ 'demo': [
+ ]
+}
diff --git a/beesdoo_worker_status/models/__init__.py b/beesdoo_worker_status/models/__init__.py
new file mode 100644
index 0000000..bf0149d
--- /dev/null
+++ b/beesdoo_worker_status/models/__init__.py
@@ -0,0 +1 @@
+from . import cooperative_status
\ No newline at end of file
diff --git a/beesdoo_worker_status/models/cooperative_status.py b/beesdoo_worker_status/models/cooperative_status.py
new file mode 100644
index 0000000..0a05e88
--- /dev/null
+++ b/beesdoo_worker_status/models/cooperative_status.py
@@ -0,0 +1,266 @@
+from odoo import models, fields, api, _
+from odoo.exceptions import ValidationError, UserError
+
+from datetime import timedelta, datetime
+import logging
+
+class CooperativeStatus(models.Model):
+ _inherit = 'cooperative.status'
+ _period = 28
+
+ ######################################################
+ # #
+ # Override of method to define status behavior #
+ # #
+ ######################################################
+
+ future_alert_date = fields.Date(compute='_compute_future_alert_date')
+ next_countdown_date = fields.Date(compute='_compute_next_countdown_date')
+
+
+ @api.depends('today', 'irregular_start_date', 'sr', 'holiday_start_time',
+ 'holiday_end_time', 'temporary_exempt_start_date',
+ 'temporary_exempt_end_date')
+ def _compute_future_alert_date(self):
+ """Compute date before which the worker is up to date"""
+ for rec in self:
+ # Only for irregular worker
+ if rec.working_mode != 'irregular' and not rec.irregular_start_date:
+ rec.future_alert_date = False
+ # Alert start time already set
+ elif rec.alert_start_time:
+ rec.future_alert_date = False
+ # Holidays are not set properly
+ elif bool(rec.holiday_start_time) != bool(rec.holiday_end_time):
+ rec.future_alert_date = False
+ # Exemption have not a start and end time
+ elif (bool(rec.temporary_exempt_start_date)
+ != bool(rec.temporary_exempt_end_date)):
+ rec.future_alert_date = False
+ else:
+ date = rec.today
+ counter = rec.sr
+ # Simulate the countdown
+ while counter > 0:
+ 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):
+ 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):
+ continue
+ else:
+ counter -= 1
+ 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',
+ 'temporary_exempt_end_date')
+ def _compute_next_countdown_date(self):
+ """
+ Compute the following countdown date. This date is the date when
+ the worker will see his counter changed du to the cron. This
+ date is like the birthday date of the worker that occurred each
+ PERIOD.
+ """
+ for rec in self:
+ # Only for irregular worker
+ if rec.working_mode != 'irregular' and not rec.irregular_start_date:
+ rec.next_countdown_date = False
+ # Holidays are not set properly
+ elif bool(rec.holiday_start_time) != bool(rec.holiday_end_time):
+ rec.next_countdown_date = False
+ # Exemption have not a start and end time
+ elif (bool(rec.temporary_exempt_start_date)
+ != bool(rec.temporary_exempt_end_date)):
+ rec.next_countdown_date = False
+ else:
+ date = rec.today
+ next_countdown_date = False
+ while not next_countdown_date:
+ 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
+ rec.next_countdown_date = next_countdown_date
+
+
+ #####################################
+ # Status Change implementation #
+ #####################################
+ def _set_regular_status(self, grace_delay, alert_delay):
+ self.ensure_one()
+ counter_unsubscribe = int(self.env['ir.config_parameter'].get_param('regular_counter_to_unsubscribe', -4))
+ ok = self.sr >= 0 and self.sc >= 0
+ grace_delay = grace_delay + self.time_extension
+
+ if (self.sr + self.sc) <= counter_unsubscribe or self.unsubscribed:
+ return 'unsubscribed'
+ #Check if exempted. Exempt end date is not required.
+ if self.temporary_exempt_start_date and self.today >= self.temporary_exempt_start_date:
+ if not self.temporary_exempt_end_date or self.today <= self.temporary_exempt_end_date:
+ return 'exempted'
+
+ #Transition to alert sr < 0 or stay in alert sr < 0 or sc < 0 and thus alert time is defined
+ if not ok and self.alert_start_time and self.extension_start_time and self.today <= add_days_delta(self.extension_start_time, grace_delay):
+ return 'extension'
+ if not ok and self.alert_start_time and self.extension_start_time and self.today > add_days_delta(self.extension_start_time, grace_delay):
+ return 'suspended'
+ if not ok and self.alert_start_time and self.today > add_days_delta(self.alert_start_time, alert_delay):
+ return 'suspended'
+ if (self.sr < 0) or (not ok and self.alert_start_time):
+ return 'alert'
+
+ if (
+ self.holiday_start_time
+ and self.holiday_end_time
+ and self.today >= self.holiday_start_time
+ and self.today <= self.holiday_end_time
+ ):
+
+ return 'holiday'
+ elif ok or (not self.alert_start_time and self.sr >= 0):
+ return 'ok'
+
+ def _set_irregular_status(self, grace_delay, alert_delay):
+ counter_unsubscribe = int(self.env['ir.config_parameter'].get_param('irregular_counter_to_unsubscribe', -3))
+ self.ensure_one()
+ ok = self.sr >= 0
+ grace_delay = grace_delay + self.time_extension
+ if self.sr <= counter_unsubscribe or self.unsubscribed:
+ return 'unsubscribed'
+ #Check if exempted. Exempt end date is not required.
+ elif self.temporary_exempt_start_date and self.today >= self.temporary_exempt_start_date:
+ if not self.temporary_exempt_end_date or self.today <= self.temporary_exempt_end_date:
+ return 'exempted'
+ #Transition to alert sr < 0 or stay in alert sr < 0 or sc < 0 and thus alert time is defined
+ elif not ok and self.alert_start_time and self.extension_start_time and self.today <= add_days_delta(self.extension_start_time, grace_delay):
+ return 'extension'
+ elif not ok and self.alert_start_time and self.extension_start_time and self.today > add_days_delta(self.extension_start_time, grace_delay):
+ return 'suspended'
+ elif not ok and self.alert_start_time and self.today > add_days_delta(self.alert_start_time, alert_delay):
+ return 'suspended'
+ elif (self.sr < 0) or (not ok and self.alert_start_time):
+ return 'alert'
+
+ elif (
+ self.holiday_start_time
+ and self.holiday_end_time
+ and self.today >= self.holiday_start_time
+ and self.today <= self.holiday_end_time
+ ):
+ return 'holiday'
+ elif ok or (not self.alert_start_time and self.sr >= 0):
+ return 'ok'
+
+ def _state_change(self, new_state):
+ self.ensure_one()
+ if new_state == 'alert':
+ self.write({'alert_start_time': self.today, 'extension_start_time': False, 'time_extension': 0})
+ if new_state == 'ok':
+ data = {'extension_start_time': False, 'time_extension': 0}
+ data['alert_start_time'] = False
+ self.write(data)
+ if new_state == 'unsubscribed' or new_state == 'resigning':
+ # Remove worker from task_templates
+ self.cooperator_id.sudo().write(
+ {'subscribed_shift_ids': [(5, 0, 0)]})
+ # Remove worker from supercoop in task_templates
+ task_tpls = self.env['beesdoo.shift.template'].search(
+ [('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)
+ self.env['beesdoo.shift.shift'].sudo().unsubscribe_from_today(
+ [self.cooperator_id.id], now=fields.Datetime.now()
+ )
+
+ def _change_counter(self, data):
+ """
+ Call when a shift state is changed
+ use data generated by _get_counter_date_state_change
+ """
+ self.sc += data.get('sc', 0)
+ self.sr += data.get('sr', 0)
+ self.irregular_absence_counter += data.get('irregular_absence_counter', 0)
+ self.irregular_absence_date = data.get('irregular_absence_date', False)
+
+ ###############################################
+ ###### Irregular Cron implementation ##########
+ ###############################################
+
+ def _get_irregular_worker_domain(self):
+ return ['&',
+ '&',
+ '&',
+ ('status', 'not in', ['unsubscribed', 'exempted']),
+ ('working_mode', '=', 'irregular'),
+ ('irregular_start_date', '!=', False),
+ '|',
+ '|', ('holiday_start_time', '=', False), ('holiday_end_time', '=', False),
+ '|', ('holiday_start_time', '>', today), ('holiday_end_time', '<', today),
+ ]
+
+ def _change_irregular_counter(self):
+ if self.sr > 0:
+ self.sr -= 1
+ elif self.alert_start_time:
+ self.sr -= 1
+ else:
+ self.sr -= 2
+
+ ##################################
+ # Internal Implementation #
+ ##################################
+ def _next_countdown_date(self, irregular_start_date, today=False):
+ """
+ Return the next countdown date given irregular_start_date and
+ today dates.
+ This does not take holiday and other status into account.
+ """
+ today = today or fields.Date.today()
+
+ delta = (today - irregular_start_date).days
+ if not delta % PERIOD:
+ return today
+ return add_days_delta(today, PERIOD - (delta % PERIOD))
+
+
+class ResPartner(models.Model):
+ _inherit = 'res.partner'
+ """
+ Override is_worker definition
+ You need have subscribe to a A Share
+ """
+ is_worker = fields.Boolean(compute="_is_worker", search="_search_worker")
+
+ def _is_worker(self):
+ for rec in self:
+ rec.is_worker = rec.cooperator_type == 'share_a'
+
+ def _search_worker(self, operator, value):
+ if (operator == '=' and value) or (operator == '!=' and not value):
+ return [('cooperator_type', '=', 'share_a')]
+ else:
+ return [('cooperator_type', '!=', 'share_a')]
diff --git a/beesdoo_worker_status/models/task.py b/beesdoo_worker_status/models/task.py
new file mode 100644
index 0000000..0720b70
--- /dev/null
+++ b/beesdoo_worker_status/models/task.py
@@ -0,0 +1,81 @@
+import json
+from datetime import datetime, timedelta
+
+from odoo import _, api, fields, models
+from odoo.exceptions import UserError, ValidationError
+
+
+
+class Task(models.Model):
+ _inherit = 'beesdoo.shift.shift'
+
+ #################################
+ # State Definition #
+ #################################
+
+ def _get_selection_status(self):
+ return [
+ ("open","Confirmed"),
+ ("done","Attended"),
+ ("absent_2","Absent - 2 compensations"),
+ ("absent_1","Absent - 1 compensation"),
+ ("absent_0","Absent - 0 compensation"),
+ ("cancel","Cancelled")
+ ]
+
+ def _get_color_mapping(state):
+ return {
+ "draft": 0,
+ "open": 1,
+ "done": 5,
+ "absent_2": 2,
+ "absent_1": 7,
+ "absent_0": 3,
+ "cancel": 9,
+ }[state]
+
+ def _get_final_state():
+ return ["done", "absent_2", "absent_1", "absent_0"]
+
+
+ ##############################################
+ # Change counter when state change #
+ ##############################################
+ def _get_counter_date_state_change(self, new_state):
+ data = {}
+ if self.worker_id.working_mode == 'regular':
+
+ if not self.replaced_id: #No replacement case
+ status = self.worker_id.cooperative_status_ids[0]
+ else:
+ status = self.replaced_id.cooperative_status_ids[0]
+
+ 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_state == "absent_2":
+ data['sr'] = -1
+ data['sc'] = -1
+
+ 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_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_state == "absent_2" or new_state == "absent_1":
+ if new_state == "absent_2":
+ data['sr'] = -1
+ data['irregular_absence_date'] = self.start_time.date()
+ data['irregular_absence_counter'] = -1
+ return data
\ No newline at end of file
diff --git a/beesdoo_worker_status/tests/__init__.py b/beesdoo_worker_status/tests/__init__.py
new file mode 100644
index 0000000..1505d70
--- /dev/null
+++ b/beesdoo_worker_status/tests/__init__.py
@@ -0,0 +1 @@
+from . import test_beesdoo_shift
diff --git a/beesdoo_worker_status/tests/test_beesdoo_shift.py b/beesdoo_worker_status/tests/test_beesdoo_shift.py
new file mode 100644
index 0000000..08af349
--- /dev/null
+++ b/beesdoo_worker_status/tests/test_beesdoo_shift.py
@@ -0,0 +1,247 @@
+# Copyright 2019 - Today Coop IT Easy SCRLfs ()
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
+
+import time
+from datetime import datetime, timedelta
+
+from odoo import exceptions, fields
+from odoo.exceptions import UserError, ValidationError
+from odoo.tests.common import TransactionCase
+
+
+class TestBeesdooShift(TransactionCase):
+ def setUp(self):
+ super(TestBeesdooShift, self).setUp()
+ self.shift_model = self.env["beesdoo.shift.shift"]
+ self.shift_template_model = self.env["beesdoo.shift.template"]
+ self.attendance_sheet_model = self.env["beesdoo.shift.sheet"]
+ self.attendance_sheet_shift_model = self.env[
+ "beesdoo.shift.sheet.shift"
+ ]
+ self.shift_expected_model = self.env["beesdoo.shift.sheet.expected"]
+ self.shift_added_model = self.env["beesdoo.shift.sheet.added"]
+ self.task_type_default_id = self.env["ir.config_parameter"].sudo().get_param(
+ "beesdoo_shift.task_type_default_id"
+ )
+
+ self.current_time = datetime.now()
+ self.user_admin = self.env.ref("base.user_root")
+ self.user_generic = self.env.ref(
+ "beesdoo_base.beesdoo_shift_user_1_demo"
+ )
+ self.user_permanent = self.env.ref(
+ "beesdoo_base.beesdoo_shift_user_2_demo"
+ )
+
+ self.setting_wizard = self.env["beesdoo.shift.config.settings"].sudo(
+ self.user_admin
+ )
+
+ self.worker_regular_1 = self.env.ref(
+ "beesdoo_base.res_partner_cooperator_6_demo"
+ )
+ self.worker_regular_2 = self.env.ref(
+ "beesdoo_base.res_partner_cooperator_5_demo"
+ )
+ self.worker_regular_3 = self.env.ref(
+ "beesdoo_base.res_partner_cooperator_3_demo"
+ )
+ self.worker_regular_super_1 = self.env.ref(
+ "beesdoo_base.res_partner_cooperator_1_demo"
+ )
+ self.worker_irregular_1 = self.env.ref(
+ "beesdoo_base.res_partner_cooperator_2_demo"
+ )
+ self.worker_irregular_2 = self.env.ref(
+ "beesdoo_base.res_partner_cooperator_4_demo"
+ )
+
+ self.task_type_1 = self.env.ref(
+ "beesdoo_shift.beesdoo_shift_task_type_1_demo"
+ )
+ self.task_type_2 = self.env.ref(
+ "beesdoo_shift.beesdoo_shift_task_type_2_demo"
+ )
+ self.task_type_3 = self.env.ref(
+ "beesdoo_shift.beesdoo_shift_task_type_3_demo"
+ )
+
+ self.task_template_1 = self.env.ref(
+ "beesdoo_shift.beesdoo_shift_task_template_1_demo"
+ )
+ self.task_template_2 = self.env.ref(
+ "beesdoo_shift.beesdoo_shift_task_template_2_demo"
+ )
+
+ # Set time in and out of generation interval parameter
+ self.start_in_1 = self.current_time + timedelta(seconds=2)
+ self.end_in_1 = self.current_time + timedelta(minutes=10)
+ self.start_in_2 = self.current_time + timedelta(minutes=9)
+ self.end_in_2 = self.current_time + timedelta(minutes=21)
+ self.start_out_1 = self.current_time - timedelta(minutes=50)
+ self.end_out_1 = self.current_time - timedelta(minutes=20)
+ self.start_out_2 = self.current_time + timedelta(minutes=40)
+ self.end_out_2 = self.current_time + timedelta(minutes=50)
+
+ self.shift_regular_regular_1 = self.shift_model.create(
+ {
+ "task_template_id": self.task_template_1.id,
+ "task_type_id": self.task_type_1.id,
+ "worker_id": self.worker_regular_1.id,
+ "start_time": self.start_in_1,
+ "end_time": self.end_in_1,
+ "is_regular": True,
+ "is_compensation": False,
+ }
+ )
+ self.shift_regular_regular_2 = self.shift_model.create(
+ {
+ "task_type_id": self.task_type_2.id,
+ "worker_id": self.worker_regular_2.id,
+ "start_time": self.start_out_1,
+ "end_time": self.end_out_1,
+ "is_regular": True,
+ "is_compensation": False,
+ }
+ )
+ self.shift_regular_regular_replaced_1 = self.shift_model.create(
+ {
+ "task_template_id": self.task_template_1.id,
+ "task_type_id": self.task_type_3.id,
+ "worker_id": self.worker_regular_3.id,
+ "start_time": self.start_in_1,
+ "end_time": self.end_in_1,
+ "is_regular": True,
+ "is_compensation": False,
+ "replaced_id": self.worker_regular_2.id,
+ }
+ )
+ future_shift_regular = self.shift_model.create(
+ {
+ "task_template_id": self.task_template_2.id,
+ "task_type_id": self.task_type_1.id,
+ "worker_id": self.worker_regular_super_1.id,
+ "start_time": self.start_in_2,
+ "end_time": self.end_in_2,
+ "is_regular": False,
+ "is_compensation": True,
+ }
+ )
+ self.shift_irregular_1 = self.shift_model.create(
+ {
+ "task_template_id": self.task_template_1.id,
+ "task_type_id": self.task_type_2.id,
+ "worker_id": self.worker_irregular_1.id,
+ "start_time": self.start_in_1,
+ "end_time": self.end_in_1,
+ }
+ )
+ self.shift_irregular_2 = self.shift_model.create(
+ {
+ "task_type_id": self.task_type_3.id,
+ "worker_id": self.worker_irregular_2.id,
+ "start_time": self.start_out_2,
+ "end_time": self.end_out_2,
+ }
+ )
+ self.shift_empty_1 = self.shift_model.create(
+ {
+ "task_template_id": self.task_template_1.id,
+ "task_type_id": self.task_type_1.id,
+ "start_time": self.start_in_1,
+ "end_time": self.end_in_1,
+ }
+ )
+
+ def test_shift_counters(self):
+ "Test shift counters calculation and cooperative status update"
+
+ status_1 = self.worker_regular_1.cooperative_status_ids
+ status_2 = self.worker_regular_3.cooperative_status_ids
+ status_3 = self.worker_irregular_1.cooperative_status_ids
+
+ shift_regular = self.shift_model.create(
+ {
+ "task_template_id": self.task_template_1.id,
+ "task_type_id": self.task_type_1.id,
+ "worker_id": self.worker_regular_1.id,
+ "start_time": datetime.now() - timedelta(minutes=50),
+ "end_time": datetime.now() - timedelta(minutes=40),
+ "is_regular": True,
+ "is_compensation": False,
+ }
+ )
+ future_shift_regular = self.shift_model.create(
+ {
+ "task_template_id": self.task_template_2.id,
+ "task_type_id": self.task_type_2.id,
+ "worker_id": self.worker_regular_1.id,
+ "start_time": datetime.now() + timedelta(minutes=20),
+ "end_time": datetime.now() + timedelta(minutes=30),
+ "is_regular": True,
+ "is_compensation": False,
+ }
+ )
+ shift_irregular = self.shift_model.create(
+ {
+ "task_template_id": self.task_template_2.id,
+ "task_type_id": self.task_type_3.id,
+ "worker_id": self.worker_irregular_1.id,
+ "start_time": datetime.now() - timedelta(minutes=15),
+ "end_time": datetime.now() - timedelta(minutes=10),
+ }
+ )
+
+ # For a regular worker
+ status_1.sr = 0
+ status_1.sc = 0
+ self.assertEqual(status_1.status, "ok")
+ shift_regular.state = "absent_1"
+ self.assertEqual(status_1.sr, -1)
+ self.assertEqual(status_1.status, "alert")
+ shift_regular.state = "done"
+ self.assertEquals(status_1.sr, 0)
+ self.assertEquals(status_1.sc, 0)
+ shift_regular.state = "open"
+ shift_regular.write({"is_regular": False, "is_compensation": True})
+ shift_regular.state = "done"
+ self.assertEquals(status_1.sr, 1)
+ self.assertEquals(status_1.sc, 0)
+
+ # Check unsubscribed status
+ status_1.sr = -1
+ status_1.sc = -1
+
+ # Subscribe him to another future shift
+ future_shift_regular.worker_id = self.worker_regular_1
+ with self.assertRaises(ValidationError) as e:
+ future_shift_regular.state = "absent_2"
+ self.assertIn("future", str(e.exception))
+ status_1.sr = -2
+ status_1.sc = -2
+ self.assertEquals(status_1.status, "unsubscribed")
+
+ # Should be unsubscribed from future shift
+ self.assertFalse(future_shift_regular.worker_id)
+
+ # With replacement worker (self.worker_regular_3)
+ shift_regular.state = "open"
+ status_1.sr = 0
+ status_1.sc = 0
+ status_2.sr = 0
+ status_2.sc = 0
+ shift_regular.replaced_id = self.worker_regular_3
+ shift_regular.state = "absent_2"
+ self.assertEqual(status_1.sr, 0)
+ self.assertEqual(status_1.sc, 0)
+ self.assertEqual(status_2.sr, -1)
+ self.assertEqual(status_2.sc, -1)
+
+ # For an irregular worker
+ status_3.sr = 0
+ status_3.sc = 0
+ self.assertEqual(status_3.status, "ok")
+ shift_irregular.state = "done"
+ self.assertEqual(status_3.sr, 1)
+ shift_irregular.state = "absent_2"
+ self.assertEqual(status_3.sr, -1)
From d4f8d2c32adfcf48ef766e5ef8974f5f29174627 Mon Sep 17 00:00:00 2001
From: odoo-pda
Date: Tue, 10 Mar 2020 18:42:16 +0100
Subject: [PATCH 185/208] [FIX] make beesdoo_shift installable on an empty db.
---
beesdoo_shift/__manifest__.py | 1 -
beesdoo_shift/models/cooperative_status.py | 1 -
beesdoo_shift/models/planning.py | 2 +-
beesdoo_shift/security/group.xml | 2 +-
beesdoo_shift/views/task_template.xml | 2 +-
beesdoo_shift_atttendance/__manifest__.py | 1 +
beesdoo_shift_atttendance/wizard/__init__.py | 1 +
.../wizard/generate_missing_attendance_sheets.py | 0
.../wizard/generate_missing_attendance_sheets.xml | 0
9 files changed, 5 insertions(+), 5 deletions(-)
rename {beesdoo_shift => beesdoo_shift_atttendance}/wizard/generate_missing_attendance_sheets.py (100%)
rename {beesdoo_shift => beesdoo_shift_atttendance}/wizard/generate_missing_attendance_sheets.xml (100%)
diff --git a/beesdoo_shift/__manifest__.py b/beesdoo_shift/__manifest__.py
index 1497cdb..3205305 100644
--- a/beesdoo_shift/__manifest__.py
+++ b/beesdoo_shift/__manifest__.py
@@ -36,7 +36,6 @@
"wizard/extension.xml",
"wizard/holiday.xml",
"wizard/temporary_exemption.xml",
- "wizard/generate_missing_attendance_sheets.xml",
],
'demo': [
"demo/cooperators.xml",
diff --git a/beesdoo_shift/models/cooperative_status.py b/beesdoo_shift/models/cooperative_status.py
index 25ff584..ddffe5d 100644
--- a/beesdoo_shift/models/cooperative_status.py
+++ b/beesdoo_shift/models/cooperative_status.py
@@ -114,7 +114,6 @@ class CooperativeStatus(models.Model):
elif rec.working_mode == 'exempt':
rec.status = 'ok'
-
_sql_constraints = [
('cooperator_uniq', 'unique (cooperator_id)', _('You can only set one cooperator status per cooperator')),
]
diff --git a/beesdoo_shift/models/planning.py b/beesdoo_shift/models/planning.py
index 45b3635..f730184 100644
--- a/beesdoo_shift/models/planning.py
+++ b/beesdoo_shift/models/planning.py
@@ -82,7 +82,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")
+ # attendance_sheet_id = fields.Many2one('beesdoo.shift.sheet', string="Attendance Sheet") FIXME removed because beesdoo.shift.sheet is from another module.
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)])
diff --git a/beesdoo_shift/security/group.xml b/beesdoo_shift/security/group.xml
index 4540e32..8876384 100644
--- a/beesdoo_shift/security/group.xml
+++ b/beesdoo_shift/security/group.xml
@@ -2,7 +2,7 @@
Shift and Worker Read Access
-
+
Shifts and Attendance Sheets Management
diff --git a/beesdoo_shift/views/task_template.xml b/beesdoo_shift/views/task_template.xml
index 613aad1..bfd3b20 100644
--- a/beesdoo_shift/views/task_template.xml
+++ b/beesdoo_shift/views/task_template.xml
@@ -160,7 +160,7 @@
+ groups="beesdoo_shift.group_shift_attendance" />
diff --git a/beesdoo_shift_atttendance/__manifest__.py b/beesdoo_shift_atttendance/__manifest__.py
index 09d5cf7..971c357 100644
--- a/beesdoo_shift_atttendance/__manifest__.py
+++ b/beesdoo_shift_atttendance/__manifest__.py
@@ -30,6 +30,7 @@
"security/ir.model.access.csv",
"views/res_config_settings_view.xml",
"wizard/validate_attendance_sheet.xml",
+ "wizard/generate_missing_attendance_sheets.xml",
"views/attendance_sheet.xml",
],
'demo': []
diff --git a/beesdoo_shift_atttendance/wizard/__init__.py b/beesdoo_shift_atttendance/wizard/__init__.py
index 1a045d3..46a772b 100644
--- a/beesdoo_shift_atttendance/wizard/__init__.py
+++ b/beesdoo_shift_atttendance/wizard/__init__.py
@@ -1 +1,2 @@
from . import validate_attendance_sheet
+from . import generate_missing_attendance_sheets
diff --git a/beesdoo_shift/wizard/generate_missing_attendance_sheets.py b/beesdoo_shift_atttendance/wizard/generate_missing_attendance_sheets.py
similarity index 100%
rename from beesdoo_shift/wizard/generate_missing_attendance_sheets.py
rename to beesdoo_shift_atttendance/wizard/generate_missing_attendance_sheets.py
diff --git a/beesdoo_shift/wizard/generate_missing_attendance_sheets.xml b/beesdoo_shift_atttendance/wizard/generate_missing_attendance_sheets.xml
similarity index 100%
rename from beesdoo_shift/wizard/generate_missing_attendance_sheets.xml
rename to beesdoo_shift_atttendance/wizard/generate_missing_attendance_sheets.xml
From 3aae0fa0259dd7f046b5203ae7b30fe415ecb269 Mon Sep 17 00:00:00 2001
From: odoo-pda
Date: Fri, 13 Mar 2020 16:27:33 +0100
Subject: [PATCH 186/208] [ADD] macavrac_base module. (+ small cleans on
beesdoo_website_shift)
---
.../{__openerp__.py => __manifest__.py} | 0
beesdoo_website_shift/controllers/main.py | 13 ++---
.../data/res_config_data.xml | 8 ++-
beesdoo_website_shift/models/res_config.py | 2 +-
.../views/my_shift_website_templates.xml | 4 +-
.../views/res_config_views.xml | 4 +-
.../models/cooperative_status.py | 2 +-
macavrac_base/__init__.py | 1 +
macavrac_base/__manifest__.py | 23 +++++++++
macavrac_base/models/__init__.py | 1 +
macavrac_base/models/res_partner.py | 49 +++++++++++++++++++
macavrac_base/views/res_partner.xml | 31 ++++++++++++
12 files changed, 124 insertions(+), 14 deletions(-)
rename beesdoo_website_shift/{__openerp__.py => __manifest__.py} (100%)
create mode 100644 macavrac_base/__init__.py
create mode 100644 macavrac_base/__manifest__.py
create mode 100644 macavrac_base/models/__init__.py
create mode 100644 macavrac_base/models/res_partner.py
create mode 100644 macavrac_base/views/res_partner.xml
diff --git a/beesdoo_website_shift/__openerp__.py b/beesdoo_website_shift/__manifest__.py
similarity index 100%
rename from beesdoo_website_shift/__openerp__.py
rename to beesdoo_website_shift/__manifest__.py
diff --git a/beesdoo_website_shift/controllers/main.py b/beesdoo_website_shift/controllers/main.py
index 4123f02..aa92173 100644
--- a/beesdoo_website_shift/controllers/main.py
+++ b/beesdoo_website_shift/controllers/main.py
@@ -9,11 +9,10 @@ from datetime import datetime, timedelta
from itertools import groupby
from pytz import timezone, utc
-from openerp import http, fields
-from openerp.http import request
+from odoo import http, fields
+from odoo.http import request
-from openerp.addons.beesdoo_shift.models.planning import float_to_time
-from openerp.addons.beesdoo_shift.models.cooperative_status import PERIOD
+from odoo.addons.beesdoo_shift.models.planning import float_to_time
class WebsiteShiftController(http.Controller):
@@ -408,6 +407,8 @@ class WebsiteShiftController(http.Controller):
# Get config
regular_next_shift_limit = int(request.env['ir.config_parameter'].get_param(
'beesdoo_website_shift.regular_next_shift_limit'))
+ shift_period = int(request.env['ir.config_parameter'].get_param(
+ 'beesdoo_website_shift.shift_period'))
for i in range(nb_subscribed_shifts, regular_next_shift_limit):
# Create the fictive shift
@@ -426,11 +427,11 @@ class WebsiteShiftController(http.Controller):
# Set new date
shift.start_time = self.add_days(
fields.Datetime.from_string(main_shift.start_time),
- days=i * PERIOD
+ days=i * shift_period
)
shift.end_time = self.add_days(
fields.Datetime.from_string(main_shift.end_time),
- days=i * PERIOD
+ days=i * shift_period
)
# Add the fictive shift to the list of shift
subscribed_shifts.append(shift)
diff --git a/beesdoo_website_shift/data/res_config_data.xml b/beesdoo_website_shift/data/res_config_data.xml
index d75440d..f84681e 100644
--- a/beesdoo_website_shift/data/res_config_data.xml
+++ b/beesdoo_website_shift/data/res_config_data.xml
@@ -3,7 +3,7 @@
Copyright 2017-2018 Rémy Taymans
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-->
-
+beesdoo_website_shift.irregular_shift_limit
@@ -37,5 +37,9 @@
beesdoo_website_shift.regular_highlight_rule20
+
+ beesdoo_website_shift.shift_period
+ 28
+
-
+
diff --git a/beesdoo_website_shift/models/res_config.py b/beesdoo_website_shift/models/res_config.py
index 04e31c2..f4e408b 100644
--- a/beesdoo_website_shift/models/res_config.py
+++ b/beesdoo_website_shift/models/res_config.py
@@ -4,7 +4,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from ast import literal_eval
-from openerp import fields, models, api
+from odoo import fields, models, api
PARAMS = [
('irregular_shift_limit', 'beesdoo_website_shift.irregular_shift_limit'),
diff --git a/beesdoo_website_shift/views/my_shift_website_templates.xml b/beesdoo_website_shift/views/my_shift_website_templates.xml
index 33fa0f3..ed5b8e6 100644
--- a/beesdoo_website_shift/views/my_shift_website_templates.xml
+++ b/beesdoo_website_shift/views/my_shift_website_templates.xml
@@ -3,7 +3,7 @@
Copyright 2017-2018 Rémy Taymans
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-->
-
+
@@ -949,4 +949,4 @@
-
+
diff --git a/beesdoo_website_shift/views/res_config_views.xml b/beesdoo_website_shift/views/res_config_views.xml
index 9968a90..62ba035 100644
--- a/beesdoo_website_shift/views/res_config_views.xml
+++ b/beesdoo_website_shift/views/res_config_views.xml
@@ -3,7 +3,7 @@
Copyright 2017-2018 Rémy Taymans
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-->
-
+
@@ -101,4 +101,4 @@
sequence="10"/>
-
+
diff --git a/beesdoo_worker_status/models/cooperative_status.py b/beesdoo_worker_status/models/cooperative_status.py
index 0a05e88..433a281 100644
--- a/beesdoo_worker_status/models/cooperative_status.py
+++ b/beesdoo_worker_status/models/cooperative_status.py
@@ -253,7 +253,7 @@ class ResPartner(models.Model):
Override is_worker definition
You need have subscribe to a A Share
"""
- is_worker = fields.Boolean(compute="_is_worker", search="_search_worker")
+ is_worker = fields.Boolean(compute="_is_worker", search="_search_worker", readonly=True, related="")
def _is_worker(self):
for rec in self:
diff --git a/macavrac_base/__init__.py b/macavrac_base/__init__.py
new file mode 100644
index 0000000..9a7e03e
--- /dev/null
+++ b/macavrac_base/__init__.py
@@ -0,0 +1 @@
+from . import models
\ No newline at end of file
diff --git a/macavrac_base/__manifest__.py b/macavrac_base/__manifest__.py
new file mode 100644
index 0000000..05fdcc5
--- /dev/null
+++ b/macavrac_base/__manifest__.py
@@ -0,0 +1,23 @@
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+{
+ 'name': "Macavrac Base Module",
+
+ 'summary': """
+ Module with basic customizations for the Macavrac cooperative.
+ """,
+
+ 'description': """
+ """,
+
+ 'author': "Patricia Daloze",
+
+ 'category': 'Sales',
+ 'version': '12.0.1.0.0',
+
+ 'depends': ['beesdoo_shift', 'contacts'],
+
+ 'data': [
+ 'views/res_partner.xml',
+ ],
+ 'installable': True,
+}
diff --git a/macavrac_base/models/__init__.py b/macavrac_base/models/__init__.py
new file mode 100644
index 0000000..4c58886
--- /dev/null
+++ b/macavrac_base/models/__init__.py
@@ -0,0 +1 @@
+from . import res_partner
\ No newline at end of file
diff --git a/macavrac_base/models/res_partner.py b/macavrac_base/models/res_partner.py
new file mode 100644
index 0000000..0c5e4e2
--- /dev/null
+++ b/macavrac_base/models/res_partner.py
@@ -0,0 +1,49 @@
+from odoo import models, fields, api, _
+from odoo.exceptions import ValidationError
+
+class Partner(models.Model):
+
+ _inherit = 'res.partner'
+
+ date_stamp = fields.Date(string="Timestamp", help="Date de remplissage du formulaire")
+ birthdate = fields.Date(string="Date d'anniversaire")
+ payment_date = fields.Date(string="Date de paiement")
+ certificate_sent_date = fields.Date(string="Certificat envoyé le")
+ fiscal_certificate_sent_date = fields.Date(string="Attestation fiscale envoyée le")
+
+ coop_number = fields.Integer(string="Coop N°")
+ share_qty = fields.Integer(string="Nombre de part")
+
+ share_amount = fields.Float(string="Montant", compute="_compute_share_amount")
+
+ gender = fields.Selection([('female','Féminin'),('male','Masculin'),('other','Autre')], string="Genre")
+ cooperator_type = fields.Selection([('share_a', 'Part A'), ('share_b', 'Part B'), ('share_c', 'Part C'), ('share_d', 'Part D')], string="Type de Part")
+ state_request = fields.Selection([('ok',"En ordre"),('waiting_payment','En attente de paiement'),
+ ('certificate_to_send', 'Certificat à envoyer'), ('resigning', 'Parts revendues')]) #TODO should we use the cooperative.status model instead?
+
+ national_register_number = fields.Char(string="Numéro de registre national") #TODO add constraint / check consistancy
+ share_numbers = fields.Char(string="Numéro de parts")
+ payment_details = fields.Char(string="Détail de paiement")
+ iban = fields.Char(string="IBAN") #TODO remove. Temp for import purpose.
+ comment_request = fields.Char(string="Commentaire")
+
+ email_sent = fields.Boolean(string="Email envoyé")
+ is_worker = fields.Boolean(compute="_compute_is_worker", search="_search_is_worker", string="is Worker", readonly=True, related="")
+
+
+ @api.depends('share_qty')
+ def _compute_share_amount(self):
+ for rec in self:
+ rec.share_amount = rec.share_qty * 25.0 #TODO add ir.config_parameter to make this amount editable
+
+
+ @api.depends('cooperator_type')
+ def _compute_is_worker(self):
+ for rec in self:
+ rec.is_worker = rec.cooperator_type == 'share_b'
+
+ def _search_is_worker(self, operator, value):
+ if (operator == '=' and value) or (operator == '!=' and not value):
+ return [('cooperator_type', '=', 'share_b')]
+ else:
+ return [('cooperator_type', '!=', 'share_b')]
diff --git a/macavrac_base/views/res_partner.xml b/macavrac_base/views/res_partner.xml
new file mode 100644
index 0000000..f3e34c5
--- /dev/null
+++ b/macavrac_base/views/res_partner.xml
@@ -0,0 +1,31 @@
+
+
+ Macavrac Coop
+ res.partner
+
+ 99
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
From 1fce26620cf8ab4e30859fe4067454232b57b5cf Mon Sep 17 00:00:00 2001
From: odoo-pda
Date: Fri, 13 Mar 2020 17:41:38 +0100
Subject: [PATCH 187/208] [FIX] templates and beesdoo_shift, [ADD] small
changes on macavrac_base
---
beesdoo_shift/models/task.py | 6 +++---
.../views/my_shift_website_templates.xml | 18 +++++++++---------
.../views/shift_website_templates.xml | 14 ++++++++------
macavrac_base/views/res_partner.xml | 6 +++++-
4 files changed, 25 insertions(+), 19 deletions(-)
diff --git a/beesdoo_shift/models/task.py b/beesdoo_shift/models/task.py
index 0215fdb..87fc054 100644
--- a/beesdoo_shift/models/task.py
+++ b/beesdoo_shift/models/task.py
@@ -27,7 +27,7 @@ class Task(models.Model):
("cancel","Cancelled")
]
- def _get_color_mapping(state):
+ def _get_color_mapping(self, state):
return {
"draft": 0,
"open": 1,
@@ -37,7 +37,7 @@ class Task(models.Model):
"cancel": 9,
}[state]
- def _get_final_state():
+ def _get_final_state(self):
return ["done", "absent", "excused"]
name = fields.Char(track_visibility='always')
@@ -78,7 +78,7 @@ class Task(models.Model):
@api.depends("state")
def _compute_color(self):
for rec in self:
- rec.color = self._state_color_mapping(rec.state)
+ rec.color = self._get_color_mapping(rec.state)
def _compensation_validation(self, task):
"""
diff --git a/beesdoo_website_shift/views/my_shift_website_templates.xml b/beesdoo_website_shift/views/my_shift_website_templates.xml
index ed5b8e6..9a6c102 100644
--- a/beesdoo_website_shift/views/my_shift_website_templates.xml
+++ b/beesdoo_website_shift/views/my_shift_website_templates.xml
@@ -6,9 +6,9 @@
-
-
-
+ Warning ! You have not yet signed up to a shift.
+
-
+
-
+
-
+
+ Your past shifts
+
-
-
-
-
-
- Your past shifts
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Day
-
Date
-
Time
-
Type of Shift
-
Status
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Info ! You don't have any past shift.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
- space(s)
-
-
-
-
-
-
-
- Subscribed
-
-
-
-
-
- Subscribe
-
-
-
-
-
-
-
-
-
-
Day
-
Date
-
Time
-
Type of Shift
-
Available Spaces
-
Subscribed
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
- Subscribed
+
+
+
+ -
+
+
+
+
+
+
+
+
-
-
-
-
- Subscribe
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ×
-
-
- Please confirm subscription
-
-
-
-
-
- -
-
-
- available space(s)
-
-
-
-
-
-
-
-
+
-
+
+ Info ! You don't have any past shift.
+
-
-
+
-
+
-
-
-
-
-
- Help
-
-
-
-
-
-
-
-
-
-
-
-
- Info! If you do not agree with your status, please contact the members office by mail (membre@bees-coop.be) or during the open hours of the office (Monday 5PM to 7:30PM, Wednesday 5PM to 7:30 PM and Friday 2:30PM to 5 PM).
-
-
-
- Explanation of the status:
-
-
-
- Up To Date:
- That's perfect! You are in order. Thanks a lot. You can come and shop, so can your eaters if you have any.
-
-
-
-
-
- Alert:
- If you are in alert status, that means you didn't do your last shift. You have
- until your next scheduled shift to do your compensation shift according to your situation.
- Your compensation is either simple or double. If you don't how how many compensation shifts you have to do, please contact your supercooperator.
- To do your compensation shift, no need to subscribe in advance : you come at the beginning of the shift that best suits you.
- Add your name and the indication "compensation shift" on the attendance list.
- No panic, you still can come and shop, so can your eaters if you have any.
-
-
- Suspended:
- If you are suspended, that means you didn't come to a shift and you didn't do you compensation shifts in the delay (4 weeks).
- You cannot shop (so as your eaters). But no need to panic : a two-weeks delay is activable on demand at the entrance of the supermarket.
- You will be able to shop during 2 more weeks and to put your situation in order.
- To do your compensation shift, no need to subscribe in advance : you come at the beginning of the shift that best suits you.
- Add your name and the indication "compensation shift" on the attendance list.
-
-
- Auto-Extension:
- You didn't manage to do your compensation shifts in the delay but you benefit from the auto-extension.
- This is two more weeks to do your compensation shifts. You can shop.
- If you don't do your compensation shifts, you'll be suspended.
-
-
- Unsubscribed:
- You did not attend two consecutive shifts. You are now unsubscribed. You cannot shop (nor can your eaters) nor come to work.
- To subscribe again, please contact membre@bees-coop.be or come to the members office during the opening hours.
-
-
-
-
-
- Alert:
- If you are in alert status, that means you didn't anticipate enough shifts.
- Your counter is now negative, directly to -2.
- You have 4 weeks to do 2 shifts to be up to date.
- For the compensation shifts, subscribe like you do for a normal shift.
- Be careful, in addition to these 2 shifts, don't forget to do your normal shift in the same delay to prevent to be in the same situation next month.
-
-
- Suspended:
- You did not anticipate enough shifts and you did not come back to a normal situation in the delay.
- You cannot shop anymore, nor can your eaters.
- But no need to panic : a two-weeks delay is activable on demand at the entrance of the supermarket.
- You will be able to shop during 2 more weeks and to put your situation in order.
- For the compensation shifts, subscribe like you do for a normal shift.
-
-
- Auto-Extension:
- You didn't manage to do your compensation shifts in the delay but you benefit from the auto-extension.
- This is two more weeks to do your compensation shifts. You can shop.
- If you don't do your compensation shifts, you'll be suspended.
-
-
- Unsubscribed:
- Your counter is negative and you haven't come to work for more than 8 weeks.
- You are unsubscribed. You cannot shop nor can your eaters.
- To subscribe again of if it's a mistake, please contact membre@bees-coop.be or come to the members office during the opening hours.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- You don't have to participate to shift system.
-
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+ space(s)
+
+
+ full
+
+
+
+
+
+ Subscribed
+
+
+
+ Subscribe
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+ ×
+
+
+ Please confirm subscription
+
+
+
+ -
+
+
+ available space(s)
+
+
+
+
+
+
-
+
-
-
-
-
-
- Please contact the members office to suscribe to shifts.
-
-
-
+
+
+
+
+
+ Help
+
+
+
+
+
+ Info! If you do not agree with your status, please contact the members office by mail (membre@bees-coop.be) or during the open hours of the office (Monday 5PM to 7:30PM, Wednesday 5PM to 7:30 PM and Friday 2:30PM to 5 PM).
-
-
-
-
-
+
+ Explanation of the status:
+
+
+
+ Up To Date:
+ That's perfect! You are in order. Thanks a lot. You can come and shop, so can your eaters if you have any.
+
+
+
+
+
+ Alert:
+ If you are in alert status, that means you didn't do your last shift. You have
+ until your next scheduled shift to do your compensation shift according to your situation.
+ Your compensation is either simple or double. If you don't how how many compensation shifts you have to do, please contact your supercooperator.
+ To do your compensation shift, no need to subscribe in advance : you come at the beginning of the shift that best suits you.
+ Add your name and the indication "compensation shift" on the attendance list.
+ No panic, you still can come and shop, so can your eaters if you have any.
+
+
+ Suspended:
+ If you are suspended, that means you didn't come to a shift and you didn't do you compensation shifts in the delay (4 weeks).
+ You cannot shop (so as your eaters). But no need to panic : a two-weeks delay is activable on demand at the entrance of the supermarket.
+ You will be able to shop during 2 more weeks and to put your situation in order.
+ To do your compensation shift, no need to subscribe in advance : you come at the beginning of the shift that best suits you.
+ Add your name and the indication "compensation shift" on the attendance list.
+
+
+ Auto-Extension:
+ You didn't manage to do your compensation shifts in the delay but you benefit from the auto-extension.
+ This is two more weeks to do your compensation shifts. You can shop.
+ If you don't do your compensation shifts, you'll be suspended.
+
+
+ Unsubscribed:
+ You did not attend two consecutive shifts. You are now unsubscribed. You cannot shop (nor can your eaters) nor come to work.
+ To subscribe again, please contact membre@bees-coop.be or come to the members office during the opening hours.
+
+
+
+
+
+ Alert:
+ If you are in alert status, that means you didn't anticipate enough shifts.
+ Your counter is now negative, directly to -2.
+ You have 4 weeks to do 2 shifts to be up to date.
+ For the compensation shifts, subscribe like you do for a normal shift.
+ Be careful, in addition to these 2 shifts, don't forget to do your normal shift in the same delay to prevent to be in the same situation next month.
+
+
+ Suspended:
+ You did not anticipate enough shifts and you did not come back to a normal situation in the delay.
+ You cannot shop anymore, nor can your eaters.
+ But no need to panic : a two-weeks delay is activable on demand at the entrance of the supermarket.
+ You will be able to shop during 2 more weeks and to put your situation in order.
+ For the compensation shifts, subscribe like you do for a normal shift.
+
+
+ Auto-Extension:
+ You didn't manage to do your compensation shifts in the delay but you benefit from the auto-extension.
+ This is two more weeks to do your compensation shifts. You can shop.
+ If you don't do your compensation shifts, you'll be suspended.
+
+
+ Unsubscribed:
+ Your counter is negative and you haven't come to work for more than 8 weeks.
+ You are unsubscribed. You cannot shop nor can your eaters.
+ To subscribe again of if it's a mistake, please contact membre@bees-coop.be or come to the members office during the opening hours.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
-
+
+ You don't have to participate to shift system.
+
-
-
-
-
+
+
+
-
+
+
-
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
-
+
+
-
+
+ Please contact the members office to suscribe to shifts.
+
-
-
-
-
-
- You don't have to participate to shift system.
-
-
-
-
-
+
-
-
-
-
+
+
-
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
-
+
-
-
-
-
+
-
+
-
+
+
+
+
+
-
+
-
+
-
+
+ You don't have to participate to shift system.
+
-
-
-
-
-
- Please contact the members office to suscribe to shifts.
-
-
-
-
-
+
-
-
-
-
+
+
-
+
+
+
+
-
-
+
+
+
+
+
+
+
+
-
-
-
+
-
+
-
-
-
-
+
-
+
-
+
+ Please contact the members office to suscribe to shifts.
+
-
-
-
-
+
+
+
-
-
-
-
+
+
-
-
-
-
-
-
-
-
+
+
+
+
-
+
+
+
+
+
+
-
-
-
+
+
-
-
+
-
+
-
+
+
+
+
-
+
+
+
+
-
+
+
+
+
-
-
-
+
+
+
+
-
+
-
-
+
-
-
-
+
-
+
-
-
-
-
+
-
+
-
+
+
+
-
-
-
-
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
-
-
-
-
+
-
-
-
-
+
-
-
-
-
-
-
+
+
+
+
-
+
+
+
+
-
-
- ×
-
-
- Success! Your subscription has succeded.
-
-
- Failed! Your subscription has failed. Someone
- subscribed before you or the shift was deleted. Try again in a
- moment.
+
+
+
+
- Please note that you can't subscribe minutes before the shift.
-
-
+
+
+
+
-
+
+
+
+
-
-
-
-
-
- Available Shifts
-
-
-
-
-
-
-
-
-
-
-
-
-
- Please, subscribe, in priority, to the highlighted shifts. To sign up to a shift click on the
- subscribe button. Notice that you can not unsubscribe online. To unsubscribe to a shift, please,
- contact us.
-
-
-
-
-
-
+
+
+
+
+ ×
+
+
+ Success! Your subscription has succeded.
+
+
+ Failed! Your subscription has failed. Someone
+ subscribed before you or the shift was deleted. Try again in a
+ moment.
+
+ Please note that you can't subscribe minutes before the shift.
+
+
+
+
+
+
+ Available Shifts
+
+
+
+
+
+ Please, subscribe, in priority, to the highlighted shifts. To sign up to a shift click on the
+ subscribe button. Notice that you can not unsubscribe online. To unsubscribe to a shift, please,
+ contact us.
+