From 520890dd2b2e2b4019ee564fa0b9b655de069f23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Taymans?= Date: Wed, 31 Jan 2018 17:10:46 +0100 Subject: [PATCH] [IMP] website_shift: Refactor and fix bugs (s0030g) [IMP] website_shift: Next shifts for regular Refactor the generation of the next shift for regular worker. Fix: no next shifts shown when the worker is a new worker and doesn't have any past shift Fix: no next shifts shown when the next shift of the worker is not generated yet. [ADD] website_shift: Help texts [FIX] website_shift: Help texts Fix help text for the status based on the input from the members office [IMP] website_shift: Help texts translation Add translation for the help texts. [IMP] website_shift: Future alert date The future alert date has moved to beesdoo_shift module. So we use this one instead of re-compute it in the controller. [IMP] website_shift: Update manifest [FIX] website_shift: Better position for help text On a small screen help texts appear on the top of the page leaving useful info on the bottom. Now help texts is moved on the bottom of the page. [ADD] website_shift: Feedback when subscribing Add a feedback to the user about the successfulness of the subscription. [FIX] website_shift: Super-cooperator info modal The modal showing the super-cooperator information didn't work for the 'fictive' shift generated for regular workers. It's due to the fact that a 'fictive' shift doesn't have an id. So we should not use it to generate xml ids. Instead we use the index of the foreach loop. [FIX] website_shift: Wrong time when crossing DST The issue: There was a time difference of one hour when the fictive shifts cross the DST (Daylight Saving Time). Explanation: Python works with two types of datetime. The datetime without a timezone called *naive* and the one with a timezone called *non-naive*. `timedelta()` is used to add a number of day to a datetime. However, changing a non-naive datetime with `timedelta` just change the date but leave the timezone unchanged. That's no correct because the new date may not be in the same timezone because of the DST. If the new date is after a change of time, due to DST, the timezone of the non-naive datetime should be updated. Python don't do that because `timedelta` doesn't realy add days but add the corresponding hours ! So when adding hours it's consistent to not change the timezone (you can use `normalize()` to get your datetime in the right timezone after a cross of DST). To fix this, after adding a `timedelta` the timezone of the datetime should be set to none and the relocalized with the `localize()` function of the `pytz` corresponding timezone. [FIX] website_shift: Translations --- beesdoo_website_shift/__openerp__.py | 9 +- beesdoo_website_shift/controllers/main.py | 214 +++--- beesdoo_website_shift/i18n/fr_BE.po | 619 ++++++++++++++++-- .../views/my_shift_website_templates.xml | 202 +++++- 4 files changed, 818 insertions(+), 226 deletions(-) diff --git a/beesdoo_website_shift/__openerp__.py b/beesdoo_website_shift/__openerp__.py index b07357f..b1a3d09 100644 --- a/beesdoo_website_shift/__openerp__.py +++ b/beesdoo_website_shift/__openerp__.py @@ -4,18 +4,19 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { - 'name': 'BEES coop Shift Website', + 'name': 'BEES coop Website Shift', 'summary': """ - Show available shifts for regular and irregular workers in - portal. + Show available shifts for regular and irregular workers on the + website and let workers manage their shifts with an + easy web interface. """, 'description': """ """, 'author': 'Rémy Taymans', 'license': 'AGPL-3', - 'version': '9.0.1.0', + 'version': '9.0.2.0', 'website': "https://github.com/beescoop/Obeesdoo", 'category': 'Cooperative management', diff --git a/beesdoo_website_shift/controllers/main.py b/beesdoo_website_shift/controllers/main.py index a18a609..76fc93c 100644 --- a/beesdoo_website_shift/controllers/main.py +++ b/beesdoo_website_shift/controllers/main.py @@ -5,17 +5,15 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from ast import literal_eval -from copy import copy 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 openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT as DATETIME_FORMAT from openerp.addons.beesdoo_shift.models.planning import float_to_time - -PERIOD = 28 # TODO: use the same constant as in 'beesdoo_shift' +from openerp.addons.beesdoo_shift.models.cooperative_status import PERIOD class WebsiteShiftController(http.Controller): @@ -35,6 +33,34 @@ class WebsiteShiftController(http.Controller): working_mode = user.partner_id.working_mode return working_mode == 'exempt' + def add_days(self, datetime, days): + """ + Add the number of days to datetime. This take the DST in + account, meaning that the UTC time will be correct even if the + new datetime has cross the DST boundary. + + :param datetime: a naive datetime expressed in UTC + :return: a naive datetime expressed in UTC with the added days + """ + # Ensure that the datetime given is without a timezone + assert datetime.tzinfo is None + # Get current user and user timezone + cur_user = request.env['res.users'].browse(request.uid) + user_tz = timezone(cur_user.tz) + # Convert to UTC + dt_utc = utc.localize(datetime, is_dst=False) + # Convert to user TZ + dt_local = dt_utc.astimezone(user_tz) + # Add the number of days + newdt_local = dt_local + timedelta(days=days) + # If the newdt_local has cross the DST boundary, its tzinfo is + # no longer correct. So it will be replaced by the correct one. + newdt_local = user_tz.localize(newdt_local.replace(tzinfo=None)) + # Now the newdt_local has the right DST so it can be converted + # to UTC. + newdt_utc = newdt_local.astimezone(utc) + return newdt_utc.replace(tzinfo=None) + @http.route('/my/shift', auth='user', website=True) def my_shift(self, **kw): """ @@ -79,11 +105,13 @@ class WebsiteShiftController(http.Controller): irregular_enable_sign_up = literal_eval(request.env['ir.config_parameter'].get_param( 'beesdoo_website_shift.irregular_enable_sign_up')) + request.session['success'] = False if (irregular_enable_sign_up and cur_user.partner_id.working_mode == 'irregular' and shift and not shift.worker_id): shift.worker_id = cur_user.partner_id + request.session['success'] = True return request.redirect(kw['nexturl']) @http.route('/shift_irregular_worker', auth='public', website=True) @@ -126,10 +154,6 @@ class WebsiteShiftController(http.Controller): """ Return template variables for 'beesdoo_website_shift.my_shift_irregular_worker' template """ - # Get current user - cur_user = request.env['res.users'].browse(request.uid) - cur_cooperative_status = cur_user.partner_id.cooperative_status_ids - # Get config irregular_enable_sign_up = literal_eval(request.env['ir.config_parameter'].get_param( 'beesdoo_website_shift.irregular_enable_sign_up')) @@ -144,19 +168,13 @@ class WebsiteShiftController(http.Controller): irregular_enable_sign_up, nexturl )) - future_alert_date = False - if not cur_cooperative_status.alert_start_time: - # Compute date before which the worker is up to date - today_date = fields.Date.from_string(cur_cooperative_status.today) - delta = (today_date - fields.Date.from_string(cur_cooperative_status.irregular_start_date)).days - future_alert_date = today_date + timedelta(days=(cur_cooperative_status.sr + 1) * PERIOD - delta % PERIOD) - future_alert_date = future_alert_date.strftime('%Y-%m-%d') + # Add feedback about the success or the fail of the subscription + template_context['back_from_subscription'] = False + if 'success' in request.session: + template_context['back_from_subscription'] = True + template_context['success'] = request.session.get('success') + del request.session['success'] - template_context.update( - { - 'future_alert_date': future_alert_date, - } - ) return template_context def my_shift_regular_worker(self): @@ -265,42 +283,57 @@ class WebsiteShiftController(http.Controller): ('worker_id', '=', cur_user.partner_id.id)], order="start_time, task_template_id, task_type_id", ) - # We don't use record to show the next shift as we need to add - # fictive one for regular worker. I say 'fictive' one because - # the next shifts for the regular worker are generated on a - # PERIOD basis and database doesn't contain more than a PERIOD - # of shift. So a regular worker will always see only one - # next shift, the one that is generated and stored in the - # database. Meaning that if we want to show the next shifts - # for an entire year, we need to compute the dates for the next - # shifts and create it. But we want to keep it 'fictive', - # meaning that we don't want to write them in the database. - # So here we convert recordset into Shift object. + # Create a list of record in order to add new record to it later subscribed_shifts = [] - for shift_rec in subscribed_shifts_rec: - shift = Shift(shift_rec) - subscribed_shifts.append(shift) - # We want to keep a copy of the shift that will serve as a - # master to create the fictive shifts. - if shift_rec.worker_id in shift_rec.task_template_id.worker_ids: - main_shift = shift - main_shift_rec = shift_rec + for rec in subscribed_shifts_rec: + subscribed_shifts.append(rec) # In case of regular worker, we compute his fictive next shifts # according to the regular_next_shift_limit - if self.is_user_regular() and subscribed_shifts and main_shift: + if self.is_user_regular(): + # Compute main shift + nb_subscribed_shifts = len(subscribed_shifts) + if nb_subscribed_shifts > 0: + main_shift = subscribed_shifts[-1] + else: + task_template = request.env['beesdoo.shift.template'].sudo().search( + [('worker_ids', 'in', cur_user.partner_id.id)], + limit=1, + ) + main_shift = request.env['beesdoo.shift.shift'].sudo().search( + [('task_template_id', '=', task_template[0].id)], + order="start_time desc", + limit=1, + ) + # Get config regular_next_shift_limit = int(request.env['ir.config_parameter'].get_param( 'beesdoo_website_shift.regular_next_shift_limit')) - for i in range(1, regular_next_shift_limit): - # Compute the new date for the created shift - start_time = fields.Datetime.from_string(main_shift_rec.start_time) - start_time = (start_time + timedelta(days=i*PERIOD)).strftime(DATETIME_FORMAT) + + for i in range(nb_subscribed_shifts, regular_next_shift_limit): # Create the fictive shift - shift = copy(main_shift) - shift.id = -i # We give negative id 'caus this shift doesn't exist in database - shift.start_day = start_time - shift.start_date = start_time + shift = main_shift.new() + shift.name = main_shift.name + shift.task_template_id = shift.task_template_id + 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 = main_shift.stage_id + shift.super_coop_id = main_shift.super_coop_id + shift.color = main_shift.color + shift.is_regular = main_shift.is_regular + shift.replaced_id = main_shift.replaced_id + shift.revert_info = main_shift.revert_info + # Set new date + shift.start_time = self.add_days( + fields.Datetime.from_string(main_shift.start_time), + days=i*PERIOD + ) + shift.end_time = self.add_days( + fields.Datetime.from_string(main_shift.end_time), + days=i*PERIOD + ) + # Add the fictive shift to the list of shift subscribed_shifts.append(shift) return { @@ -350,88 +383,3 @@ class WebsiteShiftController(http.Controller): return { 'status': cur_user.partner_id.cooperative_status_ids, } - - -class Shift(object): - """ - Represent a shift with all useful information in a format that is directly printable in a template - """ - - def __init__(self, shift_rec=None): - self.id = 0 - self._start_day = '' - self._start_date = '' - self._start_time = '' - self._end_time = '' - self.task_type_name = '' - self.super_coop_name = '' - self.super_coop_phone = '' - self.super_coop_email = '' - if shift_rec: - self.update(shift_rec) - - def update(self, shift_rec=None): - """ Fill in self with data in the given record""" - if shift_rec: - self.id = shift_rec.id - self.start_day = shift_rec.start_time - self.start_date = shift_rec.start_time - self.start_time = shift_rec.start_time - self.end_time = shift_rec.end_time - if shift_rec.task_type_id: - self.task_type_name = shift_rec.task_type_id.name - if shift_rec.super_coop_id: - self.super_coop_name = shift_rec.super_coop_id.name - self.super_coop_phone = shift_rec.super_coop_id.phone - self.super_coop_email = shift_rec.super_coop_id.email - - # Properties - @property - def start_day(self): - return self._start_day - - @property - def start_date(self): - return self._start_date - - @property - def start_time(self): - return self._start_time - - @property - def end_time(self): - return self._end_time - - # Setters - @start_day.setter - def start_day(self, datetime_str): - self._start_day = datetime.strptime(datetime_str, DATETIME_FORMAT).strftime('%A') - - @start_date.setter - def start_date(self, datetime_str): - self._start_date = datetime.strptime(datetime_str, DATETIME_FORMAT).strftime('%d %B %Y') - - @start_time.setter - def start_time(self, datetime_str): - self._start_time = datetime.strptime(datetime_str, DATETIME_FORMAT).strftime('%H:%M') - - @end_time.setter - def end_time(self, datetime_str): - self._end_time = datetime.strptime(datetime_str, DATETIME_FORMAT).strftime('%H:%M') - - # Deleters - @start_day.deleter - def start_day(self): - del self._start_day - - @start_date.deleter - def start_date(self): - del self._start_date - - @start_time.deleter - def start_time(self): - del self._start_time - - @end_time.deleter - def end_time(self): - del self._end_time diff --git a/beesdoo_website_shift/i18n/fr_BE.po b/beesdoo_website_shift/i18n/fr_BE.po index 2d4e825..6378d4e 100644 --- a/beesdoo_website_shift/i18n/fr_BE.po +++ b/beesdoo_website_shift/i18n/fr_BE.po @@ -2,14 +2,12 @@ # This file contains the translation of the following modules: # * beesdoo_portal_shift # -# Tanslators: -# Rémy Taymans , 2017 msgid "" msgstr "" "Project-Id-Version: Odoo Server 9.0c\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-09-29 09:02+0000\n" -"PO-Revision-Date: 2017-09-29 11:08+0200\n" +"PO-Revision-Date: 2018-04-28 16:34+0200\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -19,104 +17,601 @@ msgstr "" "Language: fr_BE\n" "X-Generator: Poedit 1.8.11\n" -#. module: beesdoo_portal_shift -#: model:ir.ui.view,arch_db:beesdoo_portal_shift.task_template -msgid "Available Tasks Templates for Regular Workers" -msgstr "Créneaux disponibles pour les travailleurs réguliers" +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.available_shift_irregular_worker +msgid "\n" +" Subscribed" +msgstr "\n" +" Inscrit" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.available_shift_irregular_worker +msgid "\n" +" Subscribed" +msgstr "\n" +" Inscrit" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_next_shifts +msgid "\n" +" Super Cooperator Info" +msgstr "\n" +" Info Supercoopérateur" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.available_shift_irregular_worker +msgid "\n" +" Subscribe" +msgstr "\n" +" Inscription" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.available_shift_irregular_worker +msgid "\n" +" Subscribe" +msgstr "\n" +" Inscription" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.task_template +msgid "NSC : This flag tells you that the shift needs a Super Co-operator" +msgstr "NSC : Ceci vous informe que le créneau n'a pas encore de supercoopérateur." + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.help_text_irregular_worker +msgid "Alert:\n" +" If you are in alert status, that means you didn't anticipate enough shifts.\n" +" Your counter is now negative, directly to -2.\n" +" You have 4 weeks to do 2 shifts to be up to date.\n" +" For the compensation shifts, subscribe like you do for a normal shift.\n" +" 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." +msgstr "Alerte :\n" +"Si vous êtes en alerte, c'est que vous n'avez pas anticipé assez de shifts. Votre compteur est donc passé en négatif, directement à -2. Vous avez donc 4 semaines pour effectuer deux shifts pour vous remettre à jour. Pour les shifts de rattrapage, inscrivez-vous comme pour tout shift normal. Attention, en plus de ces deux shifts de retard, n’oubliez pas de faire votre shift normal dans les mêmes délais, pour éviter d’avoir le même problème le mois prochain." + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.help_text_regular_worker +msgid "Alert:\n" +" If you are in alert status, that means you didn't do your last shift. You have\n" +" until your next scheduled shift to do your compensation shift according to your situation.\n" +" Your compensation is either simple or double. If you don't how how many compensation shifts you have to do, please contact your supercooperator.\n" +" To do your compensation shift, no need to subscribe in advance : you come at the beginning of the shift that best suits you.\n" +" Add your name and the indication \"compensation shift\" on the attendance list.\n" +" No panic, you still can come and shop, so can your eaters if you have any." +msgstr "Alerte : \n" +"Si vous êtes en alerte c'est que vous n'avez pas effectué votre dernier shift. Vous avez donc jusqu'à votre prochain shift de prévu pour faire votre compensation suivant la situation. Celle-ci sera simple ou double. Si vous ne savez pas si vous avez une simple ou une double compensation, contactez votre supercoopérateur. Pour les shifts de compensation, pas besoin d'inscription : vous vous présentez au début d'un shift au créneau qui vous convient le mieux. Ajoutez sur la feuille de présence votre nom/prénom + “shift de compensation”.\n" +"Mais pas de panique, vous pouvez toujours venir faire vos courses (ainsi que vos mangeurs le cas échéant)." + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.help_text_irregular_worker +#: model:ir.ui.view,arch_db:beesdoo_website_shift.help_text_regular_worker +msgid "Auto-Extension:\n" +" You didn't manage to do your compensation shifts in the delay but you benefit from the auto-extension.\n" +" This is two more weeks to do your compensation shifts. You can shop.\n" +" If you don't do your compensation shifts, you'll be suspended." +msgstr "Délai de grâce :\n" +"Vous n'êtes pas parvenu à effectuer vos compensations dans les délais mais vous bénéficiez d’un délai de grâce. Il s’agit de deux semaines supplémentaires pour effectuer vos compensations tout en continuant de pouvoir faire vos courses. Si vous ne les effectuez pas, vous serez suspendu·e." + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_past_shifts +msgid "Info ! You don't have any past shift." +msgstr "Info ! Vous n'avez pas de shift passé." + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.help_text_common +msgid "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)." +msgstr "Info ! Si vous n’êtes pas d’accord avec votre statut, il peut s’agir d’une erreur de notre part. Contactez alors le bureau des membres par mail (membre@bees-coop.be) ou en personne pendant les heures d'ouverture du bureau : le lundi de 17h00 à 19h30, le mercredi de 17h à 19h30 et le vendredi de 14h30 à 17h (à l'étage du magasin)." + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.help_text_regular_worker +msgid "Suspended:\n" +" 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).\n" +" 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.\n" +" You will be able to shop during 2 more weeks and to put your situation in order.\n" +" To do your compensation shift, no need to subscribe in advance : you come at the beginning of the shift that best suits you.\n" +" Add your name and the indication \"compensation shift\" on the attendance list." +msgstr "Suspendu·e :\n" +"Si vous êtes suspendu·e, c’est que vous avez raté un shift et vous n'avez pas effectué votre/vos shifts de compensation dans les délais prévus (4 semaines). Vous ne pouvez plus faire vos courses (tout comme vos mangeurs). Mais pas de panique : un délai de grâce de 2 semaines est activable sur simple demande à l’accueil du magasin. Celui-ci vous octroie 2 semaines supplémentaires pour faire vos course et vous remettre en ordre. Si vous ne savez pas si vous avez une simple ou une double compensation, contactez votre supercoopérateur. Pour les shifts de compensation, pas besoin d'inscription : vous vous présentez au début d'un shift au créneau qui vous convient le mieux. Ajoutez sur la feuille de présence votre nom/prénom + “shift de compensation”." -#. module: beesdoo_portal_shift -#: model:ir.ui.view,arch_db:beesdoo_portal_shift.shift_template +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.help_text_irregular_worker +msgid "Suspended:\n" +" You did not anticipate enough shifts and you did not come back to a normal situation in the delay.\n" +" You cannot shop anymore, nor can your eaters.\n" +" But no need to panic : a two-weeks delay is activable on demand at the entrance of the supermarket.\n" +" You will be able to shop during 2 more weeks and to put your situation in order.\n" +" For the compensation shifts, subscribe like you do for a normal shift." +msgstr "Suspendu·e:\n" +"Vous n'avez pas anticipé suffisamment de shifts et n’avez pas rattrapé votre retard dans les délais prévus. Vous ne pouvez plus faire vos courses (tout comme vos mangeurs). Mais pas de panique, nous pouvons vous proposer un délai de grâce de 2 semaines pour effectuer vos shifts de rattrapage. Vous pouvez le demander à l'accueil du magasin. Cela vous permettra de garder le droit de faire vos courses dans ce délai. Pour les shifts de rattrapage, inscrivez-vous comme pour tout shift normal." + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.help_text_regular_worker +msgid "Unsubscribed:\n" +" You did not attend two consecutive shifts. You are now unsubscribed. You cannot shop (nor can your eaters) nor come to work.\n" +" To subscribe again, please contact membre@bees-coop.be or come to the members office during the opening hours." +msgstr "Désinscrit·e :\n" +"Vous avez raté deux shifts consécutifs. Vous êtes donc désinscrit·e. Vous ne pouvez plus venir faire vos courses (tout comme vos mangeurs), ni venir travailler. Pour vous réinscrire, contactez membre@bees-coop.be ou passez au bureau des membres pendant les heures d'ouverture." + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.help_text_irregular_worker +msgid "Unsubscribed:\n" +" Your counter is negative and you haven't come to work for more than 8 weeks.\n" +" You are unsubscribed. You cannot shop nor can your eaters.\n" +" 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." +msgstr "Désinscrit·e :\n" +"Vous êtes en négatif sur votre compteur et vous n'êtes pas venu travailler depuis plus de 8 semaines.\n" +"Vous êtes donc désinscrit·e. Vous ne pouvez plus venir faire vos courses (tout comme vos mangeurs). Pour vous réinscrire ou si c'est une erreur de notre part, contactez membre@bees-coop.be ou passez au bureau des membres pendant les heures d'ouverture." + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.help_text_common +msgid "Up To Date:\n" +" That's perfect! You are in order. Thanks a lot. You can come and shop, so can your eaters if you have any." +msgstr "A jour :\n" +"C'est parfait! Vous êtes en ordre de travail. Merci beaucoup. Vous pouvez venir faire vos courses (ainsi que vos mangeurs le cas échéant)." + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_next_shifts +msgid "Warning ! For the moment public holidays are not taken into account. If your shift\n" +" occures during a public holiday, you do not have to do it." +msgstr "Attention ! Pour le moment, les congés publics ne sont pas pris en compte. Si votre shift tombe durant un congé public, vous ne devez pas le faire." + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_next_shifts +msgid "Warning ! You have not yet signed up to a shift." +msgstr "Attention ! Vous n'êtes inscrit à aucun shift." + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.view_website_shift_config_irregular +#: model:ir.ui.view,arch_db:beesdoo_website_shift.view_website_shift_config_regular +msgid "Apply" +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?" +msgstr "Etes-vous sûr de vouloir vous inscrire à ce shift ?" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_irregular_worker +msgid "Available Shifts" +msgstr "Shifts disponibles" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.public_shift_irregular_worker msgid "Available Shifts for Irregular Workers" msgstr "Shifts disponibles pour les travailleurs volants" -#. module: beesdoo_portal_shift -#: model:ir.ui.view,arch_db:beesdoo_portal_shift.shift_template +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.available_shift_irregular_worker +#: model:ir.ui.view,arch_db:beesdoo_website_shift.public_shift_template_regular_worker +#: model:ir.ui.view,arch_db:beesdoo_website_shift.task_template +msgid "Available Spaces" +msgstr "&nbsp;Places disponibles" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.public_shift_template_regular_worker +#: model:ir.ui.view,arch_db:beesdoo_website_shift.task_template +msgid "Available Tasks Templates for Regular Workers" +msgstr "Créneaux disponibles pour les travailleurs réguliers" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_worker_status_common +msgid "Begin of Holiday:" +msgstr "Début de congé :" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.view_website_shift_config_irregular +#: model:ir.ui.view,arch_db:beesdoo_website_shift.view_website_shift_config_regular +msgid "Cancel" +msgstr "Annuler" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.available_shift_irregular_worker +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_next_shifts +msgid "Close" +msgstr "Fermer" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_regular_worker +msgid "Compensation Shift:" +msgstr "Shift de compensation :" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.view_website_shift_config_irregular +msgid "Configure Website Shift Irregular Worker" +msgstr "Configure Website Shift Irregular Worker" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.view_website_shift_config_regular +msgid "Configure Website Shift Regular Worker" +msgstr "Configure Website Shift Regular Worker" + +#. module: beesdoo_website_shift +#: model:ir.model.fields,field_description:beesdoo_website_shift.field_beesdoo_website_shift_config_settings_create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: beesdoo_website_shift +#: model:ir.model.fields,field_description:beesdoo_website_shift.field_beesdoo_website_shift_config_settings_create_date +msgid "Created on" +msgstr "Créé le" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.available_shift_irregular_worker +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_next_shifts +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_past_shifts msgid "Date" msgstr "Date" -#. module: beesdoo_portal_shift -#: model:ir.ui.view,arch_db:beesdoo_portal_shift.shift_template +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.available_shift_irregular_worker +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_next_shifts +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_past_shifts +#: model:ir.ui.view,arch_db:beesdoo_website_shift.public_shift_template_regular_worker +#: model:ir.ui.view,arch_db:beesdoo_website_shift.task_template msgid "Day" msgstr "Jour" -#. module: beesdoo_portal_shift -#: model:ir.ui.view,arch_db:beesdoo_portal_shift.shift_template -#: model:ir.ui.view,arch_db:beesdoo_portal_shift.task_template -msgid "Available Spaces" -msgstr "Places disponibles" +#. module: beesdoo_website_shift +#: model:ir.model.fields,field_description:beesdoo_website_shift.field_beesdoo_website_shift_config_settings_display_name +msgid "Display Name" +msgstr "Nom affiché" -#. module: beesdoo_portal_shift -#: model:ir.ui.view,arch_db:beesdoo_portal_shift.task_template -msgid "Subscribe via the member office or via" -msgstr "Inscription au bureau des membres ou via" +#. module: beesdoo_website_shift +#: model:ir.model.fields,help:beesdoo_website_shift.field_beesdoo_website_shift_config_settings_irregular_enable_sign_up +msgid "Enable shift sign up for irregular worker" +msgstr "Autoriser l'inscription pour les volants" -#. module: beesdoo_portal_shift -#: model:ir.ui.view,arch_db:beesdoo_portal_shift.shift_template -msgid "Subscribe via" -msgstr "Inscription via" +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_worker_status_common +msgid "End of Holiday:" +msgstr "Fin de congé :" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_exempted_worker +msgid "Exempt Reason:" +msgstr "Raison d'exemption :" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.help_text_common +msgid "Explanation of the status:" +msgstr "Explication des statuts" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_irregular_worker +msgid "Future Date of Alert:" +msgstr "A jour jusqu'à :" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.help_text_title +msgid "Help" +msgstr "Aide" + +#. module: beesdoo_website_shift +#: model:ir.model.fields,field_description:beesdoo_website_shift.field_beesdoo_website_shift_config_settings_hide_rule +msgid "Hide rule" +msgstr "Règle d'affichage" + +#. module: beesdoo_website_shift +#: model:ir.model.fields,field_description:beesdoo_website_shift.field_beesdoo_website_shift_config_settings_highlight_rule +msgid "Highlight rule" +msgstr "Règle de mise en évidence" + +#. module: beesdoo_website_shift +#: model:ir.model.fields,field_description:beesdoo_website_shift.field_beesdoo_website_shift_config_settings_id +msgid "ID" +msgstr "ID" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_regular_worker +msgid "In Alert Since:" +msgstr "En alerte depuis :" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_regular_worker +msgid "In Extension Since:" +msgstr "En extension depuis :" + +#. module: beesdoo_website_shift +#: model:ir.ui.menu,name:beesdoo_website_shift.menu_website_shift_irregular +msgid "Irregular Shift" +msgstr "Shift irrégulier" + +#. module: beesdoo_website_shift +#: model:ir.model.fields,field_description:beesdoo_website_shift.field_beesdoo_website_shift_config_settings_irregular_enable_sign_up +msgid "Irregular enable sign up" +msgstr "Permettre l'inscription des volants" -#. module: beesdoo_portal_shift -#: model:ir.ui.view,arch_db:beesdoo_portal_shift.task_template +#. module: beesdoo_website_shift +#: model:ir.model.fields,field_description:beesdoo_website_shift.field_beesdoo_website_shift_config_settings_irregular_past_shift_limit +msgid "Irregular past shift limit" +msgstr "Limite de shifts volants passés" + +#. module: beesdoo_website_shift +#: model:ir.model.fields,field_description:beesdoo_website_shift.field_beesdoo_website_shift_config_settings_irregular_shift_limit +msgid "Irregular shift limit" +msgstr "Limite de shifts volants" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_irregular_worker +msgid "Last Absence Date:" +msgstr "Date de dernière absence :" + +#. module: beesdoo_website_shift +#: model:ir.model.fields,field_description:beesdoo_website_shift.field_beesdoo_website_shift_config_settings___last_update +msgid "Last Modified on" +msgstr "Dernière modification le" + +#. module: beesdoo_website_shift +#: model:ir.model.fields,field_description:beesdoo_website_shift.field_beesdoo_website_shift_config_settings_write_uid +msgid "Last Updated by" +msgstr "Mis à jour par" + +#. module: beesdoo_website_shift +#: model:ir.model.fields,field_description:beesdoo_website_shift.field_beesdoo_website_shift_config_settings_write_date +msgid "Last Updated on" +msgstr "Mis à jour le" + +#. module: beesdoo_website_shift +#: model:ir.model.fields,help:beesdoo_website_shift.field_beesdoo_website_shift_config_settings_irregular_past_shift_limit +msgid "Maximum past shift that will be shown for irregular worker" +msgstr "Nombre maximal de shifts à afficher pour les volants" + +#. module: beesdoo_website_shift +#: model:ir.model.fields,help:beesdoo_website_shift.field_beesdoo_website_shift_config_settings_regular_past_shift_limit +msgid "Maximum past shift that will be shown for regular worker" +msgstr " Nombre maximal de shifts à afficher pour les réguliers " + +#. module: beesdoo_website_shift +#: model:ir.model.fields,help:beesdoo_website_shift.field_beesdoo_website_shift_config_settings_irregular_shift_limit +msgid "Maximum shift that will be shown" +msgstr "Nombre maximum de shifts à montrer" + +#. module: beesdoo_website_shift +#: model:ir.model.fields,help:beesdoo_website_shift.field_beesdoo_website_shift_config_settings_regular_next_shift_limit +msgid "Maximun number of next shift that will be shown" +msgstr "Nombre maximum de prochains shifts à montrer" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_link +msgid "My Shift" +msgstr "Mes shifts" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.task_template +msgid "NSC" +msgstr "NSC" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.public_shift_template_regular_worker +msgid "Need Super Co-operator" +msgstr "Besoin de Supercoopérateur" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.public_shift_template_regular_worker +#: model:ir.ui.view,arch_db:beesdoo_website_shift.task_template msgid "Not yet" msgstr "Pas encore" -#. module: beesdoo_portal_shift -#: model:ir.ui.view,arch_db:beesdoo_portal_shift.shift_template +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_irregular_worker +msgid "Number of Absence:" +msgstr "Nombre d'absence :" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_irregular_worker +msgid "" +"Please, subscribe, in priority, to the highlighted shifts. To sign up to a shift click on the\n" +" subscribe button. Notice that you can not unsubscribe online. To unsubscribe to a shift, please,\n" +" contact us." +msgstr "" +"Inscrivez-vous en priorité aux shifts mis en évidence en couleur.\n" +" Pour s'inscrire, cliquer sur le bouton \"S'inscrire\".\n" +" Pour vous désinscrire à un shift, contactez-nous." + +#. module: beesdoo_website_shift +#: model:ir.ui.menu,name:beesdoo_website_shift.menu_website_shift_regular +msgid "Regular Shift" +msgstr "Shift régulier" + +#. module: beesdoo_website_shift +#: model:ir.model.fields,field_description:beesdoo_website_shift.field_beesdoo_website_shift_config_settings_regular_next_shift_limit +msgid "Regular next shift limit" +msgstr "Limite pour le prochain shift régulier" + +#. module: beesdoo_website_shift +#: model:ir.model.fields,field_description:beesdoo_website_shift.field_beesdoo_website_shift_config_settings_regular_past_shift_limit +msgid "Regular past shift limit" +msgstr "Limite de shifts réguliers passés" + +#. module: beesdoo_website_shift +#: model:ir.ui.menu,name:beesdoo_website_shift.menu_website_shift_root msgid "Shift" msgstr "Shift" -#. module: beesdoo_portal_shift -#: model:website.menu,name:beesdoo_portal_shift.menu_work_irregular +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_irregular_worker +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_regular_worker +msgid "Shift in Advance:" +msgstr "Shift en avance :" + +#. module: beesdoo_website_shift +#: model:website.menu,name:beesdoo_website_shift.menu_work_irregular msgid "Shifts Irregular" -msgstr "Shifts" +msgstr "Shifts volants" -#. module: beesdoo_portal_shift -#: model:website.menu,name:beesdoo_portal_shift.menu_work_regular +#. module: beesdoo_website_shift +#: model:website.menu,name:beesdoo_website_shift.menu_work_regular msgid "Shifts Regular" -msgstr "Créneaux" +msgstr "Créneaux réguliers" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_past_shifts +msgid "Status" +msgstr "Statut" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_worker_status_common +msgid "Status:" +msgstr "Statut :" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.available_shift_irregular_worker +msgid "Subscribe" +msgstr "S'inscrire" -#. module: beesdoo_portal_shift -#: model:ir.ui.view,arch_db:beesdoo_portal_shift.task_template -msgid "Super Cooperator" -msgstr "Super-coopérateur" +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.public_shift_irregular_worker +msgid "Subscribe via" +msgstr "Nous avons spécialement besoin d'aide pour les shifts&nbsp; pour lesquels il y a au moins 3 places disponibles. Inscriptions via" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.public_shift_template_regular_worker +#: model:ir.ui.view,arch_db:beesdoo_website_shift.task_template +msgid "Subscribe via the member office or via" +msgstr "Si vous ne trouvez pas de créneau qui vous convienne, prenez contact avec le bureau des membres ou via" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.available_shift_irregular_worker +msgid "Subscribed" +msgstr "Inscrit" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.public_shift_template_regular_worker +#: model:ir.ui.view,arch_db:beesdoo_website_shift.task_template +msgid "Super Co-operator" +msgstr "Supercoopérateur" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_next_shifts +msgid "Super Cooperator Info" +msgstr "Info supercoopérateur" -#. module: beesdoo_portal_shift -#: model:ir.ui.view,arch_db:beesdoo_portal_shift.task_template +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.task_template msgid "Task Template" -msgstr "Créneau" +msgstr "&nbsp;Créneau" -#. module: beesdoo_portal_shift -#: model:ir.ui.view,arch_db:beesdoo_portal_shift.shift_template -#: model:ir.ui.view,arch_db:beesdoo_portal_shift.task_template +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.available_shift_irregular_worker +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_next_shifts +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_past_shifts +#: model:ir.ui.view,arch_db:beesdoo_website_shift.public_shift_template_regular_worker +#: model:ir.ui.view,arch_db:beesdoo_website_shift.task_template msgid "Time" msgstr "Heures" -#. module: beesdoo_portal_shift -#: model:ir.ui.view,arch_db:beesdoo_portal_shift.shift_template +#. module: beesdoo_website_shift +#: model:ir.model.fields,help:beesdoo_website_shift.field_beesdoo_website_shift_config_settings_hide_rule +msgid "Treshold ((available space)/(max space)) in percentage of available space under wich the shift is hidden" +msgstr "Seuil ((places dispos)/(max places)) en pourcentage de places disponibles en-dessous duquel les shifts seront cachés." + +#. module: beesdoo_website_shift +#: model:ir.model.fields,help:beesdoo_website_shift.field_beesdoo_website_shift_config_settings_highlight_rule +msgid "Treshold of available space in a shift that trigger the highlight of the shift" +msgstr "Seuil de places disponibles dans un créneau qui déclenche la mise en avant d'un shift." + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.available_shift_irregular_worker +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_next_shifts +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_past_shifts msgid "Type of Shift" -msgstr "Type de shift" +msgstr "&nbsp;Type de shift" -#. module: beesdoo_portal_shift -#: model:ir.ui.view,arch_db:beesdoo_portal_shift.task_template +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.public_shift_template_regular_worker +#: model:ir.ui.view,arch_db:beesdoo_website_shift.task_template msgid "Type of Task" -msgstr "Type de créneau" +msgstr "&nbsp;Type de créneau" + +#. module: beesdoo_website_shift +#: model:ir.actions.act_window,name:beesdoo_website_shift.action_website_shift_config_irregular +msgid "Website Shift Settings Irregular Worker" +msgstr "Configuration de shifts pour volant (website)" -#. module: beesdoo_portal_shift -#: model:ir.ui.view,arch_db:beesdoo_portal_shift.task_template +#. module: beesdoo_website_shift +#: model:ir.actions.act_window,name:beesdoo_website_shift.action_website_shift_config_regular +msgid "Website Shift Settings Regular Worker" +msgstr "Configuration de shifts pour régulier (website)" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.public_shift_template_regular_worker +#: model:ir.ui.view,arch_db:beesdoo_website_shift.task_template msgid "Week" msgstr "Semaine" -#. module: beesdoo_portal_shift -#: model:ir.ui.view,arch_db:beesdoo_portal_shift.task_template +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_worker_status_title +msgid "Worker status" +msgstr "Statut du travailleur" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_worker_status_common +msgid "Working Mode:" +msgstr "Régime de travail : " + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.public_shift_template_regular_worker +#: model:ir.ui.view,arch_db:beesdoo_website_shift.task_template msgid "Yes" msgstr "Oui" -#. module: beesdoo_portal_shift -#: model:ir.ui.view,arch_db:beesdoo_portal_shift.task_template +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_worker_status_common +msgid "You are a Super Cooperator" +msgstr "Vous êtes un supercoopérateur" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_exempted_worker +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_non_worker +msgid "You don't have to participate to shift system." +msgstr "Vous ne devez pas participer au système de shift." + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_next_shifts +msgid "Your next shifts" +msgstr "Vos prochains shifts" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_past_shifts +msgid "Your past shifts" +msgstr "Vos shifts passés" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.my_shift_title +msgid "Your shifts" +msgstr "Vos shifts" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.available_shift_irregular_worker +msgid "available space(s)" +msgstr "Place(s) disponible(s)" + +#. module: beesdoo_website_shift +#: model:ir.model,name:beesdoo_website_shift.model_beesdoo_website_shift_config_settings +msgid "beesdoo.website.shift.config.settings" +msgstr "beesdoo.website.shift.config.settings" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.public_shift_template_regular_worker +#: model:ir.ui.view,arch_db:beesdoo_website_shift.task_template +msgid "full" +msgstr "complet" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.public_shift_template_regular_worker +#: model:ir.ui.view,arch_db:beesdoo_website_shift.task_template msgid "membre@bees-coop.be" -msgstr "membre@bees-coop.be" +msgstr "membre@bees-coop.be
" -#. module: beesdoo_portal_shift -#: model:ir.ui.view,arch_db:beesdoo_portal_shift.shift_template +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.available_shift_irregular_worker +#: model:ir.ui.view,arch_db:beesdoo_website_shift.public_shift_template_regular_worker +#: model:ir.ui.view,arch_db:beesdoo_website_shift.task_template +msgid "space(s)" +msgstr "place(s)" + +#. module: beesdoo_website_shift +#: model:ir.ui.view,arch_db:beesdoo_website_shift.public_shift_irregular_worker msgid "volant@bees-coop.be" -msgstr "volant@bees-coop.be" +msgstr "membre@bees-coop.be" + diff --git a/beesdoo_website_shift/views/my_shift_website_templates.xml b/beesdoo_website_shift/views/my_shift_website_templates.xml index d520122..fdb7eb1 100644 --- a/beesdoo_website_shift/views/my_shift_website_templates.xml +++ b/beesdoo_website_shift/views/my_shift_website_templates.xml @@ -135,17 +135,17 @@
- - - - + + - +
- + @@ -167,23 +167,23 @@ - + - + - - - + - + - + @@ -194,23 +194,23 @@ -