From 80ac172d62bcb07dd262f5811cfdd42a024b5aa9 Mon Sep 17 00:00:00 2001 From: michel Date: Wed, 28 Feb 2018 09:19:09 +0100 Subject: [PATCH 01/22] [TMP] Report family --- golem_family/__manifest__.py | 3 +- golem_family/report/__init__.py | 19 +++++ golem_family/report/golem_family_report.xml | 82 +++++++++++++++++++++ 3 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 golem_family/report/__init__.py create mode 100644 golem_family/report/golem_family_report.xml diff --git a/golem_family/__manifest__.py b/golem_family/__manifest__.py index 2b720c4..a21fbb6 100644 --- a/golem_family/__manifest__.py +++ b/golem_family/__manifest__.py @@ -26,5 +26,6 @@ 'installable': True, 'depends': ['golem_member'], 'data': ['security/ir.model.access.csv', 'views/golem_family_views.xml', - 'views/golem_member_views.xml', 'views/res_partner_views.xml'] + 'views/golem_member_views.xml', 'views/res_partner_views.xml', + 'report/golem_family_report.xml'] } diff --git a/golem_family/report/__init__.py b/golem_family/report/__init__.py new file mode 100644 index 0000000..be7ae43 --- /dev/null +++ b/golem_family/report/__init__.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- + +# Copyright 2016 Fabien Bourgeois +# Copyright 2018 Michel Dessenne + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +from . import golem_family diff --git a/golem_family/report/golem_family_report.xml b/golem_family/report/golem_family_report.xml new file mode 100644 index 0000000..10527ff --- /dev/null +++ b/golem_family/report/golem_family_report.xml @@ -0,0 +1,82 @@ + + + + + + + + European A4 Portrait + + A4 + 0 + 0 + Portrait + 40 + 23 + 7 + 7 + + 35 + 90 + + + + + + + From e80facbff8b7e3324d983b8c043d9058b06449a1 Mon Sep 17 00:00:00 2001 From: michel Date: Wed, 28 Feb 2018 18:18:09 +0100 Subject: [PATCH 02/22] [TMP] Report Family add report member form. --- golem_family/report/golem_family_report.xml | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/golem_family/report/golem_family_report.xml b/golem_family/report/golem_family_report.xml index 10527ff..63f62fd 100644 --- a/golem_family/report/golem_family_report.xml +++ b/golem_family/report/golem_family_report.xml @@ -40,7 +40,7 @@ along with this program. If not, see . + + + From e52c9028fa45fde2584cb7cd825ea6a191be13c0 Mon Sep 17 00:00:00 2001 From: eloyoussef Date: Sun, 11 Mar 2018 21:50:18 +0100 Subject: [PATCH 03/22] =?UTF-8?q?ajout=20du=20fonction=20de=20verification?= =?UTF-8?q?=20de=20conflit=20de=20r=C3=A9servation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../models/golem_resource_reservation.py | 149 +++++++++++------- .../models/golem_resource_timetable.py | 16 ++ .../golem_resource_reservation_views.xml | 10 +- .../views/golem_resource_timetable_views.xml | 7 +- 4 files changed, 114 insertions(+), 68 deletions(-) diff --git a/golem_resource/models/golem_resource_reservation.py b/golem_resource/models/golem_resource_reservation.py index 79206e7..f323e7c 100644 --- a/golem_resource/models/golem_resource_reservation.py +++ b/golem_resource/models/golem_resource_reservation.py @@ -19,6 +19,7 @@ """ GOLEM Resource Reservation """ from math import modf +from datetime import timedelta from odoo import models, fields, api, _ from odoo.exceptions import ValidationError @@ -28,18 +29,24 @@ class GolemResourceReservation(models.Model): _name = 'golem.resource.reservation' _description = 'GOLEM Reservation Model' _inherit = 'mail.thread' - _order = 'date desc,hour_start asc' + _order = 'date_start desc' name = fields.Char(compute='_compute_name', store=True) # TODO: handle multiple days reservation - date = fields.Date(required=True, index=True, readonly=True, - states={'draft': [('readonly', False)]}) - hour_start = fields.Float('Start hour', required=True, readonly=True, - states={'draft': [('readonly', False)]}) - hour_stop = fields.Float('Stop hour', required=True, readonly=True, - states={'draft': [('readonly', False)]}) - date_start = fields.Datetime(compute='_compute_date_start', store=True, index=True) - date_stop = fields.Datetime(compute='_compute_date_stop', store=True, index=True) + date_start = fields.Datetime('Start date', required=True, + index=True, readonly=True, + states={'draft': [('readonly', False)]}) + date_stop = fields.Datetime('Stop date', required=True, + index=True, readonly=True, + states={'draft': [('readonly', False)]}) + #date = fields.Date(required=True, index=True, readonly=True, + # states={'draft': [('readonly', False)]}) + #hour_start = fields.Float('Start hour', required=True, readonly=True, + # states={'draft': [('readonly', False)]}) + #hour_stop = fields.Float('Stop hour', required=True, readonly=True, + # states={'draft': [('readonly', False)]}) + #date_start = fields.Datetime(compute='_compute_date_start', store=True, index=True) + #date_stop = fields.Datetime(compute='_compute_date_stop', store=True, index=True) resource_id = fields.Many2one('golem.resource', required=True, index=True, string='Resource', readonly=True, @@ -68,46 +75,49 @@ class GolemResourceReservation(models.Model): rejection_reason = fields.Text(readonly=True, track_visibility='onchange') - @api.depends('resource_id', 'date') + @api.depends('resource_id', 'date_start') def _compute_name(self): """ Computes reservation name """ for reservation in self: reservation.name = u'{}/{}'.format(reservation.resource_id.name, - reservation.date) + reservation.date_start) - @api.depends('date', 'hour_start') - def _compute_date_start(self): - """ Computes Date start """ - for reservation in self: - minute_start, hour_start = modf(reservation.hour_start) - hour_start = int(hour_start) - minute_start = int(round(minute_start * 60)) - reservation.date_start = u'{} {}:{}:00'.format(reservation.date, - hour_start, minute_start) + #@api.depends('date', 'hour_start') + #def _compute_date_start(self): + # """ Computes Date start """ + # for reservation in self: + # minute_start, hour_start = modf(reservation.hour_start) + # hour_start = int(hour_start) + # minute_start = int(round(minute_start * 60)) + # reservation.date_start = u'{} {}:{}:00'.format(reservation.date, + # hour_start, minute_start) - @api.depends('date', 'hour_stop') - def _compute_date_stop(self): - """ Computes Date stop """ - for reservation in self: - minute_stop, hour_stop = modf(reservation.hour_stop) - hour_stop = int(hour_stop) - minute_stop = int(round(minute_stop * 60)) - reservation.date_stop = u'{} {}:{}:00'.format(reservation.date, - hour_stop, minute_stop) + #@api.depends('date', 'hour_stop') + #def _compute_date_stop(self): + # """ Computes Date stop """ + # for reservation in self: + # minute_stop, hour_stop = modf(reservation.hour_stop) + # hour_stop = int(hour_stop) + # minute_stop = int(round(minute_stop * 60)) + # reservation.date_stop = u'{} {}:{}:00'.format(reservation.date, + # hour_stop, minute_stop) - @api.onchange('hour_start') - def onchange_hour_start(self): + @api.onchange('date_start') + def onchange_date_start(self): """ Propose automatically stop hour after start hour had been filled """ for reservation in self: - if reservation.hour_start and not reservation.hour_stop: - reservation.hour_stop = reservation.hour_start + 1 + if reservation.date_start: + start = fields.Datetime.from_string(reservation.date_start) + duration = timedelta(hours=1) + reservation.date_stop = start + duration - @api.constrains('hour_start', 'hour_stop') - def _check_hour_consistency(self): - """ Checks hour consistency """ + + @api.constrains('date_start', 'date_stop') + def _check_date_consistency(self): + """ Checks date consistency """ for reservation in self: - if reservation.hour_stop <= reservation.hour_start: - raise ValidationError(_('End time should be after than start time')) + if reservation.date_stop <= reservation.date_start: + raise ValidationError(_('Stop date should be after start date')) @api.multi def state_draft(self): @@ -162,8 +172,8 @@ class GolemResourceReservation(models.Model): for reservation in self: if reservation.state == 'confirmed': # Check is reservation is not taking place out of the resource avaibility period - if reservation.date < reservation.resource_id.avaibility_start or \ - reservation.date > reservation.resource_id.avaibility_stop: + if reservation.date_start < reservation.resource_id.avaibility_start or \ + reservation.date_stop > reservation.resource_id.avaibility_stop: verr = _('Not allowed, the resource is not available in ' 'this period, please choose another périod before ' 'confirming') @@ -171,32 +181,51 @@ class GolemResourceReservation(models.Model): #check if the resource hasn't a total availibility if not reservation.resource_id.availibility_24_7: # Check if reservation is not taking place out the avaibility timetables - is_day_allowed = False - for timetable in reservation.resource_id.timetable_ids: - # Check for the time according to resource timetable avaibility - date = fields.Datetime.from_string(reservation.date) - if int(timetable.weekday) == date.weekday(): - is_day_allowed = True - if reservation.hour_start < timetable.time_start or \ - reservation.hour_stop > timetable.time_stop: - verr = _('Not allowed, the resource is not available ' - 'during this period, please choose another ' - 'time before confirming.') - raise ValidationError(verr) - if not is_day_allowed: - verr = _('Not allowed, the resource is not available ' - 'this day. Please choose another date.') - raise ValidationError(verr) + date_start = fields.Datetime.from_string(reservation.date_start) + date_stop = fields.Datetime.from_string(reservation.date_stop) + reservation_period = [date_start + timedelta(days=x) for x in range((date_stop - date_start).days +1)] + for reservation_day in reservation_period: + is_day_allowed = False + for timetable in reservation.resource_id.timetable_ids: + # Check for the time according to resource timetable avaibility + #date = fields.Datetime.from_string(reservation_day) + if int(timetable.weekday) == reservation_day.weekday(): + is_day_allowed = True + #only check if the day hasn't a 24 availibility + if not timetable.availibility_24: + hour_start = 0.0 + hour_stop = 0.0 + if (reservation_day == date_start and + reservation_day == date_stop): + hour_start = date_start.hour + date_start.minute/60.0 + hour_stop = date_stop.hour + date_stop.minute/60.0 + elif (reservation_day == date_start and + reservation_day != date_stop): + hour_start = date_start.hour + date_start.minute/60.0 + hour_stop = 23.98 + elif (reservation_day == date_stop and + reservation_day != date_start): + hour_start = 0.0 + hour_stop = date_stop.hour + date_stop.minute/60.0 + + if hour_start < timetable.time_start or \ + hour_stop > timetable.time_stop: + verr = _('Not allowed, the resource is not available ' + 'during this period, please choose another ' + 'time before confirming.') + raise ValidationError(verr) + if not is_day_allowed: + verr = _('Not allowed, the resource is not available ' + 'this day. Please choose another date.') + raise ValidationError(verr) # Check if the resource is already taken during this period - # PERF : check the date, not iterate over all reservations domain = [('resource_id', '=', reservation.resource_id.id), - ('date', '=', reservation.date), ('state', 'in', ('confirmed', 'validated')), ('id', '!=', reservation.id)] reservations = self.env['golem.resource.reservation'].search(domain) for other_res in reservations: - if (other_res.hour_start < reservation.hour_start < other_res.hour_stop) or \ - (other_res.hour_start < reservation.hour_stop < other_res.hour_stop): + if (other_res.date_start < reservation.date_start < other_res.date_stop) or \ + (other_res.date_start < reservation.date_stop < other_res.date_stop): verr = _('Not allowed, the resource is already taken ' 'during this period : from {} to {} this day, ' 'please choose another périod before confirming.') diff --git a/golem_resource/models/golem_resource_timetable.py b/golem_resource/models/golem_resource_timetable.py index e3eb8c9..9597643 100644 --- a/golem_resource/models/golem_resource_timetable.py +++ b/golem_resource/models/golem_resource_timetable.py @@ -39,6 +39,15 @@ class GolemTimetable(models.Model): ('6', _('Sunday'))], required=True) time_start = fields.Float(required=True, string='Start') time_stop = fields.Float(required=True, string='Stop') + availibility_24 = fields.Boolean(string="All day") + @api.onchange('availibility_24') + def _set_time_start_stop(self): + """ set start and stop time """ + self.ensure_one() + if self.availibility_24: + self.time_start = 0.0 + self.time_stop = 23.99 + @api.onchange('time_start') def onchange_time_start(self): @@ -53,3 +62,10 @@ class GolemTimetable(models.Model): for timetable in self: if timetable.time_stop <= timetable.time_start: raise ValidationError(_('End time should be after than start time')) + + @api.constrains('time_start', 'time_stop') + def _check_time_all_day(self): + """ Checks time all day availibility """ + for timetable in self: + if timetable.time_stop > 23.98 and timetable.time_start == 0: + timetable.write({'availibility_24': True}) diff --git a/golem_resource/views/golem_resource_reservation_views.xml b/golem_resource/views/golem_resource_reservation_views.xml index e542f0a..03c2063 100644 --- a/golem_resource/views/golem_resource_reservation_views.xml +++ b/golem_resource/views/golem_resource_reservation_views.xml @@ -39,9 +39,8 @@ along with this program. If not, see . - - - + + @@ -82,9 +81,8 @@ along with this program. If not, see . - - - + + . - - + + + From 2a5c426bb28b5338e4b352ca1fea84da85137cef Mon Sep 17 00:00:00 2001 From: eloyoussef Date: Mon, 12 Mar 2018 12:48:09 +0100 Subject: [PATCH 04/22] correction des bugs au niveau de la fonction de confirmation d'une reservation --- .../models/golem_resource_reservation.py | 26 +++++++++++-------- .../models/golem_resource_timetable.py | 22 +++++++++++----- .../views/golem_resource_timetable_views.xml | 6 ++--- 3 files changed, 32 insertions(+), 22 deletions(-) diff --git a/golem_resource/models/golem_resource_reservation.py b/golem_resource/models/golem_resource_reservation.py index f323e7c..2fff85e 100644 --- a/golem_resource/models/golem_resource_reservation.py +++ b/golem_resource/models/golem_resource_reservation.py @@ -183,7 +183,8 @@ class GolemResourceReservation(models.Model): # Check if reservation is not taking place out the avaibility timetables date_start = fields.Datetime.from_string(reservation.date_start) date_stop = fields.Datetime.from_string(reservation.date_stop) - reservation_period = [date_start + timedelta(days=x) for x in range((date_stop - date_start).days +1)] + reservation_period = [date_start + timedelta(days=x) for x in range( + (date_stop - date_start).days +1)] for reservation_day in reservation_period: is_day_allowed = False for timetable in reservation.resource_id.timetable_ids: @@ -195,28 +196,31 @@ class GolemResourceReservation(models.Model): if not timetable.availibility_24: hour_start = 0.0 hour_stop = 0.0 - if (reservation_day == date_start and - reservation_day == date_stop): + if (reservation_day.date() == date_start.date() and + reservation_day.date() == date_stop.date()): hour_start = date_start.hour + date_start.minute/60.0 hour_stop = date_stop.hour + date_stop.minute/60.0 - elif (reservation_day == date_start and - reservation_day != date_stop): + elif reservation_day.date() == date_start.date(): hour_start = date_start.hour + date_start.minute/60.0 hour_stop = 23.98 - elif (reservation_day == date_stop and - reservation_day != date_start): + elif reservation_day.date() == date_stop.date(): + hour_start = 0.0 hour_stop = date_stop.hour + date_stop.minute/60.0 + else: + #if the day is not a start nor stop it's not allowed unless + #availibility_24 is True + is_day_allowed = False - if hour_start < timetable.time_start or \ - hour_stop > timetable.time_stop: + if is_day_allowed and (hour_start < timetable.time_start or \ + hour_stop > timetable.time_stop): verr = _('Not allowed, the resource is not available ' - 'during this period, please choose another ' + 'during this schedule, please choose another ' 'time before confirming.') raise ValidationError(verr) if not is_day_allowed: verr = _('Not allowed, the resource is not available ' - 'this day. Please choose another date.') + 'in a day you chosed. Please choose another date.') raise ValidationError(verr) # Check if the resource is already taken during this period domain = [('resource_id', '=', reservation.resource_id.id), diff --git a/golem_resource/models/golem_resource_timetable.py b/golem_resource/models/golem_resource_timetable.py index 9597643..b71e937 100644 --- a/golem_resource/models/golem_resource_timetable.py +++ b/golem_resource/models/golem_resource_timetable.py @@ -40,15 +40,23 @@ class GolemTimetable(models.Model): time_start = fields.Float(required=True, string='Start') time_stop = fields.Float(required=True, string='Stop') availibility_24 = fields.Boolean(string="All day") - @api.onchange('availibility_24') - def _set_time_start_stop(self): - """ set start and stop time """ - self.ensure_one() - if self.availibility_24: - self.time_start = 0.0 - self.time_stop = 23.99 + #@api.onchange('availibility_24') + #def _set_time_start_stop(self): + # """ set start and stop time """ + # self.ensure_one() + # if self.availibility_24: + # self.time_start = 0.0 + # self.time_stop = 23.99 + @api.onchange('availibility_24') + def onchange_availibility_24(self): + """ Propose automatically stop hour after start hour had been filled """ + for line in self: + if line.availibility_24: + line.time_start = 0.0 + line.time_stop = 23.98 + @api.onchange('time_start') def onchange_time_start(self): """ Propose automatically stop hour after start hour had been filled """ diff --git a/golem_resource/views/golem_resource_timetable_views.xml b/golem_resource/views/golem_resource_timetable_views.xml index 1dabadc..aedd45f 100644 --- a/golem_resource/views/golem_resource_timetable_views.xml +++ b/golem_resource/views/golem_resource_timetable_views.xml @@ -28,10 +28,8 @@ along with this program. If not, see . - - + + From 41876e19c050be98fb6c0356cc6fa1832d327ee0 Mon Sep 17 00:00:00 2001 From: eloyoussef Date: Mon, 12 Mar 2018 14:55:47 +0100 Subject: [PATCH 05/22] Correction de test --- .../models/golem_resource_reservation.py | 4 +- .../tests/test_golem_resource_reservation.py | 65 ++++++------------- 2 files changed, 24 insertions(+), 45 deletions(-) diff --git a/golem_resource/models/golem_resource_reservation.py b/golem_resource/models/golem_resource_reservation.py index 2fff85e..e098dad 100644 --- a/golem_resource/models/golem_resource_reservation.py +++ b/golem_resource/models/golem_resource_reservation.py @@ -82,6 +82,8 @@ class GolemResourceReservation(models.Model): reservation.name = u'{}/{}'.format(reservation.resource_id.name, reservation.date_start) + + #@api.depends('date', 'hour_start') #def _compute_date_start(self): # """ Computes Date start """ @@ -220,7 +222,7 @@ class GolemResourceReservation(models.Model): raise ValidationError(verr) if not is_day_allowed: verr = _('Not allowed, the resource is not available ' - 'in a day you chosed. Please choose another date.') + 'this day. Please choose another date.') raise ValidationError(verr) # Check if the resource is already taken during this period domain = [('resource_id', '=', reservation.resource_id.id), diff --git a/golem_resource/tests/test_golem_resource_reservation.py b/golem_resource/tests/test_golem_resource_reservation.py index dc58e81..a5f18a3 100644 --- a/golem_resource/tests/test_golem_resource_reservation.py +++ b/golem_resource/tests/test_golem_resource_reservation.py @@ -55,9 +55,8 @@ class TestGolemResourceReservation(TransactionCase): self.data = { 'resource_id': self.resource.id, - 'date': '2018-02-05', # is monday - 'hour_start': 11.0, - 'hour_stop': 12.0, + 'date_start': '2018-02-05 11:00:00', # is monday + 'date_stop': '2018-02-05 12:00:00', 'partner_id': self.partner.id } self.res_obj = self.env['golem.resource.reservation'] @@ -67,28 +66,26 @@ class TestGolemResourceReservation(TransactionCase): reservation = self.res_obj.create(self.data) self.assertEqual(reservation.partner_id, self.partner) self.assertEqual(reservation.user_id, self.env.user) - self.assertEqual(reservation.hour_start, 11.0) - self.assertEqual(reservation.hour_stop, 12.0) - self.assertEqual(reservation.state, 'draft') - self.assertFalse(reservation.rejection_reason) - self.assertEqual(reservation.name, 'Resource/2018-02-05') self.assertEqual(reservation.date_start, '2018-02-05 11:00:00') self.assertEqual(reservation.date_stop, '2018-02-05 12:00:00') + self.assertEqual(reservation.state, 'draft') + self.assertFalse(reservation.rejection_reason) + self.assertEqual(reservation.name, 'Resource/2018-02-05 11:00:00') self.assertEqual(reservation.resource_id, self.resource) self.assertEqual(len(reservation.resource_timetable_ids), 1) self.assertEqual(reservation.resource_id.reservation_ids[0], reservation) def test_reservation_hours(self): - """ Test thats stop hour can not be after or equal start hour """ - self.data['hour_stop'] = 7.0 + """ Test thats stop date can not be after or equal start date """ + self.data['date_stop'] = '2018-02-05 10:00:00' with self.assertRaises(ValidationError): self.res_obj.create(self.data) with self.assertRaises(ValidationError): self.res_obj.create({ - 'resource_id': self.resource.id, 'date': '2018-02-05', - 'hour_start': 12.0, 'hour_stop': 12.0, - 'partner_id': self.partner.id - }) + 'resource_id': self.resource.id, + 'date_start': '2018-02-05 11:00:00', + 'date_stop': '2018-02-05 11:00:00', + 'partner_id': self.partner.id}) def test_state_basic(self): """ Tests basic state methods """ @@ -141,55 +138,35 @@ class TestGolemResourceReservation(TransactionCase): self.env.user.groups_id = [(2, group_manager.id, False)] with self.assertRaises(ValidationError) as err: reservation.state_validated() - self.assertIn(u'autorisations nécessaires pour valider', err.exception.args[0]) + self.assertIn(u'autorisations nécessaires pour valider', err.exception.args[0]) def test_confirmed_period(self): """ Test allowed period """ - self.data['date'] = '2012-01-01' # Out of period + self.data['date_start'] = '2012-02-05 11:00:00' # Out of period reservation = self.res_obj.create(self.data) with self.assertRaises(ValidationError) as err: reservation.state_confirm() - self.assertIn(u'pas disponible durant cette période', err.exception.args[0]) + self.assertIn(u'pas disponible durant cette période', err.exception.args[0]) def test_confirmed_allowed_day(self): """ Test allowed day """ - self.data['date'] = '2018-02-06' # Bad day + self.data['date_start'] = '2018-02-04 11:00:00' # Bad day reservation = self.res_obj.create(self.data) with self.assertRaises(ValidationError) as err: reservation.state_confirm() - self.assertIn('pas disponible ce jour', err.exception.args[0]) + self.assertIn('pas disponible ce jour', err.exception.args[0]) def test_confirmed_allowed_hours(self): """ Test allowed hours """ - self.data['hour_stop'] = 14.0 # Out of range stop hour + self.data['date_stop'] = '2018-02-05 14:00:00' # Out of range stop hour reservation = self.res_obj.create(self.data) with self.assertRaises(ValidationError) as err: reservation.state_confirm() - self.assertIn(u'merci de choisir d\'autres horaires', err.exception.args[0]) + self.assertIn(u'merci de choisir d\'autres horaires', err.exception.args[0]) reservation = self.res_obj.create({'resource_id': self.resource.id, - 'date': '2018-02-05', - 'hour_start': 5.0, # Out of range start hour - 'hour_stop': 12.0, + 'date_start': '2018-02-05 05:00:00',# Out of range start hour + 'date_stop': '2018-02-05 12:00:00', 'partner_id': self.partner.id}) with self.assertRaises(ValidationError) as err: - reservation.state_confirm() + reservation.state_confirm() self.assertIn(u'merci de choisir d\'autres horaires', err.exception.args[0]) - - def test_confirmed_other_res(self): - """ Test if there are other reservations in conflict """ - reservation = self.res_obj.create(self.data) - reservation.state_confirm() - reservation2 = self.res_obj.create({ - 'resource_id': self.resource.id, 'date': '2018-02-05', - 'hour_start': 10.0, 'hour_stop': 11.0, # OK, no conflict - 'partner_id': self.partner.id - }) - reservation2.state_confirm() - reservation3 = self.res_obj.create({ - 'resource_id': self.resource.id, 'date': '2018-02-05', - 'hour_start': 10.0, 'hour_stop': 10.5, # Conflict with 2nd res - 'partner_id': self.partner.id - }) - with self.assertRaises(ValidationError) as err: - reservation3.state_confirm() - self.assertIn(u'déjà réservée durant cette période', err.exception.args[0]) From 0dda362d787762ea58e83eb3abc7e7035da0a5f0 Mon Sep 17 00:00:00 2001 From: eloyoussef Date: Mon, 12 Mar 2018 15:34:43 +0100 Subject: [PATCH 06/22] =?UTF-8?q?mise=20=C3=A0=20jours=20du=20test=20avec?= =?UTF-8?q?=20date=5Fstart=20et=20date=5Fstop?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../models/golem_resource_reservation.py | 2 +- .../tests/test_golem_resource_reservation.py | 31 ++++++++++++++++--- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/golem_resource/models/golem_resource_reservation.py b/golem_resource/models/golem_resource_reservation.py index e098dad..0944819 100644 --- a/golem_resource/models/golem_resource_reservation.py +++ b/golem_resource/models/golem_resource_reservation.py @@ -217,7 +217,7 @@ class GolemResourceReservation(models.Model): if is_day_allowed and (hour_start < timetable.time_start or \ hour_stop > timetable.time_stop): verr = _('Not allowed, the resource is not available ' - 'during this schedule, please choose another ' + 'during this period, please choose another ' 'time before confirming.') raise ValidationError(verr) if not is_day_allowed: diff --git a/golem_resource/tests/test_golem_resource_reservation.py b/golem_resource/tests/test_golem_resource_reservation.py index a5f18a3..f110882 100644 --- a/golem_resource/tests/test_golem_resource_reservation.py +++ b/golem_resource/tests/test_golem_resource_reservation.py @@ -138,7 +138,7 @@ class TestGolemResourceReservation(TransactionCase): self.env.user.groups_id = [(2, group_manager.id, False)] with self.assertRaises(ValidationError) as err: reservation.state_validated() - self.assertIn(u'autorisations nécessaires pour valider', err.exception.args[0]) + self.assertIn(u'autorisations nécessaires pour valider', err.exception.args[0]) def test_confirmed_period(self): """ Test allowed period """ @@ -146,7 +146,7 @@ class TestGolemResourceReservation(TransactionCase): reservation = self.res_obj.create(self.data) with self.assertRaises(ValidationError) as err: reservation.state_confirm() - self.assertIn(u'pas disponible durant cette période', err.exception.args[0]) + self.assertIn(u'pas disponible durant cette période', err.exception.args[0]) def test_confirmed_allowed_day(self): """ Test allowed day """ @@ -154,7 +154,7 @@ class TestGolemResourceReservation(TransactionCase): reservation = self.res_obj.create(self.data) with self.assertRaises(ValidationError) as err: reservation.state_confirm() - self.assertIn('pas disponible ce jour', err.exception.args[0]) + self.assertIn('pas disponible ce jour', err.exception.args[0]) def test_confirmed_allowed_hours(self): """ Test allowed hours """ @@ -162,11 +162,32 @@ class TestGolemResourceReservation(TransactionCase): reservation = self.res_obj.create(self.data) with self.assertRaises(ValidationError) as err: reservation.state_confirm() - self.assertIn(u'merci de choisir d\'autres horaires', err.exception.args[0]) + self.assertIn(u'merci de choisir d\'autres horaires', err.exception.args[0]) reservation = self.res_obj.create({'resource_id': self.resource.id, 'date_start': '2018-02-05 05:00:00',# Out of range start hour 'date_stop': '2018-02-05 12:00:00', 'partner_id': self.partner.id}) with self.assertRaises(ValidationError) as err: - reservation.state_confirm() + reservation.state_confirm() self.assertIn(u'merci de choisir d\'autres horaires', err.exception.args[0]) + + def test_confirmed_other_res(self): + """ Test if there are other reservations in conflict """ + reservation = self.res_obj.create(self.data) + reservation.state_confirm() + reservation2 = self.res_obj.create({ + 'resource_id': self.resource.id, + 'date_start': '2018-02-05 10:00:00', + 'date_stop': '2018-02-05 11:00:00', + 'partner_id': self.partner.id + }) + reservation2.state_confirm() + reservation3 = self.res_obj.create({ + 'resource_id': self.resource.id, + 'date_start': '2018-02-05 11:20:00', + 'date_stop': '2018-02-05 11:40:00',# Conflict with 2nd res + 'partner_id': self.partner.id + }) + with self.assertRaises(ValidationError) as err: + reservation3.state_confirm() + self.assertIn(u'déjà réservée durant cette période', err.exception.args[0]) From ff70e46612cb2a05d879700e812cae7f02943f28 Mon Sep 17 00:00:00 2001 From: eloyoussef Date: Mon, 12 Mar 2018 19:28:21 +0100 Subject: [PATCH 07/22] Ajout du fonction de test multidays + correction du code --- .../models/golem_resource_reservation.py | 32 ----------------- .../models/golem_resource_timetable.py | 24 ++++++------- .../tests/test_golem_resource_reservation.py | 35 +++++++++++++++++-- .../tests/test_golem_resource_timetable.py | 1 + .../views/golem_resource_timetable_views.xml | 8 ++--- 5 files changed, 49 insertions(+), 51 deletions(-) diff --git a/golem_resource/models/golem_resource_reservation.py b/golem_resource/models/golem_resource_reservation.py index 0944819..7ccd85a 100644 --- a/golem_resource/models/golem_resource_reservation.py +++ b/golem_resource/models/golem_resource_reservation.py @@ -39,15 +39,6 @@ class GolemResourceReservation(models.Model): date_stop = fields.Datetime('Stop date', required=True, index=True, readonly=True, states={'draft': [('readonly', False)]}) - #date = fields.Date(required=True, index=True, readonly=True, - # states={'draft': [('readonly', False)]}) - #hour_start = fields.Float('Start hour', required=True, readonly=True, - # states={'draft': [('readonly', False)]}) - #hour_stop = fields.Float('Stop hour', required=True, readonly=True, - # states={'draft': [('readonly', False)]}) - #date_start = fields.Datetime(compute='_compute_date_start', store=True, index=True) - #date_stop = fields.Datetime(compute='_compute_date_stop', store=True, index=True) - resource_id = fields.Many2one('golem.resource', required=True, index=True, string='Resource', readonly=True, track_visibility='onchange', @@ -82,28 +73,6 @@ class GolemResourceReservation(models.Model): reservation.name = u'{}/{}'.format(reservation.resource_id.name, reservation.date_start) - - - #@api.depends('date', 'hour_start') - #def _compute_date_start(self): - # """ Computes Date start """ - # for reservation in self: - # minute_start, hour_start = modf(reservation.hour_start) - # hour_start = int(hour_start) - # minute_start = int(round(minute_start * 60)) - # reservation.date_start = u'{} {}:{}:00'.format(reservation.date, - # hour_start, minute_start) - - #@api.depends('date', 'hour_stop') - #def _compute_date_stop(self): - # """ Computes Date stop """ - # for reservation in self: - # minute_stop, hour_stop = modf(reservation.hour_stop) - # hour_stop = int(hour_stop) - # minute_stop = int(round(minute_stop * 60)) - # reservation.date_stop = u'{} {}:{}:00'.format(reservation.date, - # hour_stop, minute_stop) - @api.onchange('date_start') def onchange_date_start(self): """ Propose automatically stop hour after start hour had been filled """ @@ -206,7 +175,6 @@ class GolemResourceReservation(models.Model): hour_start = date_start.hour + date_start.minute/60.0 hour_stop = 23.98 elif reservation_day.date() == date_stop.date(): - hour_start = 0.0 hour_stop = date_stop.hour + date_stop.minute/60.0 else: diff --git a/golem_resource/models/golem_resource_timetable.py b/golem_resource/models/golem_resource_timetable.py index b71e937..b09b7bf 100644 --- a/golem_resource/models/golem_resource_timetable.py +++ b/golem_resource/models/golem_resource_timetable.py @@ -37,25 +37,25 @@ class GolemTimetable(models.Model): ('4', _('Friday')), ('5', _('Saturday')), ('6', _('Sunday'))], required=True) - time_start = fields.Float(required=True, string='Start') - time_stop = fields.Float(required=True, string='Stop') + time_start = fields.Float(string='Start') + time_stop = fields.Float(string='Stop') availibility_24 = fields.Boolean(string="All day") - #@api.onchange('availibility_24') - #def _set_time_start_stop(self): - # """ set start and stop time """ - # self.ensure_one() - # if self.availibility_24: - # self.time_start = 0.0 - # self.time_stop = 23.99 - - + @api.onchange('availibility_24') def onchange_availibility_24(self): - """ Propose automatically stop hour after start hour had been filled """ + """ fill time_start et time_stop if availibility_24 is True """ for line in self: if line.availibility_24: line.time_start = 0.0 line.time_stop = 23.98 + @api.constrains('availibility_24') + @api.multi + def check_time_filling(self): + """ Check start and stop time filling out""" + for line in self: + if not line.availibility_24 and (not line.time_start or not line.time_stop): + raise ValidationError(_('Start and stop time should be filled out ' + 'if the 24 availibility is not checked.')) @api.onchange('time_start') def onchange_time_start(self): diff --git a/golem_resource/tests/test_golem_resource_reservation.py b/golem_resource/tests/test_golem_resource_reservation.py index f110882..ae2a9d6 100644 --- a/golem_resource/tests/test_golem_resource_reservation.py +++ b/golem_resource/tests/test_golem_resource_reservation.py @@ -43,9 +43,21 @@ class TestGolemResourceReservation(TransactionCase): }) self.timetable_obj = self.env['golem.resource.timetable'] + timetable_data = {'resource_id': self.resource.id, 'weekday': '0', 'time_start': 8.0, 'time_stop': 12.0} + timetable_data2 = {'resource_id': self.resource.id, 'weekday': '1', + 'availibility_24': True} + timetable_data3 = {'resource_id': self.resource.id, 'weekday': '2', + 'time_start': 7.0, 'time_stop': 23.98} + timetable_data4 = {'resource_id': self.resource.id, 'weekday': '3', + 'availibility_24': True} + self.timetable_obj.create(timetable_data) + self.timetable_obj.create(timetable_data2) + self.timetable_obj.create(timetable_data3) + self.timetable_obj.create(timetable_data4) + timetable_data['resource_id'] = self.resource_val.id self.timetable_obj.create(timetable_data) @@ -72,7 +84,7 @@ class TestGolemResourceReservation(TransactionCase): self.assertFalse(reservation.rejection_reason) self.assertEqual(reservation.name, 'Resource/2018-02-05 11:00:00') self.assertEqual(reservation.resource_id, self.resource) - self.assertEqual(len(reservation.resource_timetable_ids), 1) + self.assertEqual(len(reservation.resource_timetable_ids), 4) self.assertEqual(reservation.resource_id.reservation_ids[0], reservation) def test_reservation_hours(self): @@ -111,6 +123,7 @@ class TestGolemResourceReservation(TransactionCase): reservation.state_confirm() self.assertEqual(reservation.state, 'validated') + def test_state_rejected(self): """ Tests state rejected """ self.data['resource_id'] = self.resource_val.id @@ -146,7 +159,7 @@ class TestGolemResourceReservation(TransactionCase): reservation = self.res_obj.create(self.data) with self.assertRaises(ValidationError) as err: reservation.state_confirm() - self.assertIn(u'pas disponible durant cette période', err.exception.args[0]) + self.assertIn(u'pas disponible durant cette période', err.exception.args[0]) def test_confirmed_allowed_day(self): """ Test allowed day """ @@ -156,13 +169,29 @@ class TestGolemResourceReservation(TransactionCase): reservation.state_confirm() self.assertIn('pas disponible ce jour', err.exception.args[0]) + def test_multidays_reservation(self): + """ Test multidays reservation """ + #two days allowed reservation + self.data['date_start'] = '2018-02-07 14:00:00' # Wednesday : allowed FROM 7 + self.data['date_stop'] = '2018-02-08 11:00:00' # Thursday : allowed + reservation = self.res_obj.create(self.data) + reservation.state_confirm() + self.assertEqual(reservation.state, 'validated') + reservation.state_draft() + #Two days allowed but one not allowed in the middle + reservation.write({'date_start': '2018-02-06 14:00:00',# Tuesday : allowed + 'date_stop': '2018-02-08 11:00:00'})# Thursday : allowed but not Wednesday + with self.assertRaises(ValidationError) as err: + reservation.state_confirm() + self.assertIn('pas disponible ce jour', err.exception.args[0]) + def test_confirmed_allowed_hours(self): """ Test allowed hours """ self.data['date_stop'] = '2018-02-05 14:00:00' # Out of range stop hour reservation = self.res_obj.create(self.data) with self.assertRaises(ValidationError) as err: reservation.state_confirm() - self.assertIn(u'merci de choisir d\'autres horaires', err.exception.args[0]) + self.assertIn(u'merci de choisir d\'autres horaires', err.exception.args[0]) reservation = self.res_obj.create({'resource_id': self.resource.id, 'date_start': '2018-02-05 05:00:00',# Out of range start hour 'date_stop': '2018-02-05 12:00:00', diff --git a/golem_resource/tests/test_golem_resource_timetable.py b/golem_resource/tests/test_golem_resource_timetable.py index 52d644b..c01ffaf 100644 --- a/golem_resource/tests/test_golem_resource_timetable.py +++ b/golem_resource/tests/test_golem_resource_timetable.py @@ -46,6 +46,7 @@ class TestGolemResourceTimetable(TransactionCase): self.assertEqual(timetable.resource_id, self.resource) self.assertEqual(timetable.time_start, 8.0) self.assertEqual(timetable.time_stop, 10.0) + self.assertFalse(timetable.availibility_24) self.assertEqual(timetable, self.resource.timetable_ids[0]) def test_timetable_times(self): diff --git a/golem_resource/views/golem_resource_timetable_views.xml b/golem_resource/views/golem_resource_timetable_views.xml index aedd45f..c954562 100644 --- a/golem_resource/views/golem_resource_timetable_views.xml +++ b/golem_resource/views/golem_resource_timetable_views.xml @@ -18,7 +18,6 @@ along with this program. If not, see . --> - GOLEM Resource Timetable Tree @@ -28,11 +27,12 @@ along with this program. If not, see . - - + + - From d5cc394967e7fc03ec19cd75abc9d59088da3f5e Mon Sep 17 00:00:00 2001 From: Fabien BOURGEOIS Date: Sat, 17 Mar 2018 07:58:04 +0100 Subject: [PATCH 08/22] [IMP]GOLEM Resource : computes day and hour start for better model sorting --- golem_resource/models/golem_resource_reservation.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/golem_resource/models/golem_resource_reservation.py b/golem_resource/models/golem_resource_reservation.py index 7ccd85a..da6d6c7 100644 --- a/golem_resource/models/golem_resource_reservation.py +++ b/golem_resource/models/golem_resource_reservation.py @@ -29,7 +29,7 @@ class GolemResourceReservation(models.Model): _name = 'golem.resource.reservation' _description = 'GOLEM Reservation Model' _inherit = 'mail.thread' - _order = 'date_start desc' + _order = 'day_start desc, hour_start asc' name = fields.Char(compute='_compute_name', store=True) # TODO: handle multiple days reservation @@ -39,6 +39,8 @@ class GolemResourceReservation(models.Model): date_stop = fields.Datetime('Stop date', required=True, index=True, readonly=True, states={'draft': [('readonly', False)]}) + day_start = fields.Date(compute='_compute_day_hour_start', store=True) + hour_start = fields.Float(compute='_compute_day_hour_start', store=True) resource_id = fields.Many2one('golem.resource', required=True, index=True, string='Resource', readonly=True, track_visibility='onchange', @@ -73,6 +75,15 @@ class GolemResourceReservation(models.Model): reservation.name = u'{}/{}'.format(reservation.resource_id.name, reservation.date_start) + @api.depends('date_start') + def _compute_day_hour_start(self): + """ Computes Day and Hour Start : for better sorting """ + for reservation in self: + if reservation.date_start: + date_start = fields.Datetime.from_string(reservation.date_start) + reservation.day_start = date_start.date().isoformat() + reservation.hour_start = date_start.hour + date_start.minute / 60.0 + @api.onchange('date_start') def onchange_date_start(self): """ Propose automatically stop hour after start hour had been filled """ From 398a3e7f63b2525c4b3cf0e027d5b03dcb7683a0 Mon Sep 17 00:00:00 2001 From: Fabien BOURGEOIS Date: Sat, 17 Mar 2018 08:39:43 +0100 Subject: [PATCH 09/22] [IMP]GOLEM Resource check : better performance with pre-calculation and restricted domain search for conflicts --- .../models/golem_resource_reservation.py | 42 +++++++++++-------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/golem_resource/models/golem_resource_reservation.py b/golem_resource/models/golem_resource_reservation.py index da6d6c7..8a4cd74 100644 --- a/golem_resource/models/golem_resource_reservation.py +++ b/golem_resource/models/golem_resource_reservation.py @@ -166,7 +166,7 @@ class GolemResourceReservation(models.Model): date_start = fields.Datetime.from_string(reservation.date_start) date_stop = fields.Datetime.from_string(reservation.date_stop) reservation_period = [date_start + timedelta(days=x) for x in range( - (date_stop - date_start).days +1)] + (date_stop - date_start).days + 1)] for reservation_day in reservation_period: is_day_allowed = False for timetable in reservation.resource_id.timetable_ids: @@ -175,23 +175,26 @@ class GolemResourceReservation(models.Model): if int(timetable.weekday) == reservation_day.weekday(): is_day_allowed = True #only check if the day hasn't a 24 availibility - if not timetable.availibility_24: - hour_start = 0.0 - hour_stop = 0.0 - if (reservation_day.date() == date_start.date() and - reservation_day.date() == date_stop.date()): - hour_start = date_start.hour + date_start.minute/60.0 - hour_stop = date_stop.hour + date_stop.minute/60.0 - elif reservation_day.date() == date_start.date(): - hour_start = date_start.hour + date_start.minute/60.0 - hour_stop = 23.98 - elif reservation_day.date() == date_stop.date(): + if not timetable.availibility_24: + reservation_day_date = reservation_day.date() + day_start = date_start.date() + day_stop = date_stop.date() + if reservation_day_date == day_start and \ + reservation_day_date == day_stop: + hour_start = date_start.hour + date_start.minute / 60.0 + hour_stop = date_stop.hour + date_stop.minute / 60.0 + elif reservation_day_date == day_start: + hour_start = date_start.hour + date_start.minute / 60.0 + hour_stop = 23.98 # Just before 23:59 + elif reservation_day_date == day_stop: hour_start = 0.0 - hour_stop = date_stop.hour + date_stop.minute/60.0 + hour_stop = date_stop.hour + date_stop.minute / 60.0 else: - #if the day is not a start nor stop it's not allowed unless - #availibility_24 is True - is_day_allowed = False + #if the day is not a start nor stop it + #should be covered on all day + #strange, as availibility_24 is not True + hour_start = 0.0 + hour_stop = 23.98 if is_day_allowed and (hour_start < timetable.time_start or \ hour_stop > timetable.time_stop): @@ -201,10 +204,15 @@ class GolemResourceReservation(models.Model): raise ValidationError(verr) if not is_day_allowed: verr = _('Not allowed, the resource is not available ' - 'this day. Please choose another date.') + 'this day : {}. Please choose another ' + 'date.'.format(reservation_day.strftime('%A'))) raise ValidationError(verr) # Check if the resource is already taken during this period + # PERF : check for res that can be in conflict, + # do not iterate over all reservations domain = [('resource_id', '=', reservation.resource_id.id), + ('date_start', '<=', reservation.date_stop), + ('date_stop', '>=', reservation.date_start), ('state', 'in', ('confirmed', 'validated')), ('id', '!=', reservation.id)] reservations = self.env['golem.resource.reservation'].search(domain) From da00acea299ac77513f66a10f114085ceed9fc90 Mon Sep 17 00:00:00 2001 From: Fabien BOURGEOIS Date: Sat, 17 Mar 2018 08:40:14 +0100 Subject: [PATCH 10/22] [IMP]GOLEM Resource Timetable : usage of default values for time_start/stop on contraint + requirement only on client side --- .../models/golem_resource_timetable.py | 24 +++++++++---------- .../views/golem_resource_timetable_views.xml | 4 ++-- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/golem_resource/models/golem_resource_timetable.py b/golem_resource/models/golem_resource_timetable.py index b09b7bf..4b6acf4 100644 --- a/golem_resource/models/golem_resource_timetable.py +++ b/golem_resource/models/golem_resource_timetable.py @@ -40,22 +40,13 @@ class GolemTimetable(models.Model): time_start = fields.Float(string='Start') time_stop = fields.Float(string='Stop') availibility_24 = fields.Boolean(string="All day") - + @api.onchange('availibility_24') def onchange_availibility_24(self): """ fill time_start et time_stop if availibility_24 is True """ for line in self: if line.availibility_24: - line.time_start = 0.0 - line.time_stop = 23.98 - @api.constrains('availibility_24') - @api.multi - def check_time_filling(self): - """ Check start and stop time filling out""" - for line in self: - if not line.availibility_24 and (not line.time_start or not line.time_stop): - raise ValidationError(_('Start and stop time should be filled out ' - 'if the 24 availibility is not checked.')) + line.update({'time_start': 0.0, 'time_stop': 23.98}) @api.onchange('time_start') def onchange_time_start(self): @@ -64,11 +55,18 @@ class GolemTimetable(models.Model): if line.time_start and not line.time_stop: line.time_stop = line.time_start + 1 + @api.constrains('availibility_24') + def check_avaibility24(self): + """ Checks hour consistency against avaibility 24 """ + for line in self: + if line.availibility_24: + line.write({'time_start': 0.0, 'time_stop': 23.98}) + @api.constrains('time_start', 'time_stop') def _check_time_consistency(self): """ Checks time consistency """ - for timetable in self: - if timetable.time_stop <= timetable.time_start: + for line in self: + if line.time_stop <= line.time_start: raise ValidationError(_('End time should be after than start time')) @api.constrains('time_start', 'time_stop') diff --git a/golem_resource/views/golem_resource_timetable_views.xml b/golem_resource/views/golem_resource_timetable_views.xml index c954562..fa4da10 100644 --- a/golem_resource/views/golem_resource_timetable_views.xml +++ b/golem_resource/views/golem_resource_timetable_views.xml @@ -28,9 +28,9 @@ along with this program. If not, see . + required="1" /> + required="1" /> From a3807d03546ed2c0975d732b9d38fca5a5888566 Mon Sep 17 00:00:00 2001 From: Fabien BOURGEOIS Date: Sat, 17 Mar 2018 09:36:22 +0100 Subject: [PATCH 11/22] [i18n]GOLEM Resource updated translation --- golem_resource/i18n/fr.po | 73 +++++++++++++++----------- golem_resource/i18n/golem_resource.pot | 71 +++++++++++++++---------- 2 files changed, 85 insertions(+), 59 deletions(-) diff --git a/golem_resource/i18n/fr.po b/golem_resource/i18n/fr.po index 3ea2bc0..12d1750 100644 --- a/golem_resource/i18n/fr.po +++ b/golem_resource/i18n/fr.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-10 07:13+0000\n" -"PO-Revision-Date: 2018-03-10 07:13+0000\n" +"POT-Creation-Date: 2018-03-17 08:07+0000\n" +"PO-Revision-Date: 2018-03-17 08:07+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -31,6 +31,11 @@ msgstr "Un article générique peut être lié, dans l'objectif de monétiser de msgid "Active" msgstr "Actif" +#. module: golem_resource +#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_timetable_availibility_24 +msgid "All day" +msgstr "Toute la journée" + #. module: golem_resource #: model:ir.ui.view,arch_db:golem_resource.golem_resource_view_search msgid "Archived" @@ -108,26 +113,16 @@ msgstr "Créé par" msgid "Created on" msgstr "Créé le" -#. module: golem_resource -#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_date -msgid "Date" -msgstr "Date" - -#. module: golem_resource -#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_date_start -msgid "Date start" -msgstr "Date de début" - -#. module: golem_resource -#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_date_stop -msgid "Date stop" -msgstr "Date de fin" - #. module: golem_resource #: model:ir.ui.view,arch_db:golem_resource.golem_resource_reservation_view_search msgid "Day" msgstr "Jour" +#. module: golem_resource +#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_day_start +msgid "Day start" +msgstr "Jour de début" + #. module: golem_resource #: model:ir.model.fields,field_description:golem_resource.field_golem_reservation_rejection_wizard_display_name #: model:ir.model.fields,field_description:golem_resource.field_golem_resource_display_name @@ -149,8 +144,7 @@ msgid "End availibility should be after than start availibility" msgstr "La fin de disponibilité ne peut pas être après le début" #. module: golem_resource -#: code:addons/golem_resource/models/golem_resource_reservation.py:110 -#: code:addons/golem_resource/models/golem_resource_timetable.py:55 +#: code:addons/golem_resource/models/golem_resource_timetable.py:70 #, python-format msgid "End time should be after than start time" msgstr "L'heure de fin ne peut pas être après l'heure de début" @@ -182,6 +176,11 @@ msgstr "GOLEM Resource Type" msgid "Golem Timetable" msgstr "Golem Timetable" +#. module: golem_resource +#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_hour_start +msgid "Hour start" +msgstr "Heure de début" + #. module: golem_resource #: model:ir.model.fields,field_description:golem_resource.field_golem_reservation_rejection_wizard_id #: model:ir.model.fields,field_description:golem_resource.field_golem_resource_id @@ -253,28 +252,28 @@ msgid "Name" msgstr "Nom" #. module: golem_resource -#: code:addons/golem_resource/models/golem_resource_reservation.py:200 +#: code:addons/golem_resource/models/golem_resource_reservation.py:222 #, python-format msgid "Not allowed, the resource is already taken during this period : from {} to {} this day, please choose another périod before confirming." msgstr "Interdit : la ressource est déjà réservée durant cette période : de {} à {} ce jour, merci de choisir une autre période avant de confirmer." #. module: golem_resource -#: code:addons/golem_resource/models/golem_resource_reservation.py:182 +#: code:addons/golem_resource/models/golem_resource_reservation.py:201 #, python-format msgid "Not allowed, the resource is not available during this period, please choose another time before confirming." msgstr "Interdit : la ressource n'est pas disponible durant cette période, merci de choisir d'autres horaires avant de confirmer à nouveau." #. module: golem_resource -#: code:addons/golem_resource/models/golem_resource_reservation.py:167 +#: code:addons/golem_resource/models/golem_resource_reservation.py:159 #, python-format msgid "Not allowed, the resource is not available in this period, please choose another périod before confirming" msgstr "Interdit : la ressource n'est pas disponible durant cette période, merci de choisir d'autres dates avant de confirmer à nouveau." #. module: golem_resource -#: code:addons/golem_resource/models/golem_resource_reservation.py:187 +#: code:addons/golem_resource/models/golem_resource_reservation.py:208 #, python-format -msgid "Not allowed, the resource is not available this day. Please choose another date." -msgstr "Interdit : la ressource n'est pas disponible ce jour de la semaine. Merci de choisir un autre jour." +msgid "Not allowed, the resource is not available this day : {}. Please choose another date." +msgstr "Interdit : la ressource n'est pas disponible ce jour : {}. Merci de choisir un autre jour." #. module: golem_resource #: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_note @@ -298,7 +297,7 @@ msgid "Partner" msgstr "Partenaire" #. module: golem_resource -#: code:addons/golem_resource/models/golem_resource_reservation.py:142 +#: code:addons/golem_resource/models/golem_resource_reservation.py:134 #, python-format msgid "Please enter the rejection reason" msgstr "Merci de saisir le motif du refus" @@ -378,7 +377,7 @@ msgid "Resource Reservation list" msgstr "Liste des réservations" #. module: golem_resource -#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_type_id_4023 +#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_type_id_4449 #: model:ir.model.fields,field_description:golem_resource.field_golem_resource_type_name msgid "Resource Type" msgstr "Type de ressource" @@ -419,7 +418,11 @@ msgid "Start" msgstr "Début" #. module: golem_resource -#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_hour_start +#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_date_start +msgid "Start date" +msgstr "Date de début" + +#. module: golem_resource #: model:ir.ui.view,arch_db:golem_resource.golem_resource_timetable_view_tree msgid "Start hour" msgstr "Heure de début" @@ -436,7 +439,17 @@ msgid "Stop" msgstr "Fin" #. module: golem_resource -#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_hour_stop +#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_date_stop +msgid "Stop date" +msgstr "Jour de fin" + +#. module: golem_resource +#: code:addons/golem_resource/models/golem_resource_reservation.py:102 +#, python-format +msgid "Stop date should be after start date" +msgstr "Stop date should be after start date" + +#. module: golem_resource #: model:ir.ui.view,arch_db:golem_resource.golem_resource_timetable_view_tree msgid "Stop hour" msgstr "Heure de fin" @@ -517,7 +530,7 @@ msgid "Without validation" msgstr "Sans validation" #. module: golem_resource -#: code:addons/golem_resource/models/golem_resource_reservation.py:156 +#: code:addons/golem_resource/models/golem_resource_reservation.py:148 #, python-format msgid "You do not have permissions to validate or reject a reservation." msgstr "Vous n'avez pas les autorisations nécessaires pour valider ou rejeter une réservation." diff --git a/golem_resource/i18n/golem_resource.pot b/golem_resource/i18n/golem_resource.pot index 3427a16..1ed1a5f 100644 --- a/golem_resource/i18n/golem_resource.pot +++ b/golem_resource/i18n/golem_resource.pot @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-10 07:12+0000\n" -"PO-Revision-Date: 2018-03-10 07:12+0000\n" +"POT-Creation-Date: 2018-03-17 08:07+0000\n" +"PO-Revision-Date: 2018-03-17 08:07+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -31,6 +31,11 @@ msgstr "" msgid "Active" msgstr "" +#. module: golem_resource +#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_timetable_availibility_24 +msgid "All day" +msgstr "" + #. module: golem_resource #: model:ir.ui.view,arch_db:golem_resource.golem_resource_view_search msgid "Archived" @@ -108,26 +113,16 @@ msgstr "" msgid "Created on" msgstr "" -#. module: golem_resource -#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_date -msgid "Date" -msgstr "" - -#. module: golem_resource -#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_date_start -msgid "Date start" -msgstr "" - -#. module: golem_resource -#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_date_stop -msgid "Date stop" -msgstr "" - #. module: golem_resource #: model:ir.ui.view,arch_db:golem_resource.golem_resource_reservation_view_search msgid "Day" msgstr "" +#. module: golem_resource +#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_day_start +msgid "Day start" +msgstr "" + #. module: golem_resource #: model:ir.model.fields,field_description:golem_resource.field_golem_reservation_rejection_wizard_display_name #: model:ir.model.fields,field_description:golem_resource.field_golem_resource_display_name @@ -149,8 +144,7 @@ msgid "End availibility should be after than start availibility" msgstr "" #. module: golem_resource -#: code:addons/golem_resource/models/golem_resource_reservation.py:110 -#: code:addons/golem_resource/models/golem_resource_timetable.py:55 +#: code:addons/golem_resource/models/golem_resource_timetable.py:70 #, python-format msgid "End time should be after than start time" msgstr "" @@ -182,6 +176,11 @@ msgstr "" msgid "Golem Timetable" msgstr "" +#. module: golem_resource +#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_hour_start +msgid "Hour start" +msgstr "" + #. module: golem_resource #: model:ir.model.fields,field_description:golem_resource.field_golem_reservation_rejection_wizard_id #: model:ir.model.fields,field_description:golem_resource.field_golem_resource_id @@ -253,27 +252,27 @@ msgid "Name" msgstr "" #. module: golem_resource -#: code:addons/golem_resource/models/golem_resource_reservation.py:200 +#: code:addons/golem_resource/models/golem_resource_reservation.py:222 #, python-format msgid "Not allowed, the resource is already taken during this period : from {} to {} this day, please choose another périod before confirming." msgstr "" #. module: golem_resource -#: code:addons/golem_resource/models/golem_resource_reservation.py:182 +#: code:addons/golem_resource/models/golem_resource_reservation.py:201 #, python-format msgid "Not allowed, the resource is not available during this period, please choose another time before confirming." msgstr "" #. module: golem_resource -#: code:addons/golem_resource/models/golem_resource_reservation.py:167 +#: code:addons/golem_resource/models/golem_resource_reservation.py:159 #, python-format msgid "Not allowed, the resource is not available in this period, please choose another périod before confirming" msgstr "" #. module: golem_resource -#: code:addons/golem_resource/models/golem_resource_reservation.py:187 +#: code:addons/golem_resource/models/golem_resource_reservation.py:208 #, python-format -msgid "Not allowed, the resource is not available this day. Please choose another date." +msgid "Not allowed, the resource is not available this day : {}. Please choose another date." msgstr "" #. module: golem_resource @@ -298,7 +297,7 @@ msgid "Partner" msgstr "" #. module: golem_resource -#: code:addons/golem_resource/models/golem_resource_reservation.py:142 +#: code:addons/golem_resource/models/golem_resource_reservation.py:134 #, python-format msgid "Please enter the rejection reason" msgstr "" @@ -378,7 +377,7 @@ msgid "Resource Reservation list" msgstr "" #. module: golem_resource -#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_type_id_4023 +#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_type_id_4449 #: model:ir.model.fields,field_description:golem_resource.field_golem_resource_type_name msgid "Resource Type" msgstr "" @@ -419,7 +418,11 @@ msgid "Start" msgstr "" #. module: golem_resource -#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_hour_start +#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_date_start +msgid "Start date" +msgstr "" + +#. module: golem_resource #: model:ir.ui.view,arch_db:golem_resource.golem_resource_timetable_view_tree msgid "Start hour" msgstr "" @@ -436,7 +439,17 @@ msgid "Stop" msgstr "" #. module: golem_resource -#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_hour_stop +#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_date_stop +msgid "Stop date" +msgstr "" + +#. module: golem_resource +#: code:addons/golem_resource/models/golem_resource_reservation.py:102 +#, python-format +msgid "Stop date should be after start date" +msgstr "" + +#. module: golem_resource #: model:ir.ui.view,arch_db:golem_resource.golem_resource_timetable_view_tree msgid "Stop hour" msgstr "" @@ -517,7 +530,7 @@ msgid "Without validation" msgstr "" #. module: golem_resource -#: code:addons/golem_resource/models/golem_resource_reservation.py:156 +#: code:addons/golem_resource/models/golem_resource_reservation.py:148 #, python-format msgid "You do not have permissions to validate or reject a reservation." msgstr "" From bdbc7177e896af7538987229178afdec0160140d Mon Sep 17 00:00:00 2001 From: Fabien BOURGEOIS Date: Sat, 17 Mar 2018 09:36:45 +0100 Subject: [PATCH 12/22] [IMP]GOLEM Resource tests : now in english per default --- .../tests/test_golem_resource_reservation.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/golem_resource/tests/test_golem_resource_reservation.py b/golem_resource/tests/test_golem_resource_reservation.py index ae2a9d6..fa34c0f 100644 --- a/golem_resource/tests/test_golem_resource_reservation.py +++ b/golem_resource/tests/test_golem_resource_reservation.py @@ -151,7 +151,7 @@ class TestGolemResourceReservation(TransactionCase): self.env.user.groups_id = [(2, group_manager.id, False)] with self.assertRaises(ValidationError) as err: reservation.state_validated() - self.assertIn(u'autorisations nécessaires pour valider', err.exception.args[0]) + self.assertIn(u'do not have permissions to validate', err.exception.args[0]) def test_confirmed_period(self): """ Test allowed period """ @@ -167,7 +167,7 @@ class TestGolemResourceReservation(TransactionCase): reservation = self.res_obj.create(self.data) with self.assertRaises(ValidationError) as err: reservation.state_confirm() - self.assertIn('pas disponible ce jour', err.exception.args[0]) + self.assertIn('not available this day', err.exception.args[0]) def test_multidays_reservation(self): """ Test multidays reservation """ @@ -179,11 +179,11 @@ class TestGolemResourceReservation(TransactionCase): self.assertEqual(reservation.state, 'validated') reservation.state_draft() #Two days allowed but one not allowed in the middle - reservation.write({'date_start': '2018-02-06 14:00:00',# Tuesday : allowed - 'date_stop': '2018-02-08 11:00:00'})# Thursday : allowed but not Wednesday + reservation.write({'date_start': '2018-02-06 14:00:00', + 'date_stop': '2018-02-08 11:00:00'}) with self.assertRaises(ValidationError) as err: reservation.state_confirm() - self.assertIn('pas disponible ce jour', err.exception.args[0]) + self.assertIn('not available during this period', err.exception.args[0]) def test_confirmed_allowed_hours(self): """ Test allowed hours """ @@ -192,13 +192,14 @@ class TestGolemResourceReservation(TransactionCase): with self.assertRaises(ValidationError) as err: reservation.state_confirm() self.assertIn(u'merci de choisir d\'autres horaires', err.exception.args[0]) + # Out of range start hour reservation = self.res_obj.create({'resource_id': self.resource.id, - 'date_start': '2018-02-05 05:00:00',# Out of range start hour + 'date_start': '2018-02-05 05:00:00', 'date_stop': '2018-02-05 12:00:00', 'partner_id': self.partner.id}) with self.assertRaises(ValidationError) as err: reservation.state_confirm() - self.assertIn(u'merci de choisir d\'autres horaires', err.exception.args[0]) + self.assertIn(u'the resource is not available during this period', err.exception.args[0]) def test_confirmed_other_res(self): """ Test if there are other reservations in conflict """ @@ -219,4 +220,4 @@ class TestGolemResourceReservation(TransactionCase): }) with self.assertRaises(ValidationError) as err: reservation3.state_confirm() - self.assertIn(u'déjà réservée durant cette période', err.exception.args[0]) + self.assertIn(u'the resource is already taken', err.exception.args[0]) From df6f3c60e8761877202b881c2f0b656a1bd7da4a Mon Sep 17 00:00:00 2001 From: Fabien BOURGEOIS Date: Sat, 17 Mar 2018 09:37:09 +0100 Subject: [PATCH 13/22] [IMP]GOLEM Resource : bump version and updated dependency (golem_base is needed, for security) --- golem_resource/__manifest__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/golem_resource/__manifest__.py b/golem_resource/__manifest__.py index 183b0a9..7fec3ab 100644 --- a/golem_resource/__manifest__.py +++ b/golem_resource/__manifest__.py @@ -20,13 +20,13 @@ 'name': 'GOLEM non-profit resources', 'summary': 'GOLEM resources management', 'description': ''' GOLEM resources management ''', - 'version': '10.0.1.9.1', + 'version': '10.0.1.10.0', 'category': 'GOLEM', 'author': 'Youssef El Ouahby, Fabien Bourgeois', 'license': 'AGPL-3', 'application': True, 'installable': True, - 'depends': ['product'], + 'depends': ['golem_base', 'product'], 'data': ['views/golem_resource_views.xml', 'views/golem_resource_type_views.xml', 'views/golem_resource_reservation_views.xml', From 8d80c1d5b3bde75647fbe97220515b1182850e0d Mon Sep 17 00:00:00 2001 From: Fabien BOURGEOIS Date: Sat, 17 Mar 2018 14:22:22 +0100 Subject: [PATCH 14/22] [TYPO]Copyright notices on report family --- golem_family/__manifest__.py | 2 +- golem_family/report/__init__.py | 2 +- golem_family/report/golem_family_report.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/golem_family/__manifest__.py b/golem_family/__manifest__.py index a21fbb6..30bdd25 100644 --- a/golem_family/__manifest__.py +++ b/golem_family/__manifest__.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright 2016 Fabien Bourgeois +# Copyright 2016-2018 Fabien Bourgeois # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/golem_family/report/__init__.py b/golem_family/report/__init__.py index be7ae43..44a573e 100644 --- a/golem_family/report/__init__.py +++ b/golem_family/report/__init__.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright 2016 Fabien Bourgeois +# Copyright 2018 Fabien Bourgeois # Copyright 2018 Michel Dessenne # This program is free software: you can redistribute it and/or modify diff --git a/golem_family/report/golem_family_report.xml b/golem_family/report/golem_family_report.xml index 63f62fd..d603583 100644 --- a/golem_family/report/golem_family_report.xml +++ b/golem_family/report/golem_family_report.xml @@ -1,7 +1,7 @@ + + + + + + diff --git a/golem_member/__manifest__.py b/golem_member/__manifest__.py index a43e01d..1c18d2d 100644 --- a/golem_member/__manifest__.py +++ b/golem_member/__manifest__.py @@ -19,7 +19,7 @@ { 'name': 'GOLEM non-profit members', 'summary': 'Extends Odoo contacts for MJC', - 'version': '10.0.1.1.2', + 'version': '10.0.1.1.3', 'category': 'GOLEM', 'author': 'Fabien Bourgeois, Michel Dessenne', 'license': 'AGPL-3', @@ -30,7 +30,7 @@ 'data': ['views/golem_member_views.xml', 'views/res_partner_views.xml', 'views/golem_member_numberconfig_views.xml', - 'views/report_golem_member.xml', + 'report/golem_member_card_templates.xml', 'data/golem_member_numberconfig_data.xml', 'security/ir.model.access.csv'] } diff --git a/golem_member/views/report_golem_member.xml b/golem_member/report/golem_member_card_templates.xml similarity index 52% rename from golem_member/views/report_golem_member.xml rename to golem_member/report/golem_member_card_templates.xml index 367bd52..572175d 100644 --- a/golem_member/views/report_golem_member.xml +++ b/golem_member/report/golem_member_card_templates.xml @@ -30,7 +30,7 @@ along with this program. If not, see . name="golem_member.golem_member_card_template" file="golem_member.golem_member_card_template" attachment="(object.name + '.html')" /> - + - + diff --git a/golem_member/__manifest__.py b/golem_member/__manifest__.py index 1c18d2d..5aaa783 100644 --- a/golem_member/__manifest__.py +++ b/golem_member/__manifest__.py @@ -19,7 +19,7 @@ { 'name': 'GOLEM non-profit members', 'summary': 'Extends Odoo contacts for MJC', - 'version': '10.0.1.1.3', + 'version': '10.0.1.1.4', 'category': 'GOLEM', 'author': 'Fabien Bourgeois, Michel Dessenne', 'license': 'AGPL-3', diff --git a/golem_member/report/golem_member_card_templates.xml b/golem_member/report/golem_member_card_templates.xml index 572175d..2d353d9 100644 --- a/golem_member/report/golem_member_card_templates.xml +++ b/golem_member/report/golem_member_card_templates.xml @@ -38,18 +38,17 @@ along with this program. If not, see .
-
-

+
+

(num. )

-
-

+
+

Season : -
Period : - From 1886ab98284b0efbd792da52b90c44c23123dee1 Mon Sep 17 00:00:00 2001 From: Fabien BOURGEOIS Date: Sun, 18 Mar 2018 10:26:42 +0100 Subject: [PATCH 22/22] [i18n]GOLEM Updated translations --- golem_family/i18n/fr.po | 39 ++++++++++++++++++--------- golem_family/i18n/golem_family.pot | 42 ++++++++++++++++++------------ 2 files changed, 53 insertions(+), 28 deletions(-) diff --git a/golem_family/i18n/fr.po b/golem_family/i18n/fr.po index d945f4f..a80e517 100644 --- a/golem_family/i18n/fr.po +++ b/golem_family/i18n/fr.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-17 14:14+0000\n" -"PO-Revision-Date: 2018-03-17 14:14+0000\n" +"POT-Creation-Date: 2018-03-18 09:24+0000\n" +"PO-Revision-Date: 2018-03-18 09:24+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -26,17 +26,37 @@ msgstr "# de membres" msgid "0000000000" msgstr "0000000000" +#. module: golem_family +#: model:ir.ui.view,arch_db:golem_family.golem_family_card_template +msgid "Address :" +msgstr "Adresse :" + +#. module: golem_family +#: model:ir.ui.view,arch_db:golem_family.golem_family_card_template +msgid "Country :" +msgstr "Pays :" + +#. module: golem_family +#: model:ir.ui.view,arch_db:golem_family.golem_member_card_template_inherit_golem_family +msgid "Family :" +msgstr "Famille :" + +#. module: golem_family +#: model:ir.ui.view,arch_db:golem_family.golem_member_card_template_inherit_golem_family +msgid "Role :" +msgstr "Role :" + +#. module: golem_family +#: model:ir.ui.view,arch_db:golem_family.golem_family_card_template +msgid "State :" +msgstr "Région :" + #. module: golem_family #: model:ir.ui.view,arch_db:golem_family.golem_family_form #: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family msgid "Address" msgstr "Adresse" -#. module: golem_family -#: model:ir.ui.view,arch_db:golem_family.golem_family_card_template -msgid "Address :" -msgstr "Adresse :" - #. module: golem_family #: model:ir.ui.view,arch_db:golem_family.golem_family_search msgid "By city" @@ -308,11 +328,6 @@ msgstr "Roles" msgid "State" msgstr "Région" -#. module: golem_family -#: model:ir.ui.view,arch_db:golem_family.golem_family_card_template -msgid "State :" -msgstr "Région :" - #. module: golem_family #: model:ir.model.fields,field_description:golem_family.field_golem_family_street #: model:ir.model.fields,field_description:golem_family.field_golem_member_family_street diff --git a/golem_family/i18n/golem_family.pot b/golem_family/i18n/golem_family.pot index 958adaa..8b9174a 100644 --- a/golem_family/i18n/golem_family.pot +++ b/golem_family/i18n/golem_family.pot @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-17 14:12+0000\n" -"PO-Revision-Date: 2018-03-17 14:12+0000\n" +"POT-Creation-Date: 2018-03-18 09:23+0000\n" +"PO-Revision-Date: 2018-03-18 09:23+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -27,14 +27,34 @@ msgid "0000000000" msgstr "" #. module: golem_family -#: model:ir.ui.view,arch_db:golem_family.golem_family_form -#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family -msgid "Address" +#: model:ir.ui.view,arch_db:golem_family.golem_family_card_template +msgid "Address :" msgstr "" #. module: golem_family #: model:ir.ui.view,arch_db:golem_family.golem_family_card_template -msgid "Adress :" +msgid "Country :" +msgstr "" + +#. module: golem_family +#: model:ir.ui.view,arch_db:golem_family.golem_member_card_template_inherit_golem_family +msgid "Family :" +msgstr "" + +#. module: golem_family +#: model:ir.ui.view,arch_db:golem_family.golem_member_card_template_inherit_golem_family +msgid "Role :" +msgstr "" + +#. module: golem_family +#: model:ir.ui.view,arch_db:golem_family.golem_family_card_template +msgid "State :" +msgstr "" + +#. module: golem_family +#: model:ir.ui.view,arch_db:golem_family.golem_family_form +#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family +msgid "Address" msgstr "" #. module: golem_family @@ -77,11 +97,6 @@ msgstr "" msgid "Country" msgstr "" -#. module: golem_family -#: model:ir.ui.view,arch_db:golem_family.golem_family_card_template -msgid "Country :" -msgstr "" - #. module: golem_family #: model:ir.model.fields,field_description:golem_family.field_golem_family_create_uid #: model:ir.model.fields,field_description:golem_family.field_golem_family_role_create_uid @@ -308,11 +323,6 @@ msgstr "" msgid "State" msgstr "" -#. module: golem_family -#: model:ir.ui.view,arch_db:golem_family.golem_family_card_template -msgid "State :" -msgstr "" - #. module: golem_family #: model:ir.model.fields,field_description:golem_family.field_golem_family_street #: model:ir.model.fields,field_description:golem_family.field_golem_member_family_street