From a67459018cbac767d70ba7ce8d786193b5509617 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 21 Aug 2013 12:51:09 +0200 Subject: [PATCH 01/20] [IMP] resource: first refactoring of various methods to calculate timed intervals based on resource.calendar. Added tests. bzr revid: tde@openerp.com-20130821105109-1rtynzx69hmslxey --- addons/resource/resource.py | 343 +++++++++++++++++++++++-- addons/resource/resource_view.xml | 1 + addons/resource/tests/__init__.py | 28 ++ addons/resource/tests/common.py | 123 +++++++++ addons/resource/tests/test_resource.py | 189 ++++++++++++++ 5 files changed, 668 insertions(+), 16 deletions(-) create mode 100644 addons/resource/tests/__init__.py create mode 100644 addons/resource/tests/common.py create mode 100644 addons/resource/tests/test_resource.py diff --git a/addons/resource/resource.py b/addons/resource/resource.py index 449fa422ab4..dd87157aeb0 100644 --- a/addons/resource/resource.py +++ b/addons/resource/resource.py @@ -20,17 +20,19 @@ ############################################################################## import pytz -from datetime import datetime, timedelta +from datetime import date, datetime, timedelta from dateutil import rrule +from dateutil.relativedelta import relativedelta +import itertools import math +from operator import itemgetter + from faces import * +from openerp import tools from openerp.osv import fields, osv from openerp.tools.float_utils import float_compare from openerp.tools.translate import _ -from itertools import groupby -from operator import itemgetter - class resource_calendar(osv.osv): _name = "resource.calendar" @@ -40,25 +42,321 @@ class resource_calendar(osv.osv): 'company_id' : fields.many2one('res.company', 'Company', required=False), 'attendance_ids' : fields.one2many('resource.calendar.attendance', 'calendar_id', 'Working Time'), 'manager' : fields.many2one('res.users', 'Workgroup Manager'), + 'leave_ids': fields.one2many( + 'resource.calendar.leaves', 'calendar_id', 'Leaves', + help='' + ), } _defaults = { 'company_id': lambda self, cr, uid, context: self.pool.get('res.company')._company_default_get(cr, uid, 'resource.calendar', context=context) } - def working_hours_on_day(self, cr, uid, resource_calendar_id, day, context=None): - """Calculates the Working Total Hours based on Resource Calendar and - given working day (datetime object). + # -------------------------------------------------- + # Utility methods + # -------------------------------------------------- - @param resource_calendar_id: resource.calendar browse record - @param day: datetime object + def interval_clean(self, intervals): + """ Utility method that removes overlapping inside datetime intervals. - @return: returns the working hours (as float) men should work on the given day if is in the attendance_ids of the resource_calendar_id (i.e if that day is a working day), returns 0.0 otherwise + :param list intervals: list of datetime intervals. Each interval is a + tuple(datetime_from, datetime_to) + :return list final_list: list of intervals without overlap """ - res = 0.0 - for working_day in resource_calendar_id.attendance_ids: - if (int(working_day.dayofweek) + 1) == day.isoweekday(): - res += working_day.hour_to - working_day.hour_from - return res + intervals = sorted(intervals) # TODO: check sorted method + final_list = [] + working_interval = None + while intervals: + current_interval = intervals.pop(0) + if not working_interval: # init + working_interval = [current_interval[0], current_interval[1]] + elif working_interval[1] < current_interval[0]: # interval is disjoint + final_list.append(tuple(working_interval)) + working_interval = [current_interval[0], current_interval[1]] + elif working_interval[1] < current_interval[1]: # union of greater intervals + working_interval[1] = current_interval[1] + if working_interval: # handle void lists + final_list.append(tuple(working_interval)) + return final_list + + def interval_remove_leaves(self, interval, leave_intervals): + """ Utility method that remove leave intervals from a base interval: + + - clean the leave intrevals, to have an ordered list of not-overlapping + intervals + - initiate the current interval to be the base interval + - for each leave interval: + + - finishing before the current interval: skip, go to next + - beginning after the current interval: skip and get out of the loop + because we are outside range (leaves are ordered) + - beginning within the current interval: close the current interval + and begin a new current interval that begins at the end of the leave + interval + - ending within the current interval: update the current interval begin + to match the leave interval ending + + :param tuple interval: a tuple (beginning datetime, ending datetime) that + is the base interval from which the leave intervals + will be removed + :param list interval: a list of tuples (beginning datetime, ending datetime) + that are intervals to remove from the base interval + :return list final_list: a list of tuples (begin datetime, end datetime) + that are the remaining valid intervals + """ + if not interval: + return interval + if leave_intervals is None: + leave_intervals = [] + final_list = [] + leave_intervals = self.interval_clean(leave_intervals) + current_interval = [interval[0], interval[1]] + # print '\tcurrent_intreval', current_interval + for leave in leave_intervals: + # print '\thandling leave', leave + if leave[1] <= current_interval[0]: + # print '\t\tbefore, skipping' + continue + if leave[0] >= current_interval[1]: + # print '\t\tafter, abort' + break + if current_interval[0] < leave[0] < current_interval[1]: + # print '\t\tbeginning inside' + current_interval[1] = leave[0] + final_list.append((current_interval[0], current_interval[1])) + current_interval = [leave[1], interval[1]] + if current_interval[0] <= leave[1] <= current_interval[1]: + # print '\t\tending inside' + current_interval[0] = leave[1] + if current_interval and current_interval[0] < interval[1]: # remove intervals moved outside base interval due to leaves + final_list.append((current_interval[0], current_interval[1])) + return final_list + + # -------------------------------------------------- + # Date and hours computation + # -------------------------------------------------- + + def get_next_day(self, cr, uid, id, day_date, context=None): + if id is None: + return day_date + relativedelta(days=1) + calendar = self.browse(cr, uid, id, context=None) + weekdays = set() + for attendance in calendar.attendance_ids: + weekdays.add(int(attendance.dayofweek)) + weekdays = list(weekdays) + + if day_date.weekday() in weekdays: + base_index = weekdays.index(day_date.weekday()) + else: + base_index = -1 + for weekday in weekdays: + if weekday > day_date.weekday(): + break + base_index += 1 + + new_index = (base_index + 1) % len(weekdays) + days = (weekdays[new_index] - day_date.weekday()) + + if days < 0: + days = 7 + days + + return day_date + relativedelta(days=days) + + def get_previous_day(self, cr, uid, id, day_date, context=None): + if id is None: + return day_date + relativedelta(days=-1) + calendar = self.browse(cr, uid, id, context=None) + weekdays = set() + for attendance in calendar.attendance_ids: + weekdays.add(int(attendance.dayofweek)) + weekdays = list(weekdays) + weekdays.reverse() + + if day_date.weekday() in weekdays: + base_index = weekdays.index(day_date.weekday()) + else: + base_index = -1 + for weekday in weekdays: + if weekday < day_date.weekday(): + break + base_index += 1 + + new_index = (base_index + 1) % len(weekdays) + days = (weekdays[new_index] - day_date.weekday()) + if days > 0: + days = days - 7 + + return day_date + relativedelta(days=days) + + def _get_leave_intervals(self, cr, uid, id, resource_id=None, start_datetime=None, end_datetime=None, context=None): + """Get the leaves of the calendar. Leaves can be filtered on the resource, + the start datetime or the end datetime. + + :param int resource_id: if set, global + specific leaves will be taken + into account + TODO: COMPLETE ME + """ + resource_calendar = self.browse(cr, uid, id, context=context) + leaves = [] + for leave in resource_calendar.leave_ids: + if resource_id and leave.resource_id and not resource_id == leave.resource_id.id: + continue + date_from = datetime.strptime(leave.date_from, tools.DEFAULT_SERVER_DATETIME_FORMAT) + if start_datetime and date_from < start_datetime: + continue + if end_datetime and date_end > end_datetime: + continue + date_to = datetime.strptime(leave.date_to, tools.DEFAULT_SERVER_DATETIME_FORMAT) + leaves.append((date_from, date_to)) + return leaves + + def get_working_intervals_of_day(self, cr, uid, id, day_date=None, leaves=None, compute_leaves=False, resource_id=None, context=None): + """Get the working intervals of the day based on calendar. This method + handle leaves that come directly from the leaves parameter or can be computed. + + :param int id: resource.calendar id; take the first one if is a list + :param date day_date: date object that is the day for which this method + computes the working intervals; is None, set to today + :param list leaves: a list of tuples(start_datetime, end_datetime) that + represent leaves. + :param boolean compute_leaves: if set and if leaves is None, compute the + leaves based on calendar and resource. + If leaves is None and compute_leaves false + no leaves are taken into account. + :param int resource_id: the id of the resource to take into account when + computing the leaves. If not set, only general + leaves will be computed. + + :returns list intervals: a list of tuples (start_datetime, end_datetime) + that are intervals of work + """ + if id is None: + return [] + if isinstance(id, (list, tuple)): + id = id[0] + if day_date is None: + day_date = date.today() + resource_calendar = self.browse(cr, uid, id, context=context) + intervals = [] + + # find working intervals + date_dict = { + 'Y': day_date.year, + 'm': day_date.month, + 'd': day_date.day, + } + working_intervals = [] + for calendar_working_day in resource_calendar.attendance_ids: + if int(calendar_working_day.dayofweek) == day_date.weekday(): + date_dict.update({ + 'HF': calendar_working_day.hour_from, + 'HT': calendar_working_day.hour_to, + }) + date_from = datetime.strptime('%(Y)04d-%(m)02d-%(d)02d %(HF)02d:00:00' % date_dict, '%Y-%m-%d %H:%M:%S') + date_to = datetime.strptime('%(Y)04d-%(m)02d-%(d)02d %(HT)02d:00:00' % date_dict, '%Y-%m-%d %H:%M:%S') + working_intervals.append((date_from, date_to)) + + # find leave intervals + if leaves is None and compute_leaves: + leaves = self._get_leave_intervals(cr, uid, id, resource_id=resource_id, context=None) + + # filter according to leaves + for interval in working_intervals: + work_intervals = self.interval_remove_leaves(interval, leaves) + intervals += work_intervals + + return intervals + + def get_working_hours_of_date(self, cr, uid, id, day_date=None, leaves=None, compute_leaves=False, resource_id=None, context=None): + """Get the working hours of the day based on calendar. This method uses + get_working_intervals_of_day to have the work intervals of the day. It + then calculates the number of hours contained in those intervals. """ + res = timedelta() + intervals = self.get_working_intervals_of_day(cr, uid, id, day_date, leaves, compute_leaves, resource_id, context) + for interval in intervals: + res += interval[1] - interval[0] + return (res.total_seconds() / 3600.0) + + def schedule_hours(self, cr, uid, id, hours, start_datetime=None, end_datetime=None, compute_leaves=False, resource_id=None, context=None): + """ + """ + if start_datetime is None: + start_datetime = datetime.now() + work_hours = 0 + iterations = 0 + final_intervals = [] + + # compute work days + work_days = set() + resource_calendar = self.browse(cr, uid, id, context=context) + for attendance in resource_calendar.attendance_ids: + work_days.add(int(attendance.dayofweek)) + + # prepare rrule arguments + rrule_args = { + 'byweekday': work_days, + 'dtstart': start_datetime, + } + if end_date: + rrule_args['until'] = end_datetime + else: + rrule_args['count'] = 1024 + + for day in rrule.rrule(rrule.DAILY, **rrule_args): + working_intervals = self.get_working_intervals_of_day(cr, uid, id, day_date=day, compute_leaves=compute_leaves, resource_id=resource_id, context=context) + if not working_intervals: + continue + # Compute worked hours, compare to requested number of hours + res = timedelta() + for interval in working_intervals: + res += interval[1] - interval[0] + work_hours += (res.total_seconds() / 3600.0) + final_intervals += working_intervals + if float_compare(work_hours, hours * 1.0, precision_digits=2) in (0, 1) or (iterations >= 50): + break + iterations += 1 + + return final_intervals + + def _schedule_days(self, cr, uid, id, days, date=None, compute_leaves=False, resource_id=None, context=None): + """Schedule days of work. + + This method can be used backwards, i.e. scheduling days before a deadline. + """ + backwards = False + if days < 0: + backwards = True + days = abs(days) + intervals = [] + planned_days = 0 + iterations = 0 + current_datetime = date + + while planned_days < days and iterations < 1000: + working_intervals = self.get_working_intervals_of_day(cr, uid, id, current_datetime, compute_leaves=compute_leaves, resource_id=resource_id, context=context) + if id is None or working_intervals: # no calendar -> no working hours, but day is considered as worked + planned_days += 1 + intervals += working_intervals + # get next day + if backwards: + current_datetime = self.get_previous_day(cr, uid, id, current_datetime) + else: + current_datetime = self.get_next_day(cr, uid, id, current_datetime) + + return (current_datetime, intervals) + + def schedule_days(self, cr, uid, id, days, date=None, compute_leaves=False, resource_id=None, context=None): + res = self._schedule_days(cr, uid, id, days, date, compute_leaves, resource_id, context) + return res[0] + + # -------------------------------------------------- + # Compaqtibility / to clean / to remove + # -------------------------------------------------- + + def working_hours_on_day(self, cr, uid, resource_calendar_id, day, context=None): + """ Compatibility method - will be removed for OpenERP v8 + TDE TODO: hr_payroll/hr_payroll.py + """ + return self.get_working_hours_of_date(cr, uid, resource_calendar_id.id, day_date=day, context=None) def _get_leaves(self, cr, uid, id, resource): """Private Method to Calculate resource Leaves days @@ -99,6 +397,8 @@ class resource_calendar(osv.osv): schedule. @return : List datetime object of working schedule based on supplies params + + TDE TODO: used in mrp_operations/mrp_operations.py """ if not id: td = int(hours)*3 @@ -138,9 +438,10 @@ class resource_calendar(osv.osv): # def interval_get(self, cr, uid, id, dt_from, hours, resource=False, byday=True): def interval_get_multi(self, cr, uid, date_and_hours_by_cal, resource=False, byday=True): + """ TDE NOTE: used in mrp_operations/mrp_operations.py and in interval_get() """ def group(lst, key): lst.sort(key=itemgetter(key)) - grouped = groupby(lst, itemgetter(key)) + grouped = itertools.groupby(lst, itemgetter(key)) return dict([(k, [v for v in itr]) for k, itr in grouped]) # END group @@ -198,6 +499,8 @@ class resource_calendar(osv.osv): @param byday: boolean flag bit enforce day wise scheduling @return : list of scheduled working timing based on resource calendar. + + TDE NOTE: mrp_operations/mrp_operations.py, crm/crm_lead.py """ res = self.interval_get_multi(cr, uid, [(dt_from.strftime('%Y-%m-%d %H:%M:%S'), hours, id)], resource, byday)[(dt_from.strftime('%Y-%m-%d %H:%M:%S'), hours, id)] return res @@ -233,6 +536,8 @@ class resource_calendar(osv.osv): @param context: current request context @return : Total number of working hours based dt_from and dt_end and resource if supplied. + + TDE NOTE: used in project_issue/project_issue.py """ utc_tz = pytz.timezone('UTC') local_tz = utc_tz @@ -374,6 +679,8 @@ class resource_resource(osv.osv): def generate_resources(self, cr, uid, user_ids, calendar_id, context=None): """ Return a list of Resource Class objects for the resources allocated to the phase. + + TDE NOTE: used in project/project.py """ resource_objs = {} user_pool = self.pool.get('res.users') @@ -401,6 +708,8 @@ class resource_resource(osv.osv): @param calendar_id : working calendar of the project @param resource_id : resource working on phase/task @param resource_calendar : working calendar of the resource + + TDE NOTE: used in project/project.py, and in generate_resources """ resource_calendar_leaves_pool = self.pool.get('resource.calendar.leaves') leave_list = [] @@ -426,6 +735,8 @@ class resource_resource(osv.osv): """ Change the format of working calendar from 'Openerp' format to bring it into 'Faces' format. @param calendar_id : working calendar of the project + + TDE NOTE: used in project/project.py """ if not calendar_id: # Calendar is not specified: working days: 24/7 diff --git a/addons/resource/resource_view.xml b/addons/resource/resource_view.xml index 3c9f83905a9..dcd7e1a67c0 100644 --- a/addons/resource/resource_view.xml +++ b/addons/resource/resource_view.xml @@ -253,5 +253,6 @@ + diff --git a/addons/resource/tests/__init__.py b/addons/resource/tests/__init__.py new file mode 100644 index 00000000000..f22158c04b8 --- /dev/null +++ b/addons/resource/tests/__init__.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Business Applications +# Copyright (c) 2013-TODAY OpenERP S.A. +# +# 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 openerp.addons.resource.tests import test_resource + +checks = [ + test_resource, +] + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/resource/tests/common.py b/addons/resource/tests/common.py new file mode 100644 index 00000000000..6dffafd8179 --- /dev/null +++ b/addons/resource/tests/common.py @@ -0,0 +1,123 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Business Applications +# Copyright (c) 2013-TODAY OpenERP S.A. +# +# 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 datetime import datetime + +from openerp.tests import common + + +class TestResourceCommon(common.TransactionCase): + + def setUp(self): + super(TestResourceCommon, self).setUp() + cr, uid = self.cr, self.uid + if not hasattr(self, 'context'): + self.context = {} + + # Usefull models + self.resource_resource = self.registry('resource.resource') + self.resource_calendar = self.registry('resource.calendar') + self.resource_attendance = self.registry('resource.calendar.attendance') + self.resource_leaves = self.registry('resource.calendar.leaves') + + # Some demo data + self.date1 = datetime.strptime('2013-02-12 09:22:13', '%Y-%m-%d %H:%M:%S') # weekday() returns 1, isoweekday() returns 2 + self.date2 = datetime.strptime('2013-02-15 09:22:13', '%Y-%m-%d %H:%M:%S') # weekday() returns 4, isoweekday() returns 5 + # Leave1: 19/02/2013, from 9 to 12, is a day 0 + self.leave1_start = datetime.strptime('2013-02-19 09:00:00', '%Y-%m-%d %H:%M:%S') + self.leave1_end = datetime.strptime('2013-02-19 12:00:00', '%Y-%m-%d %H:%M:%S') + # Leave2: 22/02/2013, from 9 to 15, is a day 3 + self.leave2_start = datetime.strptime('2013-02-22 09:00:00', '%Y-%m-%d %H:%M:%S') + self.leave2_end = datetime.strptime('2013-02-22 15:00:00', '%Y-%m-%d %H:%M:%S') + # Leave3: 25/02/2013 (day6) -> 01/03/2013 (day3) + self.leave3_start = datetime.strptime('2013-02-25 13:00:00', '%Y-%m-%d %H:%M:%S') + self.leave3_end = datetime.strptime('2013-03-01 11:30:00', '%Y-%m-%d %H:%M:%S') + + # Resource data + # Calendar working days: 1 (8-16), 4 (8-13, 21-22) + self.calendar_id = self.resource_calendar.create( + cr, uid, { + 'name': 'TestCalendar', + } + ) + self.att1_id = self.resource_attendance.create( + cr, uid, { + 'name': 'Att1', + 'dayofweek': '1', + 'hour_from': 8, + 'hour_to': 16, + 'calendar_id': self.calendar_id, + } + ) + self.att2_id = self.resource_attendance.create( + cr, uid, { + 'name': 'Att2', + 'dayofweek': '4', + 'hour_from': 8, + 'hour_to': 13, + 'calendar_id': self.calendar_id, + } + ) + self.att3_id = self.resource_attendance.create( + cr, uid, { + 'name': 'Att3', + 'dayofweek': '4', + 'hour_from': 16, + 'hour_to': 23, + 'calendar_id': self.calendar_id, + } + ) + self.resource1_id = self.resource_resource.create( + cr, uid, { + 'name': 'TestResource1', + 'resource_type': 'user', + 'time_efficiency': 150.0, + 'calendar_id': self.calendar_id, + } + ) + self.leave1_id = self.resource_leaves.create( + cr, uid, { + 'name': 'GenericLeave', + 'calendar_id': self.calendar_id, + 'date_from': self.leave1_start, + 'date_to': self.leave1_end, + } + ) + self.leave2_id = self.resource_leaves.create( + cr, uid, { + 'name': 'ResourceLeave', + 'calendar_id': self.calendar_id, + 'resource_id': self.resource1_id, + 'date_from': self.leave2_start, + 'date_to': self.leave2_end, + } + ) + self.leave3_id = self.resource_leaves.create( + cr, uid, { + 'name': 'ResourceLeave2', + 'calendar_id': self.calendar_id, + 'resource_id': self.resource1_id, + 'date_from': self.leave3_start, + 'date_to': self.leave3_end, + } + ) + # Some browse data + self.calendar = self.resource_calendar.browse(cr, uid, self.calendar_id) diff --git a/addons/resource/tests/test_resource.py b/addons/resource/tests/test_resource.py new file mode 100644 index 00000000000..fa29de91b3d --- /dev/null +++ b/addons/resource/tests/test_resource.py @@ -0,0 +1,189 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Business Applications +# Copyright (c) 2013-TODAY OpenERP S.A. +# +# 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 datetime import datetime +from dateutil.relativedelta import relativedelta + +from openerp.addons.resource.tests.common import TestResourceCommon + + +class TestResource(TestResourceCommon): + + def test_00_intervals(self): + intervals = [ + ( + datetime.strptime('2013-02-04 09:00:00', '%Y-%m-%d %H:%M:%S'), + datetime.strptime('2013-02-04 11:00:00', '%Y-%m-%d %H:%M:%S') + ), ( + datetime.strptime('2013-02-04 08:00:00', '%Y-%m-%d %H:%M:%S'), + datetime.strptime('2013-02-04 12:00:00', '%Y-%m-%d %H:%M:%S') + ), ( + datetime.strptime('2013-02-04 11:00:00', '%Y-%m-%d %H:%M:%S'), + datetime.strptime('2013-02-04 14:00:00', '%Y-%m-%d %H:%M:%S') + ), ( + datetime.strptime('2013-02-04 17:00:00', '%Y-%m-%d %H:%M:%S'), + datetime.strptime('2013-02-04 21:00:00', '%Y-%m-%d %H:%M:%S') + ), ( + datetime.strptime('2013-02-03 08:00:00', '%Y-%m-%d %H:%M:%S'), + datetime.strptime('2013-02-03 10:00:00', '%Y-%m-%d %H:%M:%S') + ), ( + datetime.strptime('2013-02-04 18:00:00', '%Y-%m-%d %H:%M:%S'), + datetime.strptime('2013-02-04 19:00:00', '%Y-%m-%d %H:%M:%S') + ) + ] + + # Test: interval cleaning + result = self.resource_calendar.interval_clean(intervals) + self.assertEqual(len(result), 3, 'resource_calendar: wrong interval cleaning') + # First interval: 03, unchanged + self.assertEqual(result[0][0], datetime.strptime('2013-02-03 08:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong interval cleaning') + self.assertEqual(result[0][1], datetime.strptime('2013-02-03 10:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong interval cleaning') + # Second intreval: 04, 08-14, combining 08-12 and 11-14, 09-11 being inside 08-12 + self.assertEqual(result[1][0], datetime.strptime('2013-02-04 08:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong interval cleaning') + self.assertEqual(result[1][1], datetime.strptime('2013-02-04 14:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong interval cleaning') + # Third interval: 04, 17-21, 18-19 being inside 17-21 + self.assertEqual(result[2][0], datetime.strptime('2013-02-04 17:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong interval cleaning') + self.assertEqual(result[2][1], datetime.strptime('2013-02-04 21:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong interval cleaning') + + # Test: disjoint removal + working_interval = (datetime.strptime('2013-02-04 08:00:00', '%Y-%m-%d %H:%M:%S'), datetime.strptime('2013-02-04 18:00:00', '%Y-%m-%d %H:%M:%S')) + result = self.resource_calendar.interval_remove_leaves(working_interval, intervals) + self.assertEqual(len(result), 1, 'resource_calendar: wrong leave removal from interval') + # First interval: 04, 14-17 + self.assertEqual(result[0][0], datetime.strptime('2013-02-04 14:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong leave removal from interval') + self.assertEqual(result[0][1], datetime.strptime('2013-02-04 17:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong leave removal from interval') + + def test_10_calendar_basics(self): + """ Testing basic method of resource.calendar """ + cr, uid = self.cr, self.uid + + # -------------------------------------------------- + # Test1: get_next_day + # -------------------------------------------------- + + # Test: next day: next day after day1 is day4 + date = self.resource_calendar.get_next_day(cr, uid, self.calendar_id, day_date=self.date1) + self.assertEqual(date, self.date2, 'resource_calendar: wrong next day computing') + + # Test: next day: next day after day4 is (day1+7) + date = self.resource_calendar.get_next_day(cr, uid, self.calendar_id, day_date=self.date2) + self.assertEqual(date, self.date1 + relativedelta(days=7), 'resource_calendar: wrong next day computing') + + # Test: next day: next day after day4+1 is (day1+7) + date = self.resource_calendar.get_next_day(cr, uid, self.calendar_id, day_date=self.date2 + relativedelta(days=1)) + self.assertEqual(date, self.date1 + relativedelta(days=7), 'resource_calendar: wrong next day computing') + + # Test: next day: next day after day1-1 is day1 + date = self.resource_calendar.get_next_day(cr, uid, self.calendar_id, day_date=self.date1 + relativedelta(days=-1)) + self.assertEqual(date, self.date1, 'resource_calendar: wrong next day computing') + + # -------------------------------------------------- + # Test2: get_previous_day + # -------------------------------------------------- + + # Test: previous day: previous day before day1 is (day4-7) + date = self.resource_calendar.get_previous_day(cr, uid, self.calendar_id, day_date=self.date1) + self.assertEqual(date, self.date2 + relativedelta(days=-7), 'resource_calendar: wrong previous day computing') + + # Test: previous day: previous day before day4 is day1 + date = self.resource_calendar.get_previous_day(cr, uid, self.calendar_id, day_date=self.date2) + self.assertEqual(date, self.date1, 'resource_calendar: wrong previous day computing') + + # Test: previous day: previous day before day4+1 is day4 + date = self.resource_calendar.get_previous_day(cr, uid, self.calendar_id, day_date=self.date2 + relativedelta(days=1)) + self.assertEqual(date, self.date2, 'resource_calendar: wrong previous day computing') + + # Test: previous day: previous day before day1-1 is (day4-7) + date = self.resource_calendar.get_previous_day(cr, uid, self.calendar_id, day_date=self.date1 + relativedelta(days=-1)) + self.assertEqual(date, self.date2 + relativedelta(days=-7), 'resource_calendar: wrong previous day computing') + + def test_20_calendar_working_intervals(self): + """ Testing working intervals computing method of resource.calendar """ + cr, uid = self.cr, self.uid + + # Test: day0 without leaves: 1 interval + intervals = self.resource_calendar.get_working_intervals_of_day(cr, uid, self.calendar_id, day_date=self.date1) + self.assertEqual(len(intervals), 1, 'resource_calendar: wrong working intervals') + self.assertEqual(intervals[0][0], datetime.strptime('2013-02-12 08:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong working intervals') + self.assertEqual(intervals[0][1], datetime.strptime('2013-02-12 16:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong working intervals') + + # Test: day3 without leaves: 2 interval + intervals = self.resource_calendar.get_working_intervals_of_day(cr, uid, self.calendar_id, day_date=self.date2) + self.assertEqual(len(intervals), 2, 'resource_calendar: wrong working intervals') + self.assertEqual(intervals[0][0], datetime.strptime('2013-02-15 08:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong working intervals') + self.assertEqual(intervals[0][1], datetime.strptime('2013-02-15 13:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong working intervals') + self.assertEqual(intervals[1][0], datetime.strptime('2013-02-15 16:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong working intervals') + self.assertEqual(intervals[1][1], datetime.strptime('2013-02-15 23:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong working intervals') + + # Test: day0 with leaves outside range: 1 interval + intervals = self.resource_calendar.get_working_intervals_of_day(cr, uid, self.calendar_id, day_date=self.date1, compute_leaves=True) + self.assertEqual(len(intervals), 1, 'resource_calendar: wrong working intervals') + self.assertEqual(intervals[0][0], datetime.strptime('2013-02-12 08:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong working intervals') + self.assertEqual(intervals[0][1], datetime.strptime('2013-02-12 16:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong working intervals') + + # Test: day0 with leaves: 2 intrevals because of leave between 9 ans 12 + intervals = self.resource_calendar.get_working_intervals_of_day(cr, uid, self.calendar_id, day_date=self.date1 + relativedelta(days=7), compute_leaves=True) + self.assertEqual(len(intervals), 2, 'resource_calendar: wrong working intervals') + self.assertEqual(intervals[0][0], datetime.strptime('2013-02-19 08:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong working intervals') + self.assertEqual(intervals[0][1], datetime.strptime('2013-02-19 09:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong working intervals') + self.assertEqual(intervals[1][0], datetime.strptime('2013-02-19 12:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong working intervals') + self.assertEqual(intervals[1][1], datetime.strptime('2013-02-19 16:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong working intervals') + + def test_40_calendar_schedule_days(self): + """ Testing calendar days scheduling """ + cr, uid = self.cr, self.uid + + print '---------------' + res = self.resource_calendar.schedule_days(cr, uid, self.calendar_id, 5, date=self.date1) + print res + + # -------------------------------------------------- + # Misc + # -------------------------------------------------- + + # Without calendar, should only count days + print '---------------' + res = self.resource_calendar.schedule_days(cr, uid, None, 5, date=self.date1) + print res + + # @mute_logger('openerp.addons.base.ir.ir_model', 'openerp.osv.orm') + # def test_20_calendar(self): + # """ Testing calendar and time computation """ + # cr, uid = self.cr, self.uid + + # wh = self.resource_calendar.get_working_hours_of_date(cr, uid, self.calendar_id, day_date=self.date1) + # self.assertEqual(wh, 8, 'cacamou') + + # wh = self.resource_calendar.get_working_hours_of_date(cr, uid, self.calendar_id, day_date=self.date2+relativedelta(days=7)) + # self.assertEqual(wh, 12, 'cacamou') + + # # print '---------------------' + # # print self.date1 + # # res = self.resource_calendar.interval_min_get(cr, uid, self.calendar_id, self.date1, 40, resource=False) + # # print res + + # print '----------------------' + # res = self.resource_calendar.schedule_hours(cr, uid, self.calendar_id, 40, start_datetime=self.date1) + # print res + # print '----------------------' + # # print self.date1 + # # res = self.resource_calendar.interval_get(cr, uid, self.calendar_id, self.date1, 40, resource=False, byday=True) + # # print res From 49234995346258faa183fa92e660512538a4461e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 21 Aug 2013 12:51:27 +0200 Subject: [PATCH 02/20] [IMP] base_action_rule: when using a timed condition on days, allow to use a working calendar to compute days. bzr revid: tde@openerp.com-20130821105127-182i9f7mzkoo4cf0 --- addons/base_action_rule/__openerp__.py | 2 +- addons/base_action_rule/base_action_rule.py | 14 +++++++++++++- addons/base_action_rule/base_action_rule_view.xml | 2 ++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/addons/base_action_rule/__openerp__.py b/addons/base_action_rule/__openerp__.py index 973567c613f..5dd4b057514 100644 --- a/addons/base_action_rule/__openerp__.py +++ b/addons/base_action_rule/__openerp__.py @@ -35,7 +35,7 @@ trigger an automatic reminder email. """, 'author': 'OpenERP SA', 'website': 'http://www.openerp.com', - 'depends': ['base', 'mail'], + 'depends': ['base', 'resource', 'mail'], 'data': [ 'base_action_rule_view.xml', 'security/ir.model.access.csv', diff --git a/addons/base_action_rule/base_action_rule.py b/addons/base_action_rule/base_action_rule.py index 3497255fa76..fd1d8e8d121 100644 --- a/addons/base_action_rule/base_action_rule.py +++ b/addons/base_action_rule/base_action_rule.py @@ -74,6 +74,11 @@ class base_action_rule(osv.osv): "trigger date, like sending a reminder 15 minutes before a meeting."), 'trg_date_range_type': fields.selection([('minutes', 'Minutes'), ('hour', 'Hours'), ('day', 'Days'), ('month', 'Months')], 'Delay type'), + 'trg_date_calendar_id': fields.many2one( + 'resource.calendar', 'Use Calendar', + help='When calculating a day-based timed condition, it is possible to use a calendar to compute the date based on working days.', + ondelete='set null', + ), 'act_user_id': fields.many2one('res.users', 'Set Responsible'), 'act_followers': fields.many2many("res.partner", string="Add Followers"), 'server_action_ids': fields.many2many('ir.actions.server', string='Server Actions', @@ -268,7 +273,14 @@ class base_action_rule(osv.osv): record_dt = get_record_dt(record) if not record_dt: continue - action_dt = get_datetime(record_dt) + delay + if action.trg_date_calendar_id and action.trg_date_range_type == 'day': + start_dt = get_datetime(record_dt) + action_dt = self.pool['resource.calendar'].schedule_days( + cr, uid, action.trg_date_calendar_id.id, action.trg_date_range, + date=start_dt, compute_leaves=True + ) + else: + action_dt = get_datetime(record_dt) + delay if last_run and (last_run <= action_dt < now) or (action_dt < now): try: self._process(cr, uid, action, [record.id], context=context) diff --git a/addons/base_action_rule/base_action_rule_view.xml b/addons/base_action_rule/base_action_rule_view.xml index c2262adde39..a4341d403ca 100644 --- a/addons/base_action_rule/base_action_rule_view.xml +++ b/addons/base_action_rule/base_action_rule_view.xml @@ -43,6 +43,8 @@ +

Select when the action must be run, and add filters and/or timing conditions. From 0cb0a5994f1b808239f58de3a3c6a4d17262d5fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 29 Aug 2013 12:27:57 +0200 Subject: [PATCH 03/20] [FIX] crm: removed duplicate calendar menu item bzr revid: tde@openerp.com-20130829102757-3mxgu096ttygnway --- addons/crm/crm_view.xml | 3 --- 1 file changed, 3 deletions(-) diff --git a/addons/crm/crm_view.xml b/addons/crm/crm_view.xml index d0dcc07fcb0..5766ea3fb29 100644 --- a/addons/crm/crm_view.xml +++ b/addons/crm/crm_view.xml @@ -311,9 +311,6 @@ groups="base.group_no_one" sequence="15" parent="base.menu_base_config"/> - - - From af79a26a1f5f85b760f8b1cbab169acaa8bd4e89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 30 Aug 2013 15:32:50 +0200 Subject: [PATCH 04/20] [IMP] resource: overall fix of hours/days computation + scheduling + added tests bzr revid: tde@openerp.com-20130830133250-ixehp7imac0duygd --- addons/resource/resource.py | 473 ++++++++++++++++--------- addons/resource/test/resource.yml | 2 +- addons/resource/tests/common.py | 10 +- addons/resource/tests/test_resource.py | 346 ++++++++++++++---- 4 files changed, 588 insertions(+), 243 deletions(-) diff --git a/addons/resource/resource.py b/addons/resource/resource.py index dd87157aeb0..c8635a01d0c 100644 --- a/addons/resource/resource.py +++ b/addons/resource/resource.py @@ -19,13 +19,14 @@ # ############################################################################## -import pytz -from datetime import date, datetime, timedelta +import datetime +# from datetime import datetime, timedelta from dateutil import rrule from dateutil.relativedelta import relativedelta import itertools import math from operator import itemgetter +import pytz from faces import * from openerp import tools @@ -38,10 +39,10 @@ class resource_calendar(osv.osv): _name = "resource.calendar" _description = "Resource Calendar" _columns = { - 'name' : fields.char("Name", size=64, required=True), - 'company_id' : fields.many2one('res.company', 'Company', required=False), - 'attendance_ids' : fields.one2many('resource.calendar.attendance', 'calendar_id', 'Working Time'), - 'manager' : fields.many2one('res.users', 'Workgroup Manager'), + 'name': fields.char("Name", size=64, required=True), + 'company_id': fields.many2one('res.company', 'Company', required=False), + 'attendance_ids': fields.one2many('resource.calendar.attendance', 'calendar_id', 'Working Time'), + 'manager': fields.many2one('res.users', 'Workgroup Manager'), 'leave_ids': fields.one2many( 'resource.calendar.leaves', 'calendar_id', 'Leaves', help='' @@ -56,27 +57,29 @@ class resource_calendar(osv.osv): # -------------------------------------------------- def interval_clean(self, intervals): - """ Utility method that removes overlapping inside datetime intervals. + """ Utility method that sorts and removes overlapping inside datetime + intervals. The intervals are sorted based on increasing starting datetime. + Overlapping intervals are merged into a single one. - :param list intervals: list of datetime intervals. Each interval is a - tuple(datetime_from, datetime_to) - :return list final_list: list of intervals without overlap + :param list intervals: list of intervals; each interval is a tuple + (datetime_from, datetime_to) + :return list cleaned: list of sorted intervals without overlap """ - intervals = sorted(intervals) # TODO: check sorted method - final_list = [] + intervals = sorted(intervals, key=itemgetter(0)) # sort on first datetime + cleaned = [] working_interval = None while intervals: current_interval = intervals.pop(0) if not working_interval: # init working_interval = [current_interval[0], current_interval[1]] elif working_interval[1] < current_interval[0]: # interval is disjoint - final_list.append(tuple(working_interval)) + cleaned.append(tuple(working_interval)) working_interval = [current_interval[0], current_interval[1]] elif working_interval[1] < current_interval[1]: # union of greater intervals working_interval[1] = current_interval[1] if working_interval: # handle void lists - final_list.append(tuple(working_interval)) - return final_list + cleaned.append(tuple(working_interval)) + return cleaned def interval_remove_leaves(self, interval, leave_intervals): """ Utility method that remove leave intervals from a base interval: @@ -98,87 +101,120 @@ class resource_calendar(osv.osv): :param tuple interval: a tuple (beginning datetime, ending datetime) that is the base interval from which the leave intervals will be removed - :param list interval: a list of tuples (beginning datetime, ending datetime) - that are intervals to remove from the base interval - :return list final_list: a list of tuples (begin datetime, end datetime) - that are the remaining valid intervals + :param list leave_intervals: a list of tuples (beginning datetime, ending datetime) + that are intervals to remove from the base interval + :return list intervals: a list of tuples (begin datetime, end datetime) + that are the remaining valid intervals """ if not interval: return interval if leave_intervals is None: leave_intervals = [] - final_list = [] + intervals = [] leave_intervals = self.interval_clean(leave_intervals) current_interval = [interval[0], interval[1]] - # print '\tcurrent_intreval', current_interval for leave in leave_intervals: - # print '\thandling leave', leave if leave[1] <= current_interval[0]: - # print '\t\tbefore, skipping' continue if leave[0] >= current_interval[1]: - # print '\t\tafter, abort' break if current_interval[0] < leave[0] < current_interval[1]: - # print '\t\tbeginning inside' current_interval[1] = leave[0] - final_list.append((current_interval[0], current_interval[1])) + intervals.append((current_interval[0], current_interval[1])) current_interval = [leave[1], interval[1]] - if current_interval[0] <= leave[1] <= current_interval[1]: - # print '\t\tending inside' + # if current_interval[0] <= leave[1] <= current_interval[1]: + if current_interval[0] <= leave[1]: current_interval[0] = leave[1] if current_interval and current_interval[0] < interval[1]: # remove intervals moved outside base interval due to leaves - final_list.append((current_interval[0], current_interval[1])) - return final_list + intervals.append((current_interval[0], current_interval[1])) + return intervals + + def interval_schedule_hours(self, intervals, hour, remove_at_end=True): + """ Schedule hours in intervals. The last matching interval is truncated + to match the specified hours. + + It is possible to truncate the last interval at its beginning or ending. + However this does nothing on the given interval order that should be + submitted accordingly. + + :param list intervals: a list of tuples (beginning datetime, ending datetime) + :param int/float hours: number of hours to schedule + :param boolean remove_at_end: remove extra hours at the end of the last + matching interval. Otherwise, do it at the + beginning. + + :return list results: a list of intervals + """ + results = [] + res = datetime.timedelta() + limit = datetime.timedelta(hours=hour) + for interval in intervals: + res += interval[1] - interval[0] + if res > limit and remove_at_end: + interval = (interval[0], interval[1] + relativedelta(seconds=(limit-res).total_seconds())) + elif res > limit: + interval = (interval[0] + relativedelta(seconds=(res-limit).total_seconds()), interval[1]) + results.append(interval) + if res > limit: + break + return results # -------------------------------------------------- # Date and hours computation # -------------------------------------------------- - def get_next_day(self, cr, uid, id, day_date, context=None): - if id is None: - return day_date + relativedelta(days=1) + def get_attendances_for_weekdays(self, cr, uid, id, weekdays, context=None): + """ Given a list of weekdays, return matching resource.calendar.attendance""" + calendar = self.browse(cr, uid, id, context=None) + return [att for att in calendar.attendance_ids if int(att.dayofweek) in weekdays] + + def get_weekdays(self, cr, uid, id, context=None): + """ Return the list of weekdays that contain at least one working interval """ calendar = self.browse(cr, uid, id, context=None) weekdays = set() for attendance in calendar.attendance_ids: weekdays.add(int(attendance.dayofweek)) - weekdays = list(weekdays) + return list(weekdays) - if day_date.weekday() in weekdays: - base_index = weekdays.index(day_date.weekday()) - else: - base_index = -1 - for weekday in weekdays: - if weekday > day_date.weekday(): - break - base_index += 1 + def get_next_day(self, cr, uid, id, day_date, context=None): + """ Get following date of day_date, based on resource.calendar. If no + calendar is provided, just return the next day. + + :param date day_date: current day as a date + """ + if id is None: + return day_date + relativedelta(days=1) + weekdays = self.get_weekdays(cr, uid, id, context) + + base_index = -1 + for weekday in weekdays: + if weekday > day_date.weekday(): + break + base_index += 1 new_index = (base_index + 1) % len(weekdays) days = (weekdays[new_index] - day_date.weekday()) - if days < 0: days = 7 + days return day_date + relativedelta(days=days) def get_previous_day(self, cr, uid, id, day_date, context=None): + """ Get previous date of day_date, based on resource.calendar. If no + calendar is provided, just return the previous day. + + :param date day_date: current day as a date + """ if id is None: return day_date + relativedelta(days=-1) - calendar = self.browse(cr, uid, id, context=None) - weekdays = set() - for attendance in calendar.attendance_ids: - weekdays.add(int(attendance.dayofweek)) - weekdays = list(weekdays) + weekdays = self.get_weekdays(cr, uid, id, context) weekdays.reverse() - if day_date.weekday() in weekdays: - base_index = weekdays.index(day_date.weekday()) - else: - base_index = -1 - for weekday in weekdays: - if weekday < day_date.weekday(): - break - base_index += 1 + base_index = -1 + for weekday in weekdays: + if weekday < day_date.weekday(): + break + base_index += 1 new_index = (base_index + 1) % len(weekdays) days = (weekdays[new_index] - day_date.weekday()) @@ -187,35 +223,55 @@ class resource_calendar(osv.osv): return day_date + relativedelta(days=days) - def _get_leave_intervals(self, cr, uid, id, resource_id=None, start_datetime=None, end_datetime=None, context=None): + def get_leave_intervals(self, cr, uid, id, resource_id=None, + start_datetime=None, end_datetime=None, + context=None): """Get the leaves of the calendar. Leaves can be filtered on the resource, the start datetime or the end datetime. - :param int resource_id: if set, global + specific leaves will be taken - into account - TODO: COMPLETE ME + :param int resource_id: the id of the resource to take into account when + computing the leaves. If not set, only general + leaves are computed. If set, generic and + specific leaves are computed. + :param datetime start_datetime: if provided, do not take into account leaves + ending before this date. + :param datetime end_datetime: if provided, do not take into account leaves + beginning after this date. + + :return list leaves: list of tuples (start_datetime, end_datetime) of + leave intervals """ resource_calendar = self.browse(cr, uid, id, context=context) leaves = [] for leave in resource_calendar.leave_ids: - if resource_id and leave.resource_id and not resource_id == leave.resource_id.id: + if leave.resource_id and not resource_id == leave.resource_id.id: continue - date_from = datetime.strptime(leave.date_from, tools.DEFAULT_SERVER_DATETIME_FORMAT) - if start_datetime and date_from < start_datetime: + date_from = datetime.datetime.strptime(leave.date_from, tools.DEFAULT_SERVER_DATETIME_FORMAT) + if end_datetime and date_from > end_datetime: continue - if end_datetime and date_end > end_datetime: + date_to = datetime.datetime.strptime(leave.date_to, tools.DEFAULT_SERVER_DATETIME_FORMAT) + if start_datetime and date_to < start_datetime: continue - date_to = datetime.strptime(leave.date_to, tools.DEFAULT_SERVER_DATETIME_FORMAT) leaves.append((date_from, date_to)) return leaves - def get_working_intervals_of_day(self, cr, uid, id, day_date=None, leaves=None, compute_leaves=False, resource_id=None, context=None): + def get_working_intervals_of_day(self, cr, uid, id, start_dt=None, end_dt=None, + leaves=None, compute_leaves=False, resource_id=None, + context=None): """Get the working intervals of the day based on calendar. This method handle leaves that come directly from the leaves parameter or can be computed. :param int id: resource.calendar id; take the first one if is a list - :param date day_date: date object that is the day for which this method - computes the working intervals; is None, set to today + :param datetime start_dt: datetime object that is the beginning hours + for the working intervals computation; any + working interval beginning before start_dt + will be truncated. If not set, set to end_dt + or today() if no end_dt at 00.00.00. + :param datetime end_dt: datetime object that is the ending hour + for the working intervals computation; any + working interval ending after end_dt + will be truncated. If not set, set to start_dt() + at 23.59.59. :param list leaves: a list of tuples(start_datetime, end_datetime) that represent leaves. :param boolean compute_leaves: if set and if leaves is None, compute the @@ -224,40 +280,45 @@ class resource_calendar(osv.osv): no leaves are taken into account. :param int resource_id: the id of the resource to take into account when computing the leaves. If not set, only general - leaves will be computed. + leaves are computed. If set, generic and + specific leaves are computed. - :returns list intervals: a list of tuples (start_datetime, end_datetime) - that are intervals of work + :return list intervals: a list of tuples (start_datetime, end_datetime) + of work intervals """ if id is None: return [] if isinstance(id, (list, tuple)): id = id[0] - if day_date is None: - day_date = date.today() - resource_calendar = self.browse(cr, uid, id, context=context) - intervals = [] - # find working intervals - date_dict = { - 'Y': day_date.year, - 'm': day_date.month, - 'd': day_date.day, - } + # Computes start_dt, end_dt (with default values if not set) + off-interval work limits + work_limits = [] + if start_dt is None and end_dt is not None: + start_dt = end_dt.replace(hour=0, minute=0, second=0) + elif start_dt is None: + start_dt = datetime.datetime.now().replace(hour=0, minute=0, second=0) + else: + work_limits.append((start_dt.replace(hour=0, minute=0, second=0), start_dt)) + if end_dt is None: + end_dt = start_dt.replace(hour=23, minute=59, second=59) + else: + work_limits.append((end_dt, end_dt.replace(hour=23, minute=59, second=59))) + assert start_dt.date() == end_dt.date(), 'get_working_intervals_of_day is restricted to one day' + + intervals = [] + work_dt = start_dt.replace(hour=0, minute=0, second=0) + working_intervals = [] - for calendar_working_day in resource_calendar.attendance_ids: - if int(calendar_working_day.dayofweek) == day_date.weekday(): - date_dict.update({ - 'HF': calendar_working_day.hour_from, - 'HT': calendar_working_day.hour_to, - }) - date_from = datetime.strptime('%(Y)04d-%(m)02d-%(d)02d %(HF)02d:00:00' % date_dict, '%Y-%m-%d %H:%M:%S') - date_to = datetime.strptime('%(Y)04d-%(m)02d-%(d)02d %(HT)02d:00:00' % date_dict, '%Y-%m-%d %H:%M:%S') - working_intervals.append((date_from, date_to)) + for calendar_working_day in self.get_attendances_for_weekdays(cr, uid, id, [start_dt.weekday()], context): + working_interval = ( + work_dt.replace(hour=int(calendar_working_day.hour_from)), + work_dt.replace(hour=int(calendar_working_day.hour_to)) + ) + working_intervals += self.interval_remove_leaves(working_interval, work_limits) # find leave intervals if leaves is None and compute_leaves: - leaves = self._get_leave_intervals(cr, uid, id, resource_id=resource_id, context=None) + leaves = self.get_leave_intervals(cr, uid, id, resource_id=resource_id, context=None) # filter according to leaves for interval in working_intervals: @@ -266,70 +327,135 @@ class resource_calendar(osv.osv): return intervals - def get_working_hours_of_date(self, cr, uid, id, day_date=None, leaves=None, compute_leaves=False, resource_id=None, context=None): + def get_working_hours_of_date(self, cr, uid, id, start_dt=None, end_dt=None, + leaves=None, compute_leaves=False, resource_id=None, + context=None): """Get the working hours of the day based on calendar. This method uses get_working_intervals_of_day to have the work intervals of the day. It then calculates the number of hours contained in those intervals. """ - res = timedelta() - intervals = self.get_working_intervals_of_day(cr, uid, id, day_date, leaves, compute_leaves, resource_id, context) + res = datetime.timedelta() + intervals = self.get_working_intervals_of_day(cr, uid, id, start_dt, end_dt, leaves, compute_leaves, resource_id, context) for interval in intervals: res += interval[1] - interval[0] return (res.total_seconds() / 3600.0) - def schedule_hours(self, cr, uid, id, hours, start_datetime=None, end_datetime=None, compute_leaves=False, resource_id=None, context=None): + def _schedule_hours(self, cr, uid, id, hours, day_dt=None, + compute_leaves=False, resource_id=None, + context=None): + """Schedule hours of work, using a calendar and an optional resource to + compute working and leave days. This method can be used backwards, i.e. + scheduling days before a deadline. + + :param timedelta hours: number of hours to schedule + :param datetime day_dt: reference date to compute working days. If days is + > 0 date is the starting date. If days is < 0 + date is the ending date. + :param boolean compute_leaves: if set, compute the leaves based on calendar + and resource. Otherwise no leaves are taken + into account. + :param int resource_id: the id of the resource to take into account when + computing the leaves. If not set, only general + leaves are computed. If set, generic and + specific leaves are computed. + + :return tuple (datetime, intervals): datetime is the beginning/ending date + of the schedulign; intervals are the + working intervals of the scheduling. + + Note: Why not using rrule.rrule ? Because rrule does not seem to allow + getting back in time. """ - """ - if start_datetime is None: - start_datetime = datetime.now() - work_hours = 0 + if day_dt is None: + day_dt = datetime.datetime.now() + backwards = (hours < 0) + hours = abs(hours) + intervals = [] + remaining_hours = hours * 1.0 iterations = 0 - final_intervals = [] + current_datetime = day_dt - # compute work days - work_days = set() - resource_calendar = self.browse(cr, uid, id, context=context) - for attendance in resource_calendar.attendance_ids: - work_days.add(int(attendance.dayofweek)) + call_args = dict(compute_leaves=compute_leaves, resource_id=resource_id, context=context) - # prepare rrule arguments - rrule_args = { - 'byweekday': work_days, - 'dtstart': start_datetime, - } - if end_date: - rrule_args['until'] = end_datetime - else: - rrule_args['count'] = 1024 + while float_compare(remaining_hours, 0.0, precision_digits=2) in (1, 0) and iterations < 1000: + if backwards: + call_args['end_dt'] = current_datetime + else: + call_args['start_dt'] = current_datetime - for day in rrule.rrule(rrule.DAILY, **rrule_args): - working_intervals = self.get_working_intervals_of_day(cr, uid, id, day_date=day, compute_leaves=compute_leaves, resource_id=resource_id, context=context) - if not working_intervals: - continue - # Compute worked hours, compare to requested number of hours - res = timedelta() - for interval in working_intervals: - res += interval[1] - interval[0] - work_hours += (res.total_seconds() / 3600.0) - final_intervals += working_intervals - if float_compare(work_hours, hours * 1.0, precision_digits=2) in (0, 1) or (iterations >= 50): - break + working_intervals = self.get_working_intervals_of_day(cr, uid, id, **call_args) + + if id is None: # no calendar -> consider 8 working hours + remaining_hours -= 8.0 + elif working_intervals: + if backwards: + working_intervals.reverse() + new_working_intervals = self.interval_schedule_hours(working_intervals, remaining_hours, not backwards) + if backwards: + new_working_intervals.reverse() + + res = datetime.timedelta() + for interval in working_intervals: + res += interval[1] - interval[0] + remaining_hours -= (res.total_seconds() / 3600.0) + if backwards: + intervals = new_working_intervals + intervals + else: + intervals = intervals + new_working_intervals + # get next day + if backwards: + current_datetime = datetime.datetime.combine(self.get_previous_day(cr, uid, id, current_datetime, context), datetime.time(23, 59, 59)) + else: + current_datetime = datetime.datetime.combine(self.get_next_day(cr, uid, id, current_datetime, context), datetime.time()) + # avoid infinite loops iterations += 1 - return final_intervals + return intervals - def _schedule_days(self, cr, uid, id, days, date=None, compute_leaves=False, resource_id=None, context=None): - """Schedule days of work. + def schedule_hours_get_date(self, cr, uid, id, hours, day_dt=None, compute_leaves=False, resource_id=None, context=None): + """Wrapper on _schedule_hours: return the beginning/ending datetime of + an hours scheduling. """ + res = self._schedule_hours(cr, uid, id, hours, day_dt, compute_leaves, resource_id, context) + return res[0][0] - This method can be used backwards, i.e. scheduling days before a deadline. + def schedule_hours(self, cr, uid, id, hours, day_dt=None, compute_leaves=False, resource_id=None, context=None): + """Wrapper on _schedule_hours: return the working intervals of an hours + scheduling. """ + return self._schedule_hours(cr, uid, id, hours, day_dt, compute_leaves, resource_id, context) + + def _schedule_days(self, cr, uid, id, days, day_date=None, compute_leaves=False, resource_id=None, context=None): + """Schedule days of work, using a calendar and an optional resource to + compute working and leave days. This method can be used backwards, i.e. + scheduling days before a deadline. + + :param date day_date: reference date to compute working days. If days is > 0 + date is the starting date. If days is < 0 date is the + ending date. + :param boolean compute_leaves: if set, compute the leaves based on calendar + and resource. Otherwise no leaves are taken + into account. + :param int resource_id: the id of the resource to take into account when + computing the leaves. If not set, only general + leaves are computed. If set, generic and + specific leaves are computed. + + :return tuple (datetime, intervals): datetime is the beginning/ending date + of the schedulign; intervals are the + working intervals of the scheduling. + + TDE NOTE: Why not using rrule.rrule ? Because rrule does not seem to + allow getting back in time. """ - backwards = False - if days < 0: - backwards = True - days = abs(days) + if day_date is None: + day_date = datetime.datetime.now() + backwards = (days < 0) + days = abs(days) intervals = [] planned_days = 0 iterations = 0 - current_datetime = date + if backwards: + current_datetime = day_date.replace(hour=23, minute=59, second=59) + else: + current_datetime = day_date.replace(hour=0, minute=0, second=0) while planned_days < days and iterations < 1000: working_intervals = self.get_working_intervals_of_day(cr, uid, id, current_datetime, compute_leaves=compute_leaves, resource_id=resource_id, context=context) @@ -338,25 +464,38 @@ class resource_calendar(osv.osv): intervals += working_intervals # get next day if backwards: - current_datetime = self.get_previous_day(cr, uid, id, current_datetime) + current_datetime = self.get_previous_day(cr, uid, id, current_datetime, context) else: - current_datetime = self.get_next_day(cr, uid, id, current_datetime) + current_datetime = self.get_next_day(cr, uid, id, current_datetime, context) + # avoid infinite loops + iterations += 1 - return (current_datetime, intervals) + return intervals - def schedule_days(self, cr, uid, id, days, date=None, compute_leaves=False, resource_id=None, context=None): - res = self._schedule_days(cr, uid, id, days, date, compute_leaves, resource_id, context) - return res[0] + def schedule_days_get_date(self, cr, uid, id, days, day_date=None, compute_leaves=False, resource_id=None, context=None): + """Wrapper on _schedule_days: return the beginning/ending datetime of + a days scheduling. """ + res = self._schedule_days(cr, uid, id, days, day_date, compute_leaves, resource_id, context) + return res[-1][1].date() + + def schedule_days(self, cr, uid, id, days, day_date=None, compute_leaves=False, resource_id=None, context=None): + """Wrapper on _schedule_days: return the working intervals of a days + scheduling. """ + return self._schedule_days(cr, uid, id, days, day_date, compute_leaves, resource_id, context) # -------------------------------------------------- # Compaqtibility / to clean / to remove # -------------------------------------------------- def working_hours_on_day(self, cr, uid, resource_calendar_id, day, context=None): - """ Compatibility method - will be removed for OpenERP v8 + """ Compatibility method - will be removed for OpenERP v8. Computation + was done for the whole day, therefore setting start_dt at the beginning + of the day. TDE TODO: hr_payroll/hr_payroll.py """ - return self.get_working_hours_of_date(cr, uid, resource_calendar_id.id, day_date=day, context=None) + if isinstance(day, datetime.datetime): + day = day.replace(hour=0, minute=0) + return self.get_working_hours_of_date(cr, uid, resource_calendar_id.id, start_dt=day, context=None) def _get_leaves(self, cr, uid, id, resource): """Private Method to Calculate resource Leaves days @@ -366,6 +505,7 @@ class resource_calendar(osv.osv): @return : returns the list of dates, where resource on leave in resource.calendar.leaves object (e.g.['%Y-%m-%d', '%Y-%m-%d']) + TDE TODO: internal only """ resource_cal_leaves = self.pool.get('resource.calendar.leaves') dt_leave = [] @@ -374,10 +514,10 @@ class resource_calendar(osv.osv): res_leaves = resource_cal_leaves.browse(cr, uid, resource_leave_ids) for leave in res_leaves: - dtf = datetime.strptime(leave.date_from, '%Y-%m-%d %H:%M:%S') - dtt = datetime.strptime(leave.date_to, '%Y-%m-%d %H:%M:%S') + dtf = datetime.datetime.strptime(leave.date_from, '%Y-%m-%d %H:%M:%S') + dtt = datetime.datetime.strptime(leave.date_to, '%Y-%m-%d %H:%M:%S') no = dtt - dtf - [dt_leave.append((dtf + timedelta(days=x)).strftime('%Y-%m-%d')) for x in range(int(no.days + 1))] + [dt_leave.append((dtf + datetime.timedelta(days=x)).strftime('%Y-%m-%d')) for x in range(int(no.days + 1))] dt_leave.sort() return dt_leave @@ -399,10 +539,11 @@ class resource_calendar(osv.osv): params TDE TODO: used in mrp_operations/mrp_operations.py + TDE NOTE: do not count leave hours, a leave is considered all-day """ if not id: td = int(hours)*3 - return [(dt_from - timedelta(hours=td), dt_from)] + return [(dt_from - datetime.timedelta(hours=td), dt_from)] dt_leave = self._get_leaves(cr, uid, id, resource) dt_leave.reverse() todo = hours @@ -420,17 +561,17 @@ class resource_calendar(osv.osv): dt_check = dt_from.strftime('%Y-%m-%d') for leave in dt_leave: if dt_check == leave: - dt_check = datetime.strptime(dt_check, '%Y-%m-%d') + timedelta(days=1) + dt_check = datetime.datetime.strptime(dt_check, '%Y-%m-%d') + datetime.timedelta(days=1) leave_flag = True if leave_flag: break else: - d1 = datetime(dt_from.year, dt_from.month, dt_from.day, int(math.floor(hour_from)), int((hour_from%1) * 60)) - d2 = datetime(dt_from.year, dt_from.month, dt_from.day, int(math.floor(m)), int((m%1) * 60)) + d1 = datetime.datetime(dt_from.year, dt_from.month, dt_from.day, int(math.floor(hour_from)), int((hour_from%1) * 60)) + d2 = datetime.datetime(dt_from.year, dt_from.month, dt_from.day, int(math.floor(m)), int((m%1) * 60)) result.append((d1, d2)) current_hour = hour_from todo -= (m-hour_from) - dt_from -= timedelta(days=1) + dt_from -= datetime.timedelta(days=1) current_hour = 24 maxrecur -= 1 result.reverse() @@ -438,7 +579,10 @@ class resource_calendar(osv.osv): # def interval_get(self, cr, uid, id, dt_from, hours, resource=False, byday=True): def interval_get_multi(self, cr, uid, date_and_hours_by_cal, resource=False, byday=True): - """ TDE NOTE: used in mrp_operations/mrp_operations.py and in interval_get() """ + """ TDE NOTE: used in mrp_operations/mrp_operations.py (default parameters) and in interval_get() + TDE NOTE: byday is not used in this method... + TDE NOTE: do not count leave hours, a leave is considered all-day + """ def group(lst, key): lst.sort(key=itemgetter(key)) grouped = itertools.groupby(lst, itemgetter(key)) @@ -452,10 +596,10 @@ class resource_calendar(osv.osv): results = {} for d, hours, id in date_and_hours_by_cal: - dt_from = datetime.strptime(d, '%Y-%m-%d %H:%M:%S') + dt_from = datetime.datetime.strptime(d, '%Y-%m-%d %H:%M:%S') if not id: td = int(hours)*3 - results[(d, hours, id)] = [(dt_from, dt_from + timedelta(hours=td))] + results[(d, hours, id)] = [(dt_from, dt_from + datetime.timedelta(hours=td))] continue dt_leave = self._get_leaves(cr, uid, id, resource) @@ -473,17 +617,17 @@ class resource_calendar(osv.osv): dt_check = dt_from.strftime('%Y-%m-%d') for leave in dt_leave: if dt_check == leave: - dt_check = datetime.strptime(dt_check, '%Y-%m-%d') + timedelta(days=1) + dt_check = datetime.datetime.strptime(dt_check, '%Y-%m-%d') + datetime.timedelta(days=1) leave_flag = True if leave_flag: break else: - d1 = datetime(dt_from.year, dt_from.month, dt_from.day, int(math.floor(m)), int((m%1) * 60)) - d2 = datetime(dt_from.year, dt_from.month, dt_from.day, int(math.floor(hour_to)), int((hour_to%1) * 60)) + d1 = datetime.datetime(dt_from.year, dt_from.month, dt_from.day, int(math.floor(m)), int((m%1) * 60)) + d2 = datetime.datetime(dt_from.year, dt_from.month, dt_from.day, int(math.floor(hour_to)), int((hour_to%1) * 60)) result.append((d1, d2)) current_hour = hour_to todo -= (hour_to - m) - dt_from += timedelta(days=1) + dt_from += datetime.timedelta(days=1) current_hour = 0 maxrecur -= 1 results[(d, hours, id)] = result @@ -500,7 +644,7 @@ class resource_calendar(osv.osv): @return : list of scheduled working timing based on resource calendar. - TDE NOTE: mrp_operations/mrp_operations.py, crm/crm_lead.py + TDE NOTE: mrp_operations/mrp_operations.py, crm/crm_lead.py (res given) """ res = self.interval_get_multi(cr, uid, [(dt_from.strftime('%Y-%m-%d %H:%M:%S'), hours, id)], resource, byday)[(dt_from.strftime('%Y-%m-%d %H:%M:%S'), hours, id)] return res @@ -538,6 +682,7 @@ class resource_calendar(osv.osv): resource if supplied. TDE NOTE: used in project_issue/project_issue.py + TDE NOTE: day-long leaves """ utc_tz = pytz.timezone('UTC') local_tz = utc_tz @@ -591,7 +736,7 @@ class resource_calendar(osv.osv): interval_start = utc_to_local_zone(dt_from) interval_end = utc_to_local_zone(dt_to) - hours_timedelta = timedelta() + hours_timedelta = datetime.timedelta() # Get leaves for requested resource dt_leaves = set([]) @@ -599,7 +744,7 @@ class resource_calendar(osv.osv): dt_leaves = set(self._get_leaves(cr, uid, id, resource=resource_id)) for day in rrule.rrule(rrule.DAILY, dtstart=interval_start, - until=interval_end+timedelta(days=1), + until=interval_end+datetime.timedelta(days=1), byweekday=hours_range_per_weekday.keys()): if exclude_leaves and day.strftime('%Y-%m-%d') in dt_leaves: # XXX: futher improve leave management to allow for partial day leave @@ -724,10 +869,10 @@ class resource_resource(osv.osv): ], context=context) leaves = resource_calendar_leaves_pool.read(cr, uid, leave_ids, ['date_from', 'date_to'], context=context) for i in range(len(leaves)): - dt_start = datetime.strptime(leaves[i]['date_from'], '%Y-%m-%d %H:%M:%S') - dt_end = datetime.strptime(leaves[i]['date_to'], '%Y-%m-%d %H:%M:%S') + dt_start = datetime.datetime.strptime(leaves[i]['date_from'], '%Y-%m-%d %H:%M:%S') + dt_end = datetime.datetime.strptime(leaves[i]['date_to'], '%Y-%m-%d %H:%M:%S') no = dt_end - dt_start - [leave_list.append((dt_start + timedelta(days=x)).strftime('%Y-%m-%d')) for x in range(int(no.days + 1))] + [leave_list.append((dt_start + datetime.timedelta(days=x)).strftime('%Y-%m-%d')) for x in range(int(no.days + 1))] leave_list.sort() return leave_list diff --git a/addons/resource/test/resource.yml b/addons/resource/test/resource.yml index 28604518b7b..b085c0734c4 100644 --- a/addons/resource/test/resource.yml +++ b/addons/resource/test/resource.yml @@ -26,7 +26,7 @@ dt = now - timedelta(days=now.weekday()) for resource in resources: result = calendar_pool.working_hours_on_day(cr, uid, resource.calendar_id, dt, context) - assert result == 9.0, 'Wrong calculation of day work hour availability of the Resource.' + assert result == 9.0, 'Wrong calculation of day work hour availability of the Resource (found %d).' % result - Now, resource "Developer" drafted leave on Thursday in this week. - diff --git a/addons/resource/tests/common.py b/addons/resource/tests/common.py index 6dffafd8179..e5d17bc7455 100644 --- a/addons/resource/tests/common.py +++ b/addons/resource/tests/common.py @@ -39,15 +39,15 @@ class TestResourceCommon(common.TransactionCase): self.resource_leaves = self.registry('resource.calendar.leaves') # Some demo data - self.date1 = datetime.strptime('2013-02-12 09:22:13', '%Y-%m-%d %H:%M:%S') # weekday() returns 1, isoweekday() returns 2 - self.date2 = datetime.strptime('2013-02-15 09:22:13', '%Y-%m-%d %H:%M:%S') # weekday() returns 4, isoweekday() returns 5 - # Leave1: 19/02/2013, from 9 to 12, is a day 0 + self.date1 = datetime.strptime('2013-02-12 09:08:07', '%Y-%m-%d %H:%M:%S') # weekday() returns 1, isoweekday() returns 2 + self.date2 = datetime.strptime('2013-02-15 10:11:12', '%Y-%m-%d %H:%M:%S') # weekday() returns 4, isoweekday() returns 5 + # Leave1: 19/02/2013, from 9 to 12, is a day 1 self.leave1_start = datetime.strptime('2013-02-19 09:00:00', '%Y-%m-%d %H:%M:%S') self.leave1_end = datetime.strptime('2013-02-19 12:00:00', '%Y-%m-%d %H:%M:%S') - # Leave2: 22/02/2013, from 9 to 15, is a day 3 + # Leave2: 22/02/2013, from 9 to 15, is a day 4 self.leave2_start = datetime.strptime('2013-02-22 09:00:00', '%Y-%m-%d %H:%M:%S') self.leave2_end = datetime.strptime('2013-02-22 15:00:00', '%Y-%m-%d %H:%M:%S') - # Leave3: 25/02/2013 (day6) -> 01/03/2013 (day3) + # Leave3: 25/02/2013 (day0) -> 01/03/2013 (day4) self.leave3_start = datetime.strptime('2013-02-25 13:00:00', '%Y-%m-%d %H:%M:%S') self.leave3_end = datetime.strptime('2013-03-01 11:30:00', '%Y-%m-%d %H:%M:%S') diff --git a/addons/resource/tests/test_resource.py b/addons/resource/tests/test_resource.py index fa29de91b3d..7ae4343a21f 100644 --- a/addons/resource/tests/test_resource.py +++ b/addons/resource/tests/test_resource.py @@ -19,7 +19,7 @@ # ############################################################################## -from datetime import datetime +from datetime import datetime, timedelta from dateutil.relativedelta import relativedelta from openerp.addons.resource.tests.common import TestResourceCommon @@ -51,17 +51,17 @@ class TestResource(TestResourceCommon): ] # Test: interval cleaning - result = self.resource_calendar.interval_clean(intervals) - self.assertEqual(len(result), 3, 'resource_calendar: wrong interval cleaning') + cleaned_intervals = self.resource_calendar.interval_clean(intervals) + self.assertEqual(len(cleaned_intervals), 3, 'resource_calendar: wrong interval cleaning') # First interval: 03, unchanged - self.assertEqual(result[0][0], datetime.strptime('2013-02-03 08:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong interval cleaning') - self.assertEqual(result[0][1], datetime.strptime('2013-02-03 10:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong interval cleaning') + self.assertEqual(cleaned_intervals[0][0], datetime.strptime('2013-02-03 08:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong interval cleaning') + self.assertEqual(cleaned_intervals[0][1], datetime.strptime('2013-02-03 10:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong interval cleaning') # Second intreval: 04, 08-14, combining 08-12 and 11-14, 09-11 being inside 08-12 - self.assertEqual(result[1][0], datetime.strptime('2013-02-04 08:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong interval cleaning') - self.assertEqual(result[1][1], datetime.strptime('2013-02-04 14:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong interval cleaning') + self.assertEqual(cleaned_intervals[1][0], datetime.strptime('2013-02-04 08:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong interval cleaning') + self.assertEqual(cleaned_intervals[1][1], datetime.strptime('2013-02-04 14:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong interval cleaning') # Third interval: 04, 17-21, 18-19 being inside 17-21 - self.assertEqual(result[2][0], datetime.strptime('2013-02-04 17:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong interval cleaning') - self.assertEqual(result[2][1], datetime.strptime('2013-02-04 21:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong interval cleaning') + self.assertEqual(cleaned_intervals[2][0], datetime.strptime('2013-02-04 17:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong interval cleaning') + self.assertEqual(cleaned_intervals[2][1], datetime.strptime('2013-02-04 21:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong interval cleaning') # Test: disjoint removal working_interval = (datetime.strptime('2013-02-04 08:00:00', '%Y-%m-%d %H:%M:%S'), datetime.strptime('2013-02-04 18:00:00', '%Y-%m-%d %H:%M:%S')) @@ -71,6 +71,27 @@ class TestResource(TestResourceCommon): self.assertEqual(result[0][0], datetime.strptime('2013-02-04 14:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong leave removal from interval') self.assertEqual(result[0][1], datetime.strptime('2013-02-04 17:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong leave removal from interval') + # Test: schedule hours on intervals + result = self.resource_calendar.interval_schedule_hours(cleaned_intervals, 5.5) + self.assertEqual(len(result), 2, 'resource_calendar: wrong hours scheduling in interval') + # First interval: 03, 8-10 untouches + self.assertEqual(result[0][0], datetime.strptime('2013-02-03 08:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong leave removal from interval') + self.assertEqual(result[0][1], datetime.strptime('2013-02-03 10:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong leave removal from interval') + # First interval: 04, 08-11:30 + self.assertEqual(result[1][0], datetime.strptime('2013-02-04 08:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong leave removal from interval') + self.assertEqual(result[1][1], datetime.strptime('2013-02-04 11:30:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong leave removal from interval') + + # Test: schedule hours on intervals, backwards + cleaned_intervals.reverse() + result = self.resource_calendar.interval_schedule_hours(cleaned_intervals, 5.5, remove_at_end=False) + self.assertEqual(len(result), 2, 'resource_calendar: wrong hours scheduling in interval') + # First interval: 03, 8-10 untouches + self.assertEqual(result[0][0], datetime.strptime('2013-02-04 17:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong leave removal from interval') + self.assertEqual(result[0][1], datetime.strptime('2013-02-04 21:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong leave removal from interval') + # First interval: 04, 08-11:30 + self.assertEqual(result[1][0], datetime.strptime('2013-02-04 12:30:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong leave removal from interval') + self.assertEqual(result[1][1], datetime.strptime('2013-02-04 14:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong leave removal from interval') + def test_10_calendar_basics(self): """ Testing basic method of resource.calendar """ cr, uid = self.cr, self.uid @@ -80,110 +101,289 @@ class TestResource(TestResourceCommon): # -------------------------------------------------- # Test: next day: next day after day1 is day4 - date = self.resource_calendar.get_next_day(cr, uid, self.calendar_id, day_date=self.date1) - self.assertEqual(date, self.date2, 'resource_calendar: wrong next day computing') + date = self.resource_calendar.get_next_day(cr, uid, self.calendar_id, day_date=self.date1.date()) + self.assertEqual(date, self.date2.date(), 'resource_calendar: wrong next day computing') # Test: next day: next day after day4 is (day1+7) - date = self.resource_calendar.get_next_day(cr, uid, self.calendar_id, day_date=self.date2) - self.assertEqual(date, self.date1 + relativedelta(days=7), 'resource_calendar: wrong next day computing') + date = self.resource_calendar.get_next_day(cr, uid, self.calendar_id, day_date=self.date2.date()) + self.assertEqual(date, self.date1.date() + relativedelta(days=7), 'resource_calendar: wrong next day computing') # Test: next day: next day after day4+1 is (day1+7) - date = self.resource_calendar.get_next_day(cr, uid, self.calendar_id, day_date=self.date2 + relativedelta(days=1)) - self.assertEqual(date, self.date1 + relativedelta(days=7), 'resource_calendar: wrong next day computing') + date = self.resource_calendar.get_next_day(cr, uid, self.calendar_id, day_date=self.date2.date() + relativedelta(days=1)) + self.assertEqual(date, self.date1.date() + relativedelta(days=7), 'resource_calendar: wrong next day computing') # Test: next day: next day after day1-1 is day1 - date = self.resource_calendar.get_next_day(cr, uid, self.calendar_id, day_date=self.date1 + relativedelta(days=-1)) - self.assertEqual(date, self.date1, 'resource_calendar: wrong next day computing') + date = self.resource_calendar.get_next_day(cr, uid, self.calendar_id, day_date=self.date1.date() + relativedelta(days=-1)) + self.assertEqual(date, self.date1.date(), 'resource_calendar: wrong next day computing') # -------------------------------------------------- # Test2: get_previous_day # -------------------------------------------------- # Test: previous day: previous day before day1 is (day4-7) - date = self.resource_calendar.get_previous_day(cr, uid, self.calendar_id, day_date=self.date1) - self.assertEqual(date, self.date2 + relativedelta(days=-7), 'resource_calendar: wrong previous day computing') + date = self.resource_calendar.get_previous_day(cr, uid, self.calendar_id, day_date=self.date1.date()) + self.assertEqual(date, self.date2.date() + relativedelta(days=-7), 'resource_calendar: wrong previous day computing') # Test: previous day: previous day before day4 is day1 - date = self.resource_calendar.get_previous_day(cr, uid, self.calendar_id, day_date=self.date2) - self.assertEqual(date, self.date1, 'resource_calendar: wrong previous day computing') + date = self.resource_calendar.get_previous_day(cr, uid, self.calendar_id, day_date=self.date2.date()) + self.assertEqual(date, self.date1.date(), 'resource_calendar: wrong previous day computing') # Test: previous day: previous day before day4+1 is day4 - date = self.resource_calendar.get_previous_day(cr, uid, self.calendar_id, day_date=self.date2 + relativedelta(days=1)) - self.assertEqual(date, self.date2, 'resource_calendar: wrong previous day computing') + date = self.resource_calendar.get_previous_day(cr, uid, self.calendar_id, day_date=self.date2.date() + relativedelta(days=1)) + self.assertEqual(date, self.date2.date(), 'resource_calendar: wrong previous day computing') # Test: previous day: previous day before day1-1 is (day4-7) - date = self.resource_calendar.get_previous_day(cr, uid, self.calendar_id, day_date=self.date1 + relativedelta(days=-1)) - self.assertEqual(date, self.date2 + relativedelta(days=-7), 'resource_calendar: wrong previous day computing') + date = self.resource_calendar.get_previous_day(cr, uid, self.calendar_id, day_date=self.date1.date() + relativedelta(days=-1)) + self.assertEqual(date, self.date2.date() + relativedelta(days=-7), 'resource_calendar: wrong previous day computing') + + # -------------------------------------------------- + # Test3: misc + # -------------------------------------------------- + + weekdays = self.resource_calendar.get_weekdays(cr, uid, self.calendar_id) + self.assertEqual(weekdays, [1, 4], 'resource_calendar: wrong weekdays computing') + + attendances = self.resource_calendar.get_attendances_for_weekdays(cr, uid, self.calendar_id, [2, 3, 4, 5]) + self.assertEqual(set([att.id for att in attendances]), set([self.att2_id, self.att3_id]), + 'resource_calendar: wrong attendances filtering by weekdays computing') def test_20_calendar_working_intervals(self): """ Testing working intervals computing method of resource.calendar """ cr, uid = self.cr, self.uid + _format = '%Y-%m-%d %H:%M:%S' # Test: day0 without leaves: 1 interval - intervals = self.resource_calendar.get_working_intervals_of_day(cr, uid, self.calendar_id, day_date=self.date1) + intervals = self.resource_calendar.get_working_intervals_of_day(cr, uid, self.calendar_id, start_dt=self.date1) self.assertEqual(len(intervals), 1, 'resource_calendar: wrong working intervals') - self.assertEqual(intervals[0][0], datetime.strptime('2013-02-12 08:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong working intervals') - self.assertEqual(intervals[0][1], datetime.strptime('2013-02-12 16:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong working intervals') + self.assertEqual(intervals[0][0], datetime.strptime('2013-02-12 09:08:07', _format), 'resource_calendar: wrong working intervals') + self.assertEqual(intervals[0][1], datetime.strptime('2013-02-12 16:00:00', _format), 'resource_calendar: wrong working intervals') # Test: day3 without leaves: 2 interval - intervals = self.resource_calendar.get_working_intervals_of_day(cr, uid, self.calendar_id, day_date=self.date2) + intervals = self.resource_calendar.get_working_intervals_of_day(cr, uid, self.calendar_id, start_dt=self.date2) self.assertEqual(len(intervals), 2, 'resource_calendar: wrong working intervals') - self.assertEqual(intervals[0][0], datetime.strptime('2013-02-15 08:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong working intervals') - self.assertEqual(intervals[0][1], datetime.strptime('2013-02-15 13:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong working intervals') - self.assertEqual(intervals[1][0], datetime.strptime('2013-02-15 16:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong working intervals') - self.assertEqual(intervals[1][1], datetime.strptime('2013-02-15 23:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong working intervals') + self.assertEqual(intervals[0][0], datetime.strptime('2013-02-15 10:11:12', _format), 'resource_calendar: wrong working intervals') + self.assertEqual(intervals[0][1], datetime.strptime('2013-02-15 13:00:00', _format), 'resource_calendar: wrong working intervals') + self.assertEqual(intervals[1][0], datetime.strptime('2013-02-15 16:00:00', _format), 'resource_calendar: wrong working intervals') + self.assertEqual(intervals[1][1], datetime.strptime('2013-02-15 23:00:00', _format), 'resource_calendar: wrong working intervals') # Test: day0 with leaves outside range: 1 interval - intervals = self.resource_calendar.get_working_intervals_of_day(cr, uid, self.calendar_id, day_date=self.date1, compute_leaves=True) + intervals = self.resource_calendar.get_working_intervals_of_day(cr, uid, self.calendar_id, start_dt=self.date1.replace(hour=0), compute_leaves=True) self.assertEqual(len(intervals), 1, 'resource_calendar: wrong working intervals') - self.assertEqual(intervals[0][0], datetime.strptime('2013-02-12 08:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong working intervals') - self.assertEqual(intervals[0][1], datetime.strptime('2013-02-12 16:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong working intervals') + self.assertEqual(intervals[0][0], datetime.strptime('2013-02-12 08:00:00', _format), 'resource_calendar: wrong working intervals') + self.assertEqual(intervals[0][1], datetime.strptime('2013-02-12 16:00:00', _format), 'resource_calendar: wrong working intervals') - # Test: day0 with leaves: 2 intrevals because of leave between 9 ans 12 - intervals = self.resource_calendar.get_working_intervals_of_day(cr, uid, self.calendar_id, day_date=self.date1 + relativedelta(days=7), compute_leaves=True) + # Test: day0 with leaves: 2 intervals because of leave between 9 ans 12, ending at 15:45:30 + intervals = self.resource_calendar.get_working_intervals_of_day(cr, uid, self.calendar_id, + start_dt=self.date1.replace(hour=8) + relativedelta(days=7), + end_dt=self.date1.replace(hour=15, minute=45, second=30) + relativedelta(days=7), + compute_leaves=True) self.assertEqual(len(intervals), 2, 'resource_calendar: wrong working intervals') - self.assertEqual(intervals[0][0], datetime.strptime('2013-02-19 08:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong working intervals') - self.assertEqual(intervals[0][1], datetime.strptime('2013-02-19 09:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong working intervals') - self.assertEqual(intervals[1][0], datetime.strptime('2013-02-19 12:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong working intervals') - self.assertEqual(intervals[1][1], datetime.strptime('2013-02-19 16:00:00', '%Y-%m-%d %H:%M:%S'), 'resource_calendar: wrong working intervals') + self.assertEqual(intervals[0][0], datetime.strptime('2013-02-19 08:08:07', _format), 'resource_calendar: wrong working intervals') + self.assertEqual(intervals[0][1], datetime.strptime('2013-02-19 09:00:00', _format), 'resource_calendar: wrong working intervals') + self.assertEqual(intervals[1][0], datetime.strptime('2013-02-19 12:00:00', _format), 'resource_calendar: wrong working intervals') + self.assertEqual(intervals[1][1], datetime.strptime('2013-02-19 15:45:30', _format), 'resource_calendar: wrong working intervals') + + def test_30_calendar_working_days(self): + """ Testing calendar hours computation on a working day """ + cr, uid = self.cr, self.uid + _format = '%Y-%m-%d %H:%M:%S' + + # Test: day1, beginning at 10:30 -> work from 10:30 (arrival) until 16:00 + intervals = self.resource_calendar.get_working_intervals_of_day(cr, uid, self.calendar_id, start_dt=self.date1.replace(hour=10, minute=30, second=0)) + self.assertEqual(len(intervals), 1, 'resource_calendar: wrong working interval / day computing') + self.assertEqual(intervals[0][0], datetime.strptime('2013-02-12 10:30:00', _format), 'resource_calendar: wrong working interval / day computing') + self.assertEqual(intervals[0][1], datetime.strptime('2013-02-12 16:00:00', _format), 'resource_calendar: wrong working interval / day computing') + # Test: hour computation for same interval, should give 5.5 + wh = self.resource_calendar.get_working_hours_of_date(cr, uid, self.calendar_id, start_dt=self.date1.replace(hour=10, minute=30, second=0)) + self.assertEqual(wh, 5.5, 'resource_calendar: wrong working interval / day time computing') + + # Test: day1+7 on leave, without leave computation + intervals = self.resource_calendar.get_working_intervals_of_day( + cr, uid, self.calendar_id, + start_dt=self.date1.replace(hour=7, minute=0, second=0) + relativedelta(days=7) + ) + # Result: day1 (08->16) + self.assertEqual(len(intervals), 1, 'resource_calendar: wrong working interval/day computing') + self.assertEqual(intervals[0][0], datetime.strptime('2013-02-19 08:00:00', _format), 'resource_calendar: wrong working interval / day computing') + self.assertEqual(intervals[0][1], datetime.strptime('2013-02-19 16:00:00', _format), 'resource_calendar: wrong working interval / day computing') + + # Test: day1+7 on leave, with generic leave computation + intervals = self.resource_calendar.get_working_intervals_of_day( + cr, uid, self.calendar_id, + start_dt=self.date1.replace(hour=7, minute=0, second=0) + relativedelta(days=7), + compute_leaves=True + ) + # Result: day1 (08->09 + 12->16) + self.assertEqual(len(intervals), 2, 'resource_calendar: wrong working interval/day computing') + self.assertEqual(intervals[0][0], datetime.strptime('2013-02-19 08:00:00', _format), 'resource_calendar: wrong working interval / day computing') + self.assertEqual(intervals[0][1], datetime.strptime('2013-02-19 09:00:00', _format), 'resource_calendar: wrong working interval / day computing') + self.assertEqual(intervals[1][0], datetime.strptime('2013-02-19 12:00:00', _format), 'resource_calendar: wrong working interval / day computing') + self.assertEqual(intervals[1][1], datetime.strptime('2013-02-19 16:00:00', _format), 'resource_calendar: wrong working interval / day computing') + + # Test: day1+14 on leave, with generic leave computation + intervals = self.resource_calendar.get_working_intervals_of_day( + cr, uid, self.calendar_id, + start_dt=self.date1.replace(hour=7, minute=0, second=0) + relativedelta(days=14), + compute_leaves=True + ) + # Result: day1 (08->16) + self.assertEqual(len(intervals), 1, 'resource_calendar: wrong working interval/day computing') + self.assertEqual(intervals[0][0], datetime.strptime('2013-02-26 08:00:00', _format), 'resource_calendar: wrong working interval / day computing') + self.assertEqual(intervals[0][1], datetime.strptime('2013-02-26 16:00:00', _format), 'resource_calendar: wrong working interval / day computing') + + # Test: day1+14 on leave, with resource leave computation + intervals = self.resource_calendar.get_working_intervals_of_day( + cr, uid, self.calendar_id, + start_dt=self.date1.replace(hour=7, minute=0, second=0) + relativedelta(days=14), + compute_leaves=True, + resource_id=self.resource1_id + ) + # Result: nothing, because on leave + self.assertEqual(len(intervals), 0, 'resource_calendar: wrong working interval/day computing') + + def test_40_calendar_hours_scheduling(self): + """ Testing calendar hours scheduling """ + cr, uid = self.cr, self.uid + _format = '%Y-%m-%d %H:%M:%S' + + # -------------------------------------------------- + # Test0: schedule hours backwards (old interval_min_get) + # Done without calendar + # -------------------------------------------------- + + # Done without calendar + # res = self.resource_calendar.interval_min_get(cr, uid, None, self.date1, 40, resource=False) + # res: (datetime.datetime(2013, 2, 7, 9, 8, 7), datetime.datetime(2013, 2, 12, 9, 8, 7)) + + # -------------------------------------------------- + # Test1: schedule hours backwards (old interval_min_get) + # -------------------------------------------------- + + # res = self.resource_calendar.interval_min_get(cr, uid, self.calendar_id, self.date1, 40, resource=False) + # (datetime.datetime(2013, 1, 29, 9, 0), datetime.datetime(2013, 1, 29, 16, 0)) + # (datetime.datetime(2013, 2, 1, 8, 0), datetime.datetime(2013, 2, 1, 13, 0)) + # (datetime.datetime(2013, 2, 1, 16, 0), datetime.datetime(2013, 2, 1, 23, 0)) + # (datetime.datetime(2013, 2, 5, 8, 0), datetime.datetime(2013, 2, 5, 16, 0)) + # (datetime.datetime(2013, 2, 8, 8, 0), datetime.datetime(2013, 2, 8, 13, 0)) + # (datetime.datetime(2013, 2, 8, 16, 0), datetime.datetime(2013, 2, 8, 23, 0)) + # (datetime.datetime(2013, 2, 12, 8, 0), datetime.datetime(2013, 2, 12, 9, 0)) + + res = self.resource_calendar.schedule_hours(cr, uid, self.calendar_id, -40, day_dt=self.date1.replace(minute=0, second=0)) + # current day, limited at 09:00 because of day_dt specified -> 1 hour + self.assertEqual(res[-1][0], datetime.strptime('2013-02-12 08:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[-1][1], datetime.strptime('2013-02-12 09:00:00', _format), 'resource_calendar: wrong hours scheduling') + # previous days: 5+7 hours / 8 hours / 5+7 hours -> 32 hours + self.assertEqual(res[-2][0], datetime.strptime('2013-02-08 16:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[-2][1], datetime.strptime('2013-02-08 23:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[-3][0], datetime.strptime('2013-02-08 08:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[-3][1], datetime.strptime('2013-02-08 13:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[-4][0], datetime.strptime('2013-02-05 08:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[-4][1], datetime.strptime('2013-02-05 16:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[-5][0], datetime.strptime('2013-02-01 16:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[-5][1], datetime.strptime('2013-02-01 23:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[-6][0], datetime.strptime('2013-02-01 08:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[-6][1], datetime.strptime('2013-02-01 13:00:00', _format), 'resource_calendar: wrong hours scheduling') + # 7 hours remaining + self.assertEqual(res[-7][0], datetime.strptime('2013-01-29 09:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[-7][1], datetime.strptime('2013-01-29 16:00:00', _format), 'resource_calendar: wrong hours scheduling') + # Compute scheduled hours + td = timedelta() + for item in res: + td += item[1] - item[0] + self.assertEqual(td.total_seconds() / 3600.0, 40.0, 'resource_calendar: wrong hours scheduling') + + # -------------------------------------------------- + # Test1: schedule hours forward (old interval_get) + # -------------------------------------------------- + + # res = self.resource_calendar.interval_get(cr, uid, self.calendar_id, self.date1, 40, resource=False, byday=True) + # (datetime.datetime(2013, 2, 12, 9, 0), datetime.datetime(2013, 2, 12, 16, 0)) + # (datetime.datetime(2013, 2, 15, 8, 0), datetime.datetime(2013, 2, 15, 13, 0)) + # (datetime.datetime(2013, 2, 15, 16, 0), datetime.datetime(2013, 2, 15, 23, 0)) + # (datetime.datetime(2013, 2, 22, 8, 0), datetime.datetime(2013, 2, 22, 13, 0)) + # (datetime.datetime(2013, 2, 22, 16, 0), datetime.datetime(2013, 2, 22, 23, 0)) + # (datetime.datetime(2013, 2, 26, 8, 0), datetime.datetime(2013, 2, 26, 16, 0)) + # (datetime.datetime(2013, 3, 1, 8, 0), datetime.datetime(2013, 3, 1, 9, 0)) + + res = self.resource_calendar.schedule_hours( + cr, uid, self.calendar_id, 40, + day_dt=self.date1.replace(minute=0, second=0) + ) + self.assertEqual(res[0][0], datetime.strptime('2013-02-12 09:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[0][1], datetime.strptime('2013-02-12 16:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[1][0], datetime.strptime('2013-02-15 08:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[1][1], datetime.strptime('2013-02-15 13:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[2][0], datetime.strptime('2013-02-15 16:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[2][1], datetime.strptime('2013-02-15 23:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[3][0], datetime.strptime('2013-02-19 08:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[3][1], datetime.strptime('2013-02-19 16:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[4][0], datetime.strptime('2013-02-22 08:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[4][1], datetime.strptime('2013-02-22 13:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[5][0], datetime.strptime('2013-02-22 16:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[5][1], datetime.strptime('2013-02-22 23:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[6][0], datetime.strptime('2013-02-26 08:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[6][1], datetime.strptime('2013-02-26 09:00:00', _format), 'resource_calendar: wrong hours scheduling') + td = timedelta() + for item in res: + td += item[1] - item[0] + self.assertEqual(td.total_seconds() / 3600.0, 40.0, 'resource_calendar: wrong hours scheduling') + + # res = self.resource_calendar.interval_get(cr, uid, self.calendar_id, self.date1, 40, resource=self.resource1_id, byday=True) + # (datetime.datetime(2013, 2, 12, 9, 0), datetime.datetime(2013, 2, 12, 16, 0)) + # (datetime.datetime(2013, 2, 15, 8, 0), datetime.datetime(2013, 2, 15, 13, 0)) + # (datetime.datetime(2013, 2, 15, 16, 0), datetime.datetime(2013, 2, 15, 23, 0)) + # (datetime.datetime(2013, 3, 1, 8, 0), datetime.datetime(2013, 3, 1, 13, 0)) + # (datetime.datetime(2013, 3, 1, 16, 0), datetime.datetime(2013, 3, 1, 23, 0)) + # (datetime.datetime(2013, 3, 5, 8, 0), datetime.datetime(2013, 3, 5, 16, 0)) + # (datetime.datetime(2013, 3, 8, 8, 0), datetime.datetime(2013, 3, 8, 9, 0)) + + res = self.resource_calendar.schedule_hours( + cr, uid, self.calendar_id, 40, + day_dt=self.date1.replace(minute=0, second=0), + compute_leaves=True, + resource_id=self.resource1_id + ) + self.assertEqual(res[0][0], datetime.strptime('2013-02-12 09:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[0][1], datetime.strptime('2013-02-12 16:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[1][0], datetime.strptime('2013-02-15 08:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[1][1], datetime.strptime('2013-02-15 13:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[2][0], datetime.strptime('2013-02-15 16:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[2][1], datetime.strptime('2013-02-15 23:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[3][0], datetime.strptime('2013-02-19 08:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[3][1], datetime.strptime('2013-02-19 09:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[4][0], datetime.strptime('2013-02-19 12:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[4][1], datetime.strptime('2013-02-19 16:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[5][0], datetime.strptime('2013-02-22 08:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[5][1], datetime.strptime('2013-02-22 09:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[6][0], datetime.strptime('2013-02-22 16:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[6][1], datetime.strptime('2013-02-22 23:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[7][0], datetime.strptime('2013-03-01 11:30:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[7][1], datetime.strptime('2013-03-01 13:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[8][0], datetime.strptime('2013-03-01 16:00:00', _format), 'resource_calendar: wrong hours scheduling') + self.assertEqual(res[8][1], datetime.strptime('2013-03-01 22:30:00', _format), 'resource_calendar: wrong hours scheduling') + td = timedelta() + for item in res: + td += item[1] - item[0] + self.assertEqual(td.total_seconds() / 3600.0, 40.0, 'resource_calendar: wrong hours scheduling') def test_40_calendar_schedule_days(self): """ Testing calendar days scheduling """ cr, uid = self.cr, self.uid + _format = '%Y-%m-%d %H:%M:%S' - print '---------------' - res = self.resource_calendar.schedule_days(cr, uid, self.calendar_id, 5, date=self.date1) - print res + res = self.resource_calendar.schedule_days_get_date(cr, uid, self.calendar_id, 5, day_date=self.date1) + self.assertEqual(res, datetime.strptime('2013-02-26 00:0:00', _format).date(), 'resource_calendar: wrong days scheduling') + + res = self.resource_calendar.schedule_days_get_date( + cr, uid, self.calendar_id, 5, day_date=self.date1, + compute_leaves=True, resource_id=self.resource1_id) + self.assertEqual(res, datetime.strptime('2013-03-01 00:0:00', _format).date(), 'resource_calendar: wrong days scheduling') # -------------------------------------------------- # Misc # -------------------------------------------------- - # Without calendar, should only count days - print '---------------' - res = self.resource_calendar.schedule_days(cr, uid, None, 5, date=self.date1) - print res - - # @mute_logger('openerp.addons.base.ir.ir_model', 'openerp.osv.orm') - # def test_20_calendar(self): - # """ Testing calendar and time computation """ - # cr, uid = self.cr, self.uid - - # wh = self.resource_calendar.get_working_hours_of_date(cr, uid, self.calendar_id, day_date=self.date1) - # self.assertEqual(wh, 8, 'cacamou') - - # wh = self.resource_calendar.get_working_hours_of_date(cr, uid, self.calendar_id, day_date=self.date2+relativedelta(days=7)) - # self.assertEqual(wh, 12, 'cacamou') - - # # print '---------------------' - # # print self.date1 - # # res = self.resource_calendar.interval_min_get(cr, uid, self.calendar_id, self.date1, 40, resource=False) - # # print res - - # print '----------------------' - # res = self.resource_calendar.schedule_hours(cr, uid, self.calendar_id, 40, start_datetime=self.date1) - # print res - # print '----------------------' - # # print self.date1 - # # res = self.resource_calendar.interval_get(cr, uid, self.calendar_id, self.date1, 40, resource=False, byday=True) - # # print res + # # Without calendar, should only count days + # print '---------------' + # res = self.resource_calendar.schedule_days_get_date(cr, uid, None, 5, day_date=self.date1) + # print res From 53fe285259a613f152f7cd8b57c3026324da9b49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 30 Aug 2013 16:16:10 +0200 Subject: [PATCH 05/20] [IMP] resource: old API replacement + first implementation of compute_hours, to compute the number of working hours between two dates. bzr revid: tde@openerp.com-20130830141610-uu1t88atcvpmkjjb --- addons/resource/resource.py | 234 +++---------------------- addons/resource/tests/test_resource.py | 14 +- 2 files changed, 41 insertions(+), 207 deletions(-) diff --git a/addons/resource/resource.py b/addons/resource/resource.py index c8635a01d0c..f43908f98e8 100644 --- a/addons/resource/resource.py +++ b/addons/resource/resource.py @@ -422,6 +422,14 @@ class resource_calendar(osv.osv): scheduling. """ return self._schedule_hours(cr, uid, id, hours, day_dt, compute_leaves, resource_id, context) + def get_working_hours(self, cr, uid, id, start_dt, end_dt, compute_leaves=False, resource_id=None, context=None): + hours = 0.0 + for day in rrule.rrule(rrule.DAILY, dtstart=start_dt, + until=end_dt + datetime.timedelta(days=1), + byweekday=self.get_weekdays(cr, uid, id, context=context)): + hours += self.get_working_hours_of_date(cr, uid, id, start_dt=day, compute_leaves=compute_leaves, resource_id=resource_id) + return hours + def _schedule_days(self, cr, uid, id, days, day_date=None, compute_leaves=False, resource_id=None, context=None): """Schedule days of work, using a calendar and an optional resource to compute working and leave days. This method can be used backwards, i.e. @@ -484,7 +492,7 @@ class resource_calendar(osv.osv): return self._schedule_days(cr, uid, id, days, day_date, compute_leaves, resource_id, context) # -------------------------------------------------- - # Compaqtibility / to clean / to remove + # Compatibility / to clean / to remove # -------------------------------------------------- def working_hours_on_day(self, cr, uid, resource_calendar_id, day, context=None): @@ -497,31 +505,6 @@ class resource_calendar(osv.osv): day = day.replace(hour=0, minute=0) return self.get_working_hours_of_date(cr, uid, resource_calendar_id.id, start_dt=day, context=None) - def _get_leaves(self, cr, uid, id, resource): - """Private Method to Calculate resource Leaves days - - @param id: resource calendar id - @param resource: resource id for which leaves will ew calculated - - @return : returns the list of dates, where resource on leave in - resource.calendar.leaves object (e.g.['%Y-%m-%d', '%Y-%m-%d']) - TDE TODO: internal only - """ - resource_cal_leaves = self.pool.get('resource.calendar.leaves') - dt_leave = [] - resource_leave_ids = resource_cal_leaves.search(cr, uid, [('calendar_id','=',id), '|', ('resource_id','=',False), ('resource_id','=',resource)]) - #res_leaves = resource_cal_leaves.read(cr, uid, resource_leave_ids, ['date_from', 'date_to']) - res_leaves = resource_cal_leaves.browse(cr, uid, resource_leave_ids) - - for leave in res_leaves: - dtf = datetime.datetime.strptime(leave.date_from, '%Y-%m-%d %H:%M:%S') - dtt = datetime.datetime.strptime(leave.date_to, '%Y-%m-%d %H:%M:%S') - no = dtt - dtf - [dt_leave.append((dtf + datetime.timedelta(days=x)).strftime('%Y-%m-%d')) for x in range(int(no.days + 1))] - dt_leave.sort() - - return dt_leave - def interval_min_get(self, cr, uid, id, dt_from, hours, resource=False): """ Calculates the working Schedule from supplied from date to till hours @@ -540,98 +523,29 @@ class resource_calendar(osv.osv): TDE TODO: used in mrp_operations/mrp_operations.py TDE NOTE: do not count leave hours, a leave is considered all-day + TDE UPDATE: now count leave hours """ - if not id: - td = int(hours)*3 - return [(dt_from - datetime.timedelta(hours=td), dt_from)] - dt_leave = self._get_leaves(cr, uid, id, resource) - dt_leave.reverse() - todo = hours - result = [] - maxrecur = 100 - current_hour = dt_from.hour - while float_compare(todo, 0, 4) and maxrecur: - cr.execute("select hour_from,hour_to from resource_calendar_attendance where dayofweek='%s' and calendar_id=%s order by hour_from desc", (dt_from.weekday(),id)) - for (hour_from,hour_to) in cr.fetchall(): - leave_flag = False - if (hour_fromtodo: - hour_from = m-todo - dt_check = dt_from.strftime('%Y-%m-%d') - for leave in dt_leave: - if dt_check == leave: - dt_check = datetime.datetime.strptime(dt_check, '%Y-%m-%d') + datetime.timedelta(days=1) - leave_flag = True - if leave_flag: - break - else: - d1 = datetime.datetime(dt_from.year, dt_from.month, dt_from.day, int(math.floor(hour_from)), int((hour_from%1) * 60)) - d2 = datetime.datetime(dt_from.year, dt_from.month, dt_from.day, int(math.floor(m)), int((m%1) * 60)) - result.append((d1, d2)) - current_hour = hour_from - todo -= (m-hour_from) - dt_from -= datetime.timedelta(days=1) - current_hour = 24 - maxrecur -= 1 - result.reverse() - return result + return self.schedule_hours( + cr, uid, id, hours * -1.0, + day_dt=dt_from.replace(minute=0, second=0), + compute_leaves=True, resource_id=resource + ) - # def interval_get(self, cr, uid, id, dt_from, hours, resource=False, byday=True): def interval_get_multi(self, cr, uid, date_and_hours_by_cal, resource=False, byday=True): """ TDE NOTE: used in mrp_operations/mrp_operations.py (default parameters) and in interval_get() TDE NOTE: byday is not used in this method... TDE NOTE: do not count leave hours, a leave is considered all-day + TDE UPDATE: now count leave hours """ - def group(lst, key): - lst.sort(key=itemgetter(key)) - grouped = itertools.groupby(lst, itemgetter(key)) - return dict([(k, [v for v in itr]) for k, itr in grouped]) - # END group - - cr.execute("select calendar_id, dayofweek, hour_from, hour_to from resource_calendar_attendance order by hour_from") - hour_res = cr.dictfetchall() - hours_by_cal = group(hour_res, 'calendar_id') - - results = {} - - for d, hours, id in date_and_hours_by_cal: - dt_from = datetime.datetime.strptime(d, '%Y-%m-%d %H:%M:%S') - if not id: - td = int(hours)*3 - results[(d, hours, id)] = [(dt_from, dt_from + datetime.timedelta(hours=td))] - continue - - dt_leave = self._get_leaves(cr, uid, id, resource) - todo = hours - result = [] - maxrecur = 100 - current_hour = dt_from.hour - while float_compare(todo, 0, 4) and maxrecur: - for (hour_from,hour_to) in [(item['hour_from'], item['hour_to']) for item in hours_by_cal[id] if item['dayofweek'] == str(dt_from.weekday())]: - leave_flag = False - if (hour_to>current_hour) and float_compare(todo, 0, 4): - m = max(hour_from, current_hour) - if (hour_to-m)>todo: - hour_to = m+todo - dt_check = dt_from.strftime('%Y-%m-%d') - for leave in dt_leave: - if dt_check == leave: - dt_check = datetime.datetime.strptime(dt_check, '%Y-%m-%d') + datetime.timedelta(days=1) - leave_flag = True - if leave_flag: - break - else: - d1 = datetime.datetime(dt_from.year, dt_from.month, dt_from.day, int(math.floor(m)), int((m%1) * 60)) - d2 = datetime.datetime(dt_from.year, dt_from.month, dt_from.day, int(math.floor(hour_to)), int((hour_to%1) * 60)) - result.append((d1, d2)) - current_hour = hour_to - todo -= (hour_to - m) - dt_from += datetime.timedelta(days=1) - current_hour = 0 - maxrecur -= 1 - results[(d, hours, id)] = result - return results + res = {} + for dt_str, hours, calendar_id in date_and_hours_by_cal: + result = self.schedule_hours( + cr, uid, calendar_id, hours, + day_dt=datetime.datetime.strptime(dt_str, '%Y-%m-%d %H:%M:%S').replace(minute=0, second=0), + compute_leaves=True, resource_id=resource + ) + res[(dt_str, hours, calendar_id)] = result + return res def interval_get(self, cr, uid, id, dt_from, hours, resource=False, byday=True): """Calculates Resource Working Internal Timing Based on Resource Calendar. @@ -650,18 +564,7 @@ class resource_calendar(osv.osv): return res def interval_hours_get(self, cr, uid, id, dt_from, dt_to, resource=False): - """ Calculates the Total Working hours based on given start_date to - end_date, If resource id is supplied that it will consider the source - leaves also in calculating the hours. - - @param dt_from : date start to calculate hours - @param dt_end : date end to calculate hours - @param resource: optional resource id, If given resource leave will be - considered. - - @return : Total number of working hours based dt_from and dt_end and - resource if supplied. - """ + """ Unused wrapper """ return self._interval_hours_get(cr, uid, id, dt_from, dt_to, resource_id=resource) def _interval_hours_get(self, cr, uid, id, dt_from, dt_to, resource_id=False, timezone_from_uid=None, exclude_leaves=True, context=None): @@ -683,90 +586,9 @@ class resource_calendar(osv.osv): TDE NOTE: used in project_issue/project_issue.py TDE NOTE: day-long leaves + TDE UPDATE: timezone_from_uid not yet supported """ - utc_tz = pytz.timezone('UTC') - local_tz = utc_tz - - if timezone_from_uid: - users_obj = self.pool.get('res.users') - user_timezone = users_obj.browse(cr, uid, timezone_from_uid, context=context).partner_id.tz - if user_timezone: - try: - local_tz = pytz.timezone(user_timezone) - except pytz.UnknownTimeZoneError: - pass # fallback to UTC as local timezone - - def utc_to_local_zone(naive_datetime): - utc_dt = utc_tz.localize(naive_datetime, is_dst=False) - return utc_dt.astimezone(local_tz) - - def float_time_convert(float_val): - factor = float_val < 0 and -1 or 1 - val = abs(float_val) - return (factor * int(math.floor(val)), int(round((val % 1) * 60))) - - # Get slots hours per day - # {day_of_week: [(8, 12), (13, 17), ...], ...} - hours_range_per_weekday = {} - if id: - cr.execute("select dayofweek, hour_from,hour_to from resource_calendar_attendance where calendar_id=%s order by hour_from", (id,)) - for weekday, hour_from, hour_to in cr.fetchall(): - weekday = int(weekday) - hours_range_per_weekday.setdefault(weekday, []) - hours_range_per_weekday[weekday].append((hour_from, hour_to)) - else: - # considering default working hours (Monday -> Friday, 8 -> 12, 13 -> 17) - for weekday in range(5): - hours_range_per_weekday[weekday] = [(8, 12), (13, 17)] - - ## Interval between dt_from - dt_to - ## - ## dt_from dt_to - ## =============|==================|============ - ## [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] - ## - ## [ : start of range - ## ] : end of range - ## - ## case 1: range end before interval start (skip) - ## case 2: range overlap interval start (fit start to internal) - ## case 3: range within interval - ## case 4: range overlap interval end (fit end to interval) - ## case 5: range start after interval end (skip) - - interval_start = utc_to_local_zone(dt_from) - interval_end = utc_to_local_zone(dt_to) - hours_timedelta = datetime.timedelta() - - # Get leaves for requested resource - dt_leaves = set([]) - if exclude_leaves and id: - dt_leaves = set(self._get_leaves(cr, uid, id, resource=resource_id)) - - for day in rrule.rrule(rrule.DAILY, dtstart=interval_start, - until=interval_end+datetime.timedelta(days=1), - byweekday=hours_range_per_weekday.keys()): - if exclude_leaves and day.strftime('%Y-%m-%d') in dt_leaves: - # XXX: futher improve leave management to allow for partial day leave - continue - for (range_from, range_to) in hours_range_per_weekday.get(day.weekday(), []): - range_from_hour, range_from_min = float_time_convert(range_from) - range_to_hour, range_to_min = float_time_convert(range_to) - daytime_start = local_tz.localize(day.replace(hour=range_from_hour, minute=range_from_min, second=0, tzinfo=None)) - daytime_end = local_tz.localize(day.replace(hour=range_to_hour, minute=range_to_min, second=0, tzinfo=None)) - - # case 1 & 5: time range out of interval - if daytime_end < interval_start or daytime_start > interval_end: - continue - # case 2 & 4: adjust start, end to fit within interval - daytime_start = max(daytime_start, interval_start) - daytime_end = min(daytime_end, interval_end) - - # case 2+, 4+, 3 - hours_timedelta += (daytime_end - daytime_start) - - # return timedelta converted to hours - return (hours_timedelta.days * 24.0 + hours_timedelta.seconds / 3600.0) + return self.get_working_hours(cr, uid, id, dt_from, dt_to, compute_leaves=exclude_leaves, resource_id=resource_id, context=context) class resource_calendar_attendance(osv.osv): diff --git a/addons/resource/tests/test_resource.py b/addons/resource/tests/test_resource.py index 7ae4343a21f..fdb4982af90 100644 --- a/addons/resource/tests/test_resource.py +++ b/addons/resource/tests/test_resource.py @@ -366,7 +366,19 @@ class TestResource(TestResourceCommon): td += item[1] - item[0] self.assertEqual(td.total_seconds() / 3600.0, 40.0, 'resource_calendar: wrong hours scheduling') - def test_40_calendar_schedule_days(self): + res = self.resource_calendar._interval_hours_get(cr, uid, self.calendar_id, self.date1.replace(hour=6, minute=0), self.date2.replace(hour=23, minute=0) + relativedelta(days=7), resource_id=self.resource1_id, exclude_leaves=False) + print res + + res = self.resource_calendar.get_working_hours(cr, uid, self.calendar_id, self.date1.replace(hour=6, minute=0), self.date2.replace(hour=23, minute=0) + relativedelta(days=7), compute_leaves=False, resource_id=self.resource1_id) + print res + + res = self.resource_calendar._interval_hours_get(cr, uid, self.calendar_id, self.date1.replace(hour=6, minute=0), self.date2.replace(hour=23, minute=0) + relativedelta(days=7), resource_id=self.resource1_id, exclude_leaves=True) + print res + + res = self.resource_calendar.get_working_hours(cr, uid, self.calendar_id, self.date1.replace(hour=6, minute=0), self.date2.replace(hour=23, minute=0) + relativedelta(days=7), compute_leaves=True, resource_id=self.resource1_id) + print res + + def test_50_calendar_schedule_days(self): """ Testing calendar days scheduling """ cr, uid = self.cr, self.uid _format = '%Y-%m-%d %H:%M:%S' From 83e0e842c23558162bd26d02b7eb9504a0274ec9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 30 Aug 2013 16:27:36 +0200 Subject: [PATCH 06/20] [CLEAN] resource: cleaned old API bzr revid: tde@openerp.com-20130830142736-pd1o12fe40h2vgi2 --- addons/resource/resource.py | 77 ++++++++----------------------------- 1 file changed, 15 insertions(+), 62 deletions(-) diff --git a/addons/resource/resource.py b/addons/resource/resource.py index f43908f98e8..b2c3f54101e 100644 --- a/addons/resource/resource.py +++ b/addons/resource/resource.py @@ -496,35 +496,17 @@ class resource_calendar(osv.osv): # -------------------------------------------------- def working_hours_on_day(self, cr, uid, resource_calendar_id, day, context=None): - """ Compatibility method - will be removed for OpenERP v8. Computation - was done for the whole day, therefore setting start_dt at the beginning - of the day. - TDE TODO: hr_payroll/hr_payroll.py - """ + """ Compatibility method - will be removed for OpenERP v8. + Computation was done for the whole day, ignoring hour/minutes. + Used in hr_payroll/hr_payroll.py """ if isinstance(day, datetime.datetime): day = day.replace(hour=0, minute=0) return self.get_working_hours_of_date(cr, uid, resource_calendar_id.id, start_dt=day, context=None) def interval_min_get(self, cr, uid, id, dt_from, hours, resource=False): - """ - Calculates the working Schedule from supplied from date to till hours - will be satisfied based or resource calendar id. If resource is also - given then it will consider the resource leave also and than will - calculates resource working schedule - - @param dt_from: datetime object, start of working scheduled - @param hours: float, total number working hours needed scheduled from - start date - @param resource : Optional Resource id, if supplied than resource leaves - will also taken into consideration for calculating working - schedule. - @return : List datetime object of working schedule based on supplies - params - - TDE TODO: used in mrp_operations/mrp_operations.py - TDE NOTE: do not count leave hours, a leave is considered all-day - TDE UPDATE: now count leave hours - """ + """ Compatibility method - will be removed for OpenERP v8. + Schedule hours backwards. Note: now count leave hours instead of all-day leaves. + Used in mrp_operations/mrp_operations.py. """ return self.schedule_hours( cr, uid, id, hours * -1.0, day_dt=dt_from.replace(minute=0, second=0), @@ -532,11 +514,9 @@ class resource_calendar(osv.osv): ) def interval_get_multi(self, cr, uid, date_and_hours_by_cal, resource=False, byday=True): - """ TDE NOTE: used in mrp_operations/mrp_operations.py (default parameters) and in interval_get() - TDE NOTE: byday is not used in this method... - TDE NOTE: do not count leave hours, a leave is considered all-day - TDE UPDATE: now count leave hours - """ + """ Compatibility method - will be removed for OpenERP v8. + Note: used in mrp_operations/mrp_operations.py (default parameters) and in interval_get() + Byday was not used. Now counts Leave hours instead of all-day leaves. """ res = {} for dt_str, hours, calendar_id in date_and_hours_by_cal: result = self.schedule_hours( @@ -548,46 +528,19 @@ class resource_calendar(osv.osv): return res def interval_get(self, cr, uid, id, dt_from, hours, resource=False, byday=True): - """Calculates Resource Working Internal Timing Based on Resource Calendar. - - @param dt_from: start resource schedule calculation. - @param hours : total number of working hours to be scheduled. - @param resource: optional resource id, If supplied it will take care of - resource leave while scheduling. - @param byday: boolean flag bit enforce day wise scheduling - - @return : list of scheduled working timing based on resource calendar. - - TDE NOTE: mrp_operations/mrp_operations.py, crm/crm_lead.py (res given) - """ + """ Compatibility method - will be removed for OpenERP v8. Unifier of interval_get_multi. + Used in: mrp_operations/mrp_operations.py, crm/crm_lead.py (res given) """ res = self.interval_get_multi(cr, uid, [(dt_from.strftime('%Y-%m-%d %H:%M:%S'), hours, id)], resource, byday)[(dt_from.strftime('%Y-%m-%d %H:%M:%S'), hours, id)] return res def interval_hours_get(self, cr, uid, id, dt_from, dt_to, resource=False): - """ Unused wrapper """ + """ Compatibility method - will be removed for OpenERP v8. Unused wrapper """ return self._interval_hours_get(cr, uid, id, dt_from, dt_to, resource_id=resource) def _interval_hours_get(self, cr, uid, id, dt_from, dt_to, resource_id=False, timezone_from_uid=None, exclude_leaves=True, context=None): - """ Calculates the Total Working hours based on given start_date to - end_date, If resource id is supplied that it will consider the source - leaves also in calculating the hours. - - @param dt_from : date start to calculate hours - @param dt_end : date end to calculate hours - @param resource_id: optional resource id, If given resource leave will be - considered. - @param timezone_from_uid: optional uid, if given we will considerer - working hours in that user timezone - @param exclude_leaves: optionnal, if set to True (default) we will exclude - resource leaves from working hours - @param context: current request context - @return : Total number of working hours based dt_from and dt_end and - resource if supplied. - - TDE NOTE: used in project_issue/project_issue.py - TDE NOTE: day-long leaves - TDE UPDATE: timezone_from_uid not yet supported - """ + """ Compatibility method - will be removed for OpenERP v8. + Computes working hours between two dates, taking always same hour/minuts. + Note: now resets hour/minuts. Now counts leave hours instead of all-day leaves. """ return self.get_working_hours(cr, uid, id, dt_from, dt_to, compute_leaves=exclude_leaves, resource_id=resource_id, context=context) From 2cdefa52ef508d1583231ebbfa517cb205200440 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 30 Aug 2013 16:43:34 +0200 Subject: [PATCH 07/20] [FIX] resource: fixed computation with a False calendar id (spotted in stock_no_autopicking.py yml tests) bzr revid: tde@openerp.com-20130830144334-ong666lutkbibtrd --- addons/resource/resource.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/addons/resource/resource.py b/addons/resource/resource.py index b2c3f54101e..859e31e82a0 100644 --- a/addons/resource/resource.py +++ b/addons/resource/resource.py @@ -20,13 +20,10 @@ ############################################################################## import datetime -# from datetime import datetime, timedelta from dateutil import rrule from dateutil.relativedelta import relativedelta -import itertools -import math from operator import itemgetter -import pytz +# import pytz from faces import * from openerp import tools @@ -182,7 +179,7 @@ class resource_calendar(osv.osv): :param date day_date: current day as a date """ - if id is None: + if not id: return day_date + relativedelta(days=1) weekdays = self.get_weekdays(cr, uid, id, context) @@ -205,7 +202,7 @@ class resource_calendar(osv.osv): :param date day_date: current day as a date """ - if id is None: + if not id: return day_date + relativedelta(days=-1) weekdays = self.get_weekdays(cr, uid, id, context) weekdays.reverse() From 6e1cb5226b8eedc2db15a495dfa31dbd725fb1f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Mon, 2 Sep 2013 15:42:00 +0200 Subject: [PATCH 08/20] [IMP] hr_contract: added override of base_action_rule (+ dependency) to add the possibility to use a user-related working scheduling. bzr revid: tde@openerp.com-20130902134200-xvy5hb7lqv2wv0um --- addons/base_action_rule/base_action_rule.py | 23 +++++---- addons/hr_contract/__init__.py | 3 +- addons/hr_contract/__openerp__.py | 5 +- addons/hr_contract/base_action_rule.py | 52 ++++++++++++++++++++ addons/hr_contract/base_action_rule_view.xml | 19 +++++++ addons/resource/resource.py | 2 +- addons/resource/resource_view.xml | 20 +++++--- addons/resource/tests/test_resource.py | 12 ++--- 8 files changed, 108 insertions(+), 28 deletions(-) create mode 100644 addons/hr_contract/base_action_rule.py create mode 100644 addons/hr_contract/base_action_rule_view.xml diff --git a/addons/base_action_rule/base_action_rule.py b/addons/base_action_rule/base_action_rule.py index fd1d8e8d121..20be9cd4dec 100644 --- a/addons/base_action_rule/base_action_rule.py +++ b/addons/base_action_rule/base_action_rule.py @@ -240,6 +240,18 @@ class base_action_rule(osv.osv): data.update({'model': model.model}) return {'value': data} + def _check_delay(self, cr, uid, action, record, record_dt, context=None): + if action.trg_date_calendar_id and action.trg_date_range_type == 'day': + start_dt = get_datetime(record_dt) + action_dt = self.pool['resource.calendar'].schedule_days_get_date( + cr, uid, action.trg_date_calendar_id.id, action.trg_date_range, + day_date=start_dt, compute_leaves=True, context=context + ) + else: + delay = DATE_RANGE_FUNCTION[action.trg_date_range_type](action.trg_date_range) + action_dt = get_datetime(record_dt) + delay + return action_dt + def _check(self, cr, uid, automatic=False, use_new_cursor=False, context=None): """ This Function is called by scheduler. """ context = context or {} @@ -266,21 +278,12 @@ class base_action_rule(osv.osv): else: get_record_dt = lambda record: record[date_field] - delay = DATE_RANGE_FUNCTION[action.trg_date_range_type](action.trg_date_range) - # process action on the records that should be executed for record in model.browse(cr, uid, record_ids, context=context): record_dt = get_record_dt(record) if not record_dt: continue - if action.trg_date_calendar_id and action.trg_date_range_type == 'day': - start_dt = get_datetime(record_dt) - action_dt = self.pool['resource.calendar'].schedule_days( - cr, uid, action.trg_date_calendar_id.id, action.trg_date_range, - date=start_dt, compute_leaves=True - ) - else: - action_dt = get_datetime(record_dt) + delay + action_dt = self._check_delay(cr, uid, action, record, record_dt, context=context) if last_run and (last_run <= action_dt < now) or (action_dt < now): try: self._process(cr, uid, action, [record.id], context=context) diff --git a/addons/hr_contract/__init__.py b/addons/hr_contract/__init__.py index 36375675bda..9bec9d6fffe 100644 --- a/addons/hr_contract/__init__.py +++ b/addons/hr_contract/__init__.py @@ -2,7 +2,7 @@ ############################################################################## # # OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). +# Copyright (C) 2004-Today OpenERP SA ( +# +# 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 openerp.addons.base_action_rule.base_action_rule import get_datetime +from openerp.osv import fields, osv + + +class base_action_rule(osv.Model): + """ Add resource and calendar for time-based conditions """ + _name = 'base.action.rule' + _inherit = ['base.action.rule'] + + _columns = { + 'trg_date_resource_field_id': fields.many2one( + 'ir.model.fields', 'User related field', + help='Use the user\'s working schedule.', + ), + } + + def _check_delay(self, cr, uid, action, record, record_dt, context=None): + """ Override the check of delay to try to use a user-related calendar. + If no calendar is found, fallback on the default behavior. """ + if action.trg_date_calendar_id and action.trg_date_range_type == 'day' and action.trg_date_resource_field_id: + user = record[action.trg_date_resource_field_id.name] + if user.employee_ids and user.employee_ids[0].contract_id \ + and user.employee_ids[0].contract_id.working_hours: + calendar = user.employee_ids[0].contract_id.working_hours + start_dt = get_datetime(record_dt) + action_dt = self.pool['resource.calendar'].schedule_days_get_date( + cr, uid, calendar.id, action.trg_date_range, + day_date=start_dt, compute_leaves=True, context=context + ) + return action_dt + return super(base_action_rule, self)._check_delay(cr, uid, action, record, record_dt, context=context) diff --git a/addons/hr_contract/base_action_rule_view.xml b/addons/hr_contract/base_action_rule_view.xml new file mode 100644 index 00000000000..c37628b8c37 --- /dev/null +++ b/addons/hr_contract/base_action_rule_view.xml @@ -0,0 +1,19 @@ + + + + + + base.action.rule.form + base.action.rule + + + + + + + + + + diff --git a/addons/resource/resource.py b/addons/resource/resource.py index 859e31e82a0..3824f154681 100644 --- a/addons/resource/resource.py +++ b/addons/resource/resource.py @@ -481,7 +481,7 @@ class resource_calendar(osv.osv): """Wrapper on _schedule_days: return the beginning/ending datetime of a days scheduling. """ res = self._schedule_days(cr, uid, id, days, day_date, compute_leaves, resource_id, context) - return res[-1][1].date() + return res[-1][1] def schedule_days(self, cr, uid, id, days, day_date=None, compute_leaves=False, resource_id=None, context=None): """Wrapper on _schedule_days: return the working intervals of a days diff --git a/addons/resource/resource_view.xml b/addons/resource/resource_view.xml index dcd7e1a67c0..6f5bc71863a 100644 --- a/addons/resource/resource_view.xml +++ b/addons/resource/resource_view.xml @@ -60,12 +60,13 @@

- - - - - - + + + + + + +
@@ -245,14 +246,17 @@
+ Resource Leaves resource.calendar.leaves tree,form,calendar + - - + + + diff --git a/addons/resource/tests/test_resource.py b/addons/resource/tests/test_resource.py index fdb4982af90..1413c6732c6 100644 --- a/addons/resource/tests/test_resource.py +++ b/addons/resource/tests/test_resource.py @@ -367,16 +367,16 @@ class TestResource(TestResourceCommon): self.assertEqual(td.total_seconds() / 3600.0, 40.0, 'resource_calendar: wrong hours scheduling') res = self.resource_calendar._interval_hours_get(cr, uid, self.calendar_id, self.date1.replace(hour=6, minute=0), self.date2.replace(hour=23, minute=0) + relativedelta(days=7), resource_id=self.resource1_id, exclude_leaves=False) - print res + # print res res = self.resource_calendar.get_working_hours(cr, uid, self.calendar_id, self.date1.replace(hour=6, minute=0), self.date2.replace(hour=23, minute=0) + relativedelta(days=7), compute_leaves=False, resource_id=self.resource1_id) - print res + # print res res = self.resource_calendar._interval_hours_get(cr, uid, self.calendar_id, self.date1.replace(hour=6, minute=0), self.date2.replace(hour=23, minute=0) + relativedelta(days=7), resource_id=self.resource1_id, exclude_leaves=True) - print res + # print res res = self.resource_calendar.get_working_hours(cr, uid, self.calendar_id, self.date1.replace(hour=6, minute=0), self.date2.replace(hour=23, minute=0) + relativedelta(days=7), compute_leaves=True, resource_id=self.resource1_id) - print res + # print res def test_50_calendar_schedule_days(self): """ Testing calendar days scheduling """ @@ -384,12 +384,12 @@ class TestResource(TestResourceCommon): _format = '%Y-%m-%d %H:%M:%S' res = self.resource_calendar.schedule_days_get_date(cr, uid, self.calendar_id, 5, day_date=self.date1) - self.assertEqual(res, datetime.strptime('2013-02-26 00:0:00', _format).date(), 'resource_calendar: wrong days scheduling') + self.assertEqual(res.date(), datetime.strptime('2013-02-26 00:0:00', _format).date(), 'resource_calendar: wrong days scheduling') res = self.resource_calendar.schedule_days_get_date( cr, uid, self.calendar_id, 5, day_date=self.date1, compute_leaves=True, resource_id=self.resource1_id) - self.assertEqual(res, datetime.strptime('2013-03-01 00:0:00', _format).date(), 'resource_calendar: wrong days scheduling') + self.assertEqual(res.date(), datetime.strptime('2013-03-01 00:0:00', _format).date(), 'resource_calendar: wrong days scheduling') # -------------------------------------------------- # Misc From 3e04e5daff76be0566f5d0b2da2992a54145013d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Mon, 2 Sep 2013 15:44:18 +0200 Subject: [PATCH 09/20] [IMP] hr_contract: base_action_rule: better string bzr revid: tde@openerp.com-20130902134418-ds0exspb1kkhhw6x --- addons/hr_contract/base_action_rule.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/hr_contract/base_action_rule.py b/addons/hr_contract/base_action_rule.py index 5788aa50caf..d06d5e47e89 100644 --- a/addons/hr_contract/base_action_rule.py +++ b/addons/hr_contract/base_action_rule.py @@ -30,7 +30,7 @@ class base_action_rule(osv.Model): _columns = { 'trg_date_resource_field_id': fields.many2one( - 'ir.model.fields', 'User related field', + 'ir.model.fields', 'Use employee work schedule', help='Use the user\'s working schedule.', ), } From 6ee6b211b61bb2032c897c92eb67a6c894684864 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Mon, 2 Sep 2013 15:49:44 +0200 Subject: [PATCH 10/20] [IMP] hr_contract: base_action_rule: add resource for leave computation bzr revid: tde@openerp.com-20130902134944-4b4ex8e7il32uvy5 --- addons/hr_contract/base_action_rule.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/hr_contract/base_action_rule.py b/addons/hr_contract/base_action_rule.py index d06d5e47e89..c5a29743497 100644 --- a/addons/hr_contract/base_action_rule.py +++ b/addons/hr_contract/base_action_rule.py @@ -44,9 +44,11 @@ class base_action_rule(osv.Model): and user.employee_ids[0].contract_id.working_hours: calendar = user.employee_ids[0].contract_id.working_hours start_dt = get_datetime(record_dt) + resource_id = user.employee_ids[0].resource_id.id action_dt = self.pool['resource.calendar'].schedule_days_get_date( cr, uid, calendar.id, action.trg_date_range, - day_date=start_dt, compute_leaves=True, context=context + day_date=start_dt, compute_leaves=True, resource_id=resource_id, + context=context ) return action_dt return super(base_action_rule, self)._check_delay(cr, uid, action, record, record_dt, context=context) From 5139c760d22940d3c170e6310495a32c7dab7f32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 10 Jan 2014 15:27:22 +0100 Subject: [PATCH 11/20] [FIX] mrp: added security rule to enable mrp users to compute production orders bzr revid: tde@openerp.com-20140110142722-3x0zk98aajh0bgxy --- addons/mrp/security/ir.model.access.csv | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/mrp/security/ir.model.access.csv b/addons/mrp/security/ir.model.access.csv index 7a94b1a660c..8cfe7b17939 100644 --- a/addons/mrp/security/ir.model.access.csv +++ b/addons/mrp/security/ir.model.access.csv @@ -39,6 +39,7 @@ access_res_partner,res.partner,base.model_res_partner,mrp.group_mrp_user,1,0,0,0 access_workcenter_user,mrp.production.workcenter.line.user,model_mrp_production_workcenter_line,mrp.group_mrp_user,1,1,1,1 access_resource_calendar_leaves_user,mrp.resource.calendar.leaves.user,resource.model_resource_calendar_leaves,mrp.group_mrp_user,1,1,1,1 access_resource_calendar_leaves_manager,mrp.resource.calendar.leaves.manager,resource.model_resource_calendar_leaves,mrp.group_mrp_manager,1,0,0,0 +access_resource_calendar_attendance_mrp_user,mrp.resource.calendar.attendance.mrp.user,resource.model_resource_calendar_attendance,mrp.group_mrp_user,1,1,1,1 access_resource_calendar_attendance_manager,mrp.resource.calendar.attendance.manager,resource.model_resource_calendar_attendance,mrp.group_mrp_manager,1,1,1,1 access_product_puom_categ,product.uom.categ,product.model_product_uom_categ,mrp.group_mrp_user,1,0,0,0 access_resource_resource,resource.resource,resource.model_resource_resource,mrp.group_mrp_user,1,0,0,0 From 77457bd8b2763013623936be27edcbcd7edfa551 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Mon, 20 Jan 2014 12:49:01 +0100 Subject: [PATCH 12/20] [FIX] calendar: type of related field should be 'integer', not 'int' bzr revid: rco@openerp.com-20140120114901-ryrqgu0drewsjx4y --- addons/calendar/calendar.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/calendar/calendar.py b/addons/calendar/calendar.py index 38f4e30a764..aede7757514 100644 --- a/addons/calendar/calendar.py +++ b/addons/calendar/calendar.py @@ -831,7 +831,7 @@ class calendar_event(osv.Model): 'end_date': fields.date('Repeat Until'), 'allday': fields.boolean('All Day', states={'done': [('readonly', True)]}), 'user_id': fields.many2one('res.users', 'Responsible', states={'done': [('readonly', True)]}), - 'color_partner_id': fields.related('user_id', 'partner_id', 'id', type="int", string="colorize", store=False), # Color of creator + 'color_partner_id': fields.related('user_id', 'partner_id', 'id', type="integer", string="colorize", store=False), # Color of creator 'active': fields.boolean('Active', help="If the active field is set to true, it will allow you to hide the event alarm information without removing it."), 'categ_ids': fields.many2many('calendar.event.type', 'meeting_category_rel', 'event_id', 'type_id', 'Tags'), 'attendee_ids': fields.one2many('calendar.attendee', 'event_id', 'Attendees', ondelete='cascade'), From 16028dedfd1db44013c8a30dac86096bcad0b8d4 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Mon, 20 Jan 2014 13:59:53 +0100 Subject: [PATCH 13/20] [FIX] calendar: function field of type 'selection' must be given a selection parameter bzr revid: rco@openerp.com-20140120125953-zk6iwkvye4reansl --- addons/calendar/calendar.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/addons/calendar/calendar.py b/addons/calendar/calendar.py index aede7757514..6162d3cb8cf 100644 --- a/addons/calendar/calendar.py +++ b/addons/calendar/calendar.py @@ -100,8 +100,15 @@ class calendar_attendee(osv.Model): result[id][name] = attdata.event_id.date_deadline return result + STATE_SELECTION = [ + ('needsAction', 'Needs Action'), + ('tentative', 'Uncertain'), + ('declined', 'Declined'), + ('accepted', 'Accepted'), + ] + _columns = { - 'state': fields.selection([('needsAction', 'Needs Action'), ('tentative', 'Uncertain'), ('declined', 'Declined'), ('accepted', 'Accepted')], 'Status', readonly=True, help="Status of the attendee's participation"), + 'state': fields.selection(STATE_SELECTION, 'Status', readonly=True, help="Status of the attendee's participation"), 'cn': fields.function(_compute_data, string='Common name', type="char", multi='cn', store=True), 'partner_id': fields.many2one('res.partner', 'Contact', readonly="True"), 'email': fields.char('Email', help="Email of Invited Person"), @@ -799,7 +806,7 @@ class calendar_event(osv.Model): 'state': fields.selection([('draft', 'Unconfirmed'), ('open', 'Confirmed')], string='Status', readonly=True, track_visibility='onchange'), 'name': fields.char('Meeting Subject', required=True, states={'done': [('readonly', True)]}), 'is_attendee': fields.function(_compute, string='Attendee', type="boolean", multi='attendee'), - 'attendee_status': fields.function(_compute, string='Attendee Status', type="selection", multi='attendee'), + 'attendee_status': fields.function(_compute, string='Attendee Status', type="selection", selection=calendar_attendee.STATE_SELECTION, multi='attendee'), 'display_time': fields.function(_compute, string='Event Time', type="char", multi='attendee'), 'date': fields.datetime('Date', states={'done': [('readonly', True)]}, required=True, track_visibility='onchange'), 'date_deadline': fields.datetime('End Date', states={'done': [('readonly', True)]}, required=True,), From 9b31f30c298615c4201ee258ef5af3182df0b2e5 Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Mon, 20 Jan 2014 16:44:22 +0100 Subject: [PATCH 14/20] [FIX] edi: /edi/import_edi_url route is a json route bzr revid: chs@openerp.com-20140120154422-blccmtrql7mlwmvn --- addons/edi/controllers/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/edi/controllers/main.py b/addons/edi/controllers/main.py index 149c0f62ff6..86115d12d4b 100644 --- a/addons/edi/controllers/main.py +++ b/addons/edi/controllers/main.py @@ -26,7 +26,7 @@ class EDI(openerp.http.Controller): 'init': 's.edi.edi_import("%s");' % safe_url, } - @openerp.http.route('/edi/import_edi_url', type='http', auth='none') + @openerp.http.route('/edi/import_edi_url', type='json', auth='none') def import_edi_url(self, url): req = openerp.http.request result = req.session.proxy('edi').import_edi_url(req.session._db, req.session._uid, req.session._password, url) From e516362da433c59333746e5cd527a4dee795a7a2 Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Mon, 20 Jan 2014 17:40:54 +0100 Subject: [PATCH 15/20] [IMP] calendar: tell orm to rename old select1 column bzr revid: chs@openerp.com-20140120164054-ia6pw4svp3ylww5w --- addons/calendar/calendar.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/calendar/calendar.py b/addons/calendar/calendar.py index 6162d3cb8cf..f0862601611 100644 --- a/addons/calendar/calendar.py +++ b/addons/calendar/calendar.py @@ -2,7 +2,7 @@ ############################################################################## # # OpenERP, Open Source Business Applications -# Copyright (c) 2011 OpenERP S.A. +# Copyright (c) 2011-2014 OpenERP S.A. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -831,7 +831,7 @@ class calendar_event(osv.Model): 'fr': fields.boolean('Fri'), 'sa': fields.boolean('Sat'), 'su': fields.boolean('Sun'), - 'month_by': fields.selection([('date', 'Date of month'), ('day', 'Day of month')], 'Option'), + 'month_by': fields.selection([('date', 'Date of month'), ('day', 'Day of month')], 'Option', oldname='select1'), 'day': fields.integer('Date of month'), 'week_list': fields.selection([('MO', 'Monday'), ('TU', 'Tuesday'), ('WE', 'Wednesday'), ('TH', 'Thursday'), ('FR', 'Friday'), ('SA', 'Saturday'), ('SU', 'Sunday')], 'Weekday'), 'byday': fields.selection([('1', 'First'), ('2', 'Second'), ('3', 'Third'), ('4', 'Fourth'), ('5', 'Fifth'), ('-1', 'Last')], 'By day'), From 0f2d7e482062fb99596fd5565da4cdbc2cf47c6b Mon Sep 17 00:00:00 2001 From: Launchpad Translations on behalf of openerp <> Date: Wed, 22 Jan 2014 05:40:41 +0000 Subject: [PATCH 16/20] Launchpad automatic translations update. bzr revid: launchpad_translations_on_behalf_of_openerp-20140122054041-3ebv0zxz43meid0v --- addons/web/i18n/ar.po | 4 +- addons/web/i18n/bg.po | 4 +- addons/web/i18n/bn.po | 4 +- addons/web/i18n/bs.po | 4 +- addons/web/i18n/ca.po | 4 +- addons/web/i18n/cs.po | 4 +- addons/web/i18n/da.po | 4 +- addons/web/i18n/de.po | 87 ++++++++++++++-------------- addons/web/i18n/en_AU.po | 4 +- addons/web/i18n/en_GB.po | 4 +- addons/web/i18n/es.po | 4 +- addons/web/i18n/es_CL.po | 4 +- addons/web/i18n/es_CR.po | 4 +- addons/web/i18n/es_DO.po | 4 +- addons/web/i18n/es_EC.po | 4 +- addons/web/i18n/es_MX.po | 4 +- addons/web/i18n/es_PE.po | 4 +- addons/web/i18n/et.po | 4 +- addons/web/i18n/eu.po | 4 +- addons/web/i18n/fa.po | 4 +- addons/web/i18n/fi.po | 4 +- addons/web/i18n/fr.po | 4 +- addons/web/i18n/fr_CA.po | 4 +- addons/web/i18n/gl.po | 4 +- addons/web/i18n/gu.po | 4 +- addons/web/i18n/he.po | 4 +- addons/web/i18n/hi.po | 4 +- addons/web/i18n/hr.po | 4 +- addons/web/i18n/hu.po | 4 +- addons/web/i18n/id.po | 4 +- addons/web/i18n/it.po | 4 +- addons/web/i18n/ja.po | 4 +- addons/web/i18n/ka.po | 4 +- addons/web/i18n/ko.po | 4 +- addons/web/i18n/lo.po | 4 +- addons/web/i18n/lt.po | 4 +- addons/web/i18n/lv.po | 4 +- addons/web/i18n/mk.po | 4 +- addons/web/i18n/mn.po | 4 +- addons/web/i18n/nb.po | 4 +- addons/web/i18n/nl.po | 4 +- addons/web/i18n/nl_BE.po | 4 +- addons/web/i18n/pl.po | 4 +- addons/web/i18n/pt.po | 4 +- addons/web/i18n/pt_BR.po | 4 +- addons/web/i18n/ro.po | 4 +- addons/web/i18n/ru.po | 4 +- addons/web/i18n/sk.po | 4 +- addons/web/i18n/sl.po | 4 +- addons/web/i18n/sq.po | 4 +- addons/web/i18n/sr@latin.po | 4 +- addons/web/i18n/sv.po | 4 +- addons/web/i18n/th.po | 4 +- addons/web/i18n/tr.po | 4 +- addons/web/i18n/uk.po | 4 +- addons/web/i18n/vi.po | 4 +- addons/web/i18n/zh_CN.po | 4 +- addons/web/i18n/zh_TW.po | 4 +- addons/web_calendar/i18n/ar.po | 4 +- addons/web_calendar/i18n/bg.po | 4 +- addons/web_calendar/i18n/bn.po | 4 +- addons/web_calendar/i18n/bs.po | 4 +- addons/web_calendar/i18n/ca.po | 4 +- addons/web_calendar/i18n/cs.po | 4 +- addons/web_calendar/i18n/da.po | 4 +- addons/web_calendar/i18n/de.po | 8 +-- addons/web_calendar/i18n/en_AU.po | 4 +- addons/web_calendar/i18n/en_GB.po | 4 +- addons/web_calendar/i18n/es.po | 4 +- addons/web_calendar/i18n/es_CL.po | 4 +- addons/web_calendar/i18n/es_CR.po | 4 +- addons/web_calendar/i18n/es_DO.po | 4 +- addons/web_calendar/i18n/es_EC.po | 4 +- addons/web_calendar/i18n/es_MX.po | 4 +- addons/web_calendar/i18n/es_PE.po | 4 +- addons/web_calendar/i18n/et.po | 4 +- addons/web_calendar/i18n/eu.po | 4 +- addons/web_calendar/i18n/fa.po | 4 +- addons/web_calendar/i18n/fi.po | 4 +- addons/web_calendar/i18n/fr.po | 4 +- addons/web_calendar/i18n/fr_CA.po | 4 +- addons/web_calendar/i18n/gl.po | 4 +- addons/web_calendar/i18n/gu.po | 4 +- addons/web_calendar/i18n/hr.po | 4 +- addons/web_calendar/i18n/hu.po | 4 +- addons/web_calendar/i18n/id.po | 4 +- addons/web_calendar/i18n/it.po | 4 +- addons/web_calendar/i18n/ja.po | 4 +- addons/web_calendar/i18n/ka.po | 4 +- addons/web_calendar/i18n/ko.po | 4 +- addons/web_calendar/i18n/lt.po | 4 +- addons/web_calendar/i18n/mk.po | 4 +- addons/web_calendar/i18n/mn.po | 4 +- addons/web_calendar/i18n/nb.po | 4 +- addons/web_calendar/i18n/nl.po | 4 +- addons/web_calendar/i18n/nl_BE.po | 4 +- addons/web_calendar/i18n/pl.po | 4 +- addons/web_calendar/i18n/pt.po | 4 +- addons/web_calendar/i18n/pt_BR.po | 4 +- addons/web_calendar/i18n/ro.po | 4 +- addons/web_calendar/i18n/ru.po | 4 +- addons/web_calendar/i18n/sk.po | 4 +- addons/web_calendar/i18n/sl.po | 4 +- addons/web_calendar/i18n/sq.po | 4 +- addons/web_calendar/i18n/sr@latin.po | 4 +- addons/web_calendar/i18n/sv.po | 4 +- addons/web_calendar/i18n/th.po | 4 +- addons/web_calendar/i18n/tr.po | 4 +- addons/web_calendar/i18n/uk.po | 4 +- addons/web_calendar/i18n/zh_CN.po | 4 +- addons/web_calendar/i18n/zh_TW.po | 4 +- addons/web_diagram/i18n/ar.po | 4 +- addons/web_diagram/i18n/bg.po | 4 +- addons/web_diagram/i18n/bn.po | 4 +- addons/web_diagram/i18n/bs.po | 4 +- addons/web_diagram/i18n/ca.po | 4 +- addons/web_diagram/i18n/cs.po | 4 +- addons/web_diagram/i18n/da.po | 4 +- addons/web_diagram/i18n/de.po | 6 +- addons/web_diagram/i18n/en_AU.po | 4 +- addons/web_diagram/i18n/en_GB.po | 4 +- addons/web_diagram/i18n/es.po | 4 +- addons/web_diagram/i18n/es_CL.po | 4 +- addons/web_diagram/i18n/es_CR.po | 4 +- addons/web_diagram/i18n/es_DO.po | 4 +- addons/web_diagram/i18n/es_EC.po | 4 +- addons/web_diagram/i18n/es_MX.po | 4 +- addons/web_diagram/i18n/es_PE.po | 4 +- addons/web_diagram/i18n/et.po | 4 +- addons/web_diagram/i18n/fa.po | 4 +- addons/web_diagram/i18n/fi.po | 4 +- addons/web_diagram/i18n/fr.po | 4 +- addons/web_diagram/i18n/gl.po | 4 +- addons/web_diagram/i18n/gu.po | 4 +- addons/web_diagram/i18n/hr.po | 4 +- addons/web_diagram/i18n/hu.po | 4 +- addons/web_diagram/i18n/id.po | 4 +- addons/web_diagram/i18n/it.po | 4 +- addons/web_diagram/i18n/ja.po | 4 +- addons/web_diagram/i18n/ka.po | 4 +- addons/web_diagram/i18n/ko.po | 4 +- addons/web_diagram/i18n/lt.po | 4 +- addons/web_diagram/i18n/mk.po | 4 +- addons/web_diagram/i18n/mn.po | 4 +- addons/web_diagram/i18n/nb.po | 4 +- addons/web_diagram/i18n/nl.po | 4 +- addons/web_diagram/i18n/nl_BE.po | 4 +- addons/web_diagram/i18n/pl.po | 4 +- addons/web_diagram/i18n/pt.po | 4 +- addons/web_diagram/i18n/pt_BR.po | 4 +- addons/web_diagram/i18n/ro.po | 4 +- addons/web_diagram/i18n/ru.po | 4 +- addons/web_diagram/i18n/sl.po | 4 +- addons/web_diagram/i18n/sq.po | 4 +- addons/web_diagram/i18n/sr@latin.po | 4 +- addons/web_diagram/i18n/sv.po | 4 +- addons/web_diagram/i18n/th.po | 4 +- addons/web_diagram/i18n/tr.po | 4 +- addons/web_diagram/i18n/zh_CN.po | 4 +- addons/web_diagram/i18n/zh_TW.po | 4 +- addons/web_gantt/i18n/ar.po | 4 +- addons/web_gantt/i18n/bg.po | 4 +- addons/web_gantt/i18n/bn.po | 4 +- addons/web_gantt/i18n/bs.po | 4 +- addons/web_gantt/i18n/ca.po | 4 +- addons/web_gantt/i18n/cs.po | 4 +- addons/web_gantt/i18n/da.po | 4 +- addons/web_gantt/i18n/de.po | 4 +- addons/web_gantt/i18n/en_AU.po | 4 +- addons/web_gantt/i18n/en_GB.po | 4 +- addons/web_gantt/i18n/es.po | 4 +- addons/web_gantt/i18n/es_CL.po | 4 +- addons/web_gantt/i18n/es_CR.po | 4 +- addons/web_gantt/i18n/es_DO.po | 4 +- addons/web_gantt/i18n/es_EC.po | 4 +- addons/web_gantt/i18n/es_MX.po | 4 +- addons/web_gantt/i18n/et.po | 4 +- addons/web_gantt/i18n/fa.po | 4 +- addons/web_gantt/i18n/fi.po | 4 +- addons/web_gantt/i18n/fr.po | 4 +- addons/web_gantt/i18n/gl.po | 4 +- addons/web_gantt/i18n/gu.po | 4 +- addons/web_gantt/i18n/he.po | 4 +- addons/web_gantt/i18n/hr.po | 4 +- addons/web_gantt/i18n/hu.po | 4 +- addons/web_gantt/i18n/it.po | 4 +- addons/web_gantt/i18n/ja.po | 4 +- addons/web_gantt/i18n/ka.po | 4 +- addons/web_gantt/i18n/ko.po | 4 +- addons/web_gantt/i18n/lo.po | 4 +- addons/web_gantt/i18n/lt.po | 4 +- addons/web_gantt/i18n/mk.po | 4 +- addons/web_gantt/i18n/mn.po | 4 +- addons/web_gantt/i18n/nb.po | 4 +- addons/web_gantt/i18n/nl.po | 4 +- addons/web_gantt/i18n/nl_BE.po | 4 +- addons/web_gantt/i18n/pl.po | 4 +- addons/web_gantt/i18n/pt.po | 4 +- addons/web_gantt/i18n/pt_BR.po | 4 +- addons/web_gantt/i18n/ro.po | 4 +- addons/web_gantt/i18n/ru.po | 4 +- addons/web_gantt/i18n/sl.po | 4 +- addons/web_gantt/i18n/sq.po | 4 +- addons/web_gantt/i18n/sr@latin.po | 4 +- addons/web_gantt/i18n/sv.po | 4 +- addons/web_gantt/i18n/th.po | 4 +- addons/web_gantt/i18n/tr.po | 4 +- addons/web_gantt/i18n/zh_CN.po | 4 +- addons/web_graph/i18n/ar.po | 4 +- addons/web_graph/i18n/bg.po | 4 +- addons/web_graph/i18n/bn.po | 4 +- addons/web_graph/i18n/bs.po | 4 +- addons/web_graph/i18n/ca.po | 4 +- addons/web_graph/i18n/cs.po | 4 +- addons/web_graph/i18n/da.po | 4 +- addons/web_graph/i18n/de.po | 8 +-- addons/web_graph/i18n/en_AU.po | 4 +- addons/web_graph/i18n/en_GB.po | 4 +- addons/web_graph/i18n/es.po | 4 +- addons/web_graph/i18n/es_CL.po | 4 +- addons/web_graph/i18n/es_CR.po | 4 +- addons/web_graph/i18n/es_DO.po | 4 +- addons/web_graph/i18n/es_EC.po | 4 +- addons/web_graph/i18n/es_MX.po | 4 +- addons/web_graph/i18n/et.po | 4 +- addons/web_graph/i18n/fa.po | 4 +- addons/web_graph/i18n/fi.po | 4 +- addons/web_graph/i18n/fr.po | 4 +- addons/web_graph/i18n/fr_CA.po | 4 +- addons/web_graph/i18n/gl.po | 4 +- addons/web_graph/i18n/gu.po | 4 +- addons/web_graph/i18n/he.po | 4 +- addons/web_graph/i18n/hr.po | 4 +- addons/web_graph/i18n/hu.po | 4 +- addons/web_graph/i18n/it.po | 4 +- addons/web_graph/i18n/ja.po | 4 +- addons/web_graph/i18n/ka.po | 4 +- addons/web_graph/i18n/ko.po | 4 +- addons/web_graph/i18n/lt.po | 4 +- addons/web_graph/i18n/mk.po | 4 +- addons/web_graph/i18n/mn.po | 4 +- addons/web_graph/i18n/nb.po | 4 +- addons/web_graph/i18n/nl.po | 4 +- addons/web_graph/i18n/nl_BE.po | 4 +- addons/web_graph/i18n/pl.po | 4 +- addons/web_graph/i18n/pt.po | 4 +- addons/web_graph/i18n/pt_BR.po | 4 +- addons/web_graph/i18n/ro.po | 4 +- addons/web_graph/i18n/ru.po | 4 +- addons/web_graph/i18n/sl.po | 4 +- addons/web_graph/i18n/sq.po | 4 +- addons/web_graph/i18n/sr@latin.po | 4 +- addons/web_graph/i18n/sv.po | 4 +- addons/web_graph/i18n/th.po | 4 +- addons/web_graph/i18n/tr.po | 4 +- addons/web_graph/i18n/zh_CN.po | 4 +- addons/web_kanban/i18n/ar.po | 4 +- addons/web_kanban/i18n/bg.po | 4 +- addons/web_kanban/i18n/bn.po | 4 +- addons/web_kanban/i18n/bs.po | 4 +- addons/web_kanban/i18n/ca.po | 4 +- addons/web_kanban/i18n/cs.po | 4 +- addons/web_kanban/i18n/da.po | 4 +- addons/web_kanban/i18n/de.po | 4 +- addons/web_kanban/i18n/en_AU.po | 4 +- addons/web_kanban/i18n/en_GB.po | 4 +- addons/web_kanban/i18n/es.po | 4 +- addons/web_kanban/i18n/es_CL.po | 4 +- addons/web_kanban/i18n/es_CR.po | 4 +- addons/web_kanban/i18n/es_DO.po | 4 +- addons/web_kanban/i18n/es_EC.po | 4 +- addons/web_kanban/i18n/es_MX.po | 4 +- addons/web_kanban/i18n/et.po | 4 +- addons/web_kanban/i18n/fa.po | 4 +- addons/web_kanban/i18n/fi.po | 4 +- addons/web_kanban/i18n/fr.po | 4 +- addons/web_kanban/i18n/fr_CA.po | 4 +- addons/web_kanban/i18n/gl.po | 4 +- addons/web_kanban/i18n/gu.po | 4 +- addons/web_kanban/i18n/he.po | 4 +- addons/web_kanban/i18n/hr.po | 4 +- addons/web_kanban/i18n/hu.po | 4 +- addons/web_kanban/i18n/it.po | 4 +- addons/web_kanban/i18n/ja.po | 4 +- addons/web_kanban/i18n/ka.po | 4 +- addons/web_kanban/i18n/ko.po | 4 +- addons/web_kanban/i18n/lt.po | 4 +- addons/web_kanban/i18n/mk.po | 4 +- addons/web_kanban/i18n/mn.po | 4 +- addons/web_kanban/i18n/nb.po | 4 +- addons/web_kanban/i18n/nl.po | 4 +- addons/web_kanban/i18n/nl_BE.po | 4 +- addons/web_kanban/i18n/pl.po | 4 +- addons/web_kanban/i18n/pt.po | 4 +- addons/web_kanban/i18n/pt_BR.po | 4 +- addons/web_kanban/i18n/ro.po | 4 +- addons/web_kanban/i18n/ru.po | 4 +- addons/web_kanban/i18n/sl.po | 4 +- addons/web_kanban/i18n/sr@latin.po | 4 +- addons/web_kanban/i18n/sv.po | 4 +- addons/web_kanban/i18n/th.po | 4 +- addons/web_kanban/i18n/tr.po | 4 +- addons/web_kanban/i18n/zh_CN.po | 4 +- addons/web_kanban/i18n/zh_TW.po | 4 +- addons/web_view_editor/i18n/ar.po | 4 +- addons/web_view_editor/i18n/bs.po | 4 +- addons/web_view_editor/i18n/cs.po | 4 +- addons/web_view_editor/i18n/da.po | 4 +- addons/web_view_editor/i18n/de.po | 6 +- addons/web_view_editor/i18n/en_AU.po | 4 +- addons/web_view_editor/i18n/en_GB.po | 4 +- addons/web_view_editor/i18n/es.po | 4 +- addons/web_view_editor/i18n/es_DO.po | 4 +- addons/web_view_editor/i18n/es_EC.po | 4 +- addons/web_view_editor/i18n/es_MX.po | 4 +- addons/web_view_editor/i18n/et.po | 4 +- addons/web_view_editor/i18n/fa.po | 4 +- addons/web_view_editor/i18n/fi.po | 4 +- addons/web_view_editor/i18n/fr.po | 4 +- addons/web_view_editor/i18n/he.po | 4 +- addons/web_view_editor/i18n/hr.po | 4 +- addons/web_view_editor/i18n/hu.po | 4 +- addons/web_view_editor/i18n/it.po | 4 +- addons/web_view_editor/i18n/ko.po | 4 +- addons/web_view_editor/i18n/lt.po | 4 +- addons/web_view_editor/i18n/lv.po | 4 +- addons/web_view_editor/i18n/mk.po | 4 +- addons/web_view_editor/i18n/mn.po | 4 +- addons/web_view_editor/i18n/nb.po | 4 +- addons/web_view_editor/i18n/nl.po | 4 +- addons/web_view_editor/i18n/nl_BE.po | 4 +- addons/web_view_editor/i18n/pl.po | 4 +- addons/web_view_editor/i18n/pt.po | 4 +- addons/web_view_editor/i18n/pt_BR.po | 4 +- addons/web_view_editor/i18n/ro.po | 4 +- addons/web_view_editor/i18n/ru.po | 4 +- addons/web_view_editor/i18n/sl.po | 4 +- addons/web_view_editor/i18n/sv.po | 4 +- addons/web_view_editor/i18n/th.po | 4 +- addons/web_view_editor/i18n/tr.po | 4 +- addons/web_view_editor/i18n/zh_CN.po | 4 +- 341 files changed, 729 insertions(+), 730 deletions(-) diff --git a/addons/web/i18n/ar.po b/addons/web/i18n/ar.po index a7afc6f96e7..4aef602034b 100644 --- a/addons/web/i18n/ar.po +++ b/addons/web/i18n/ar.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:56+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/bg.po b/addons/web/i18n/bg.po index 0c545f11510..5d91e3a8baa 100644 --- a/addons/web/i18n/bg.po +++ b/addons/web/i18n/bg.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:56+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/bn.po b/addons/web/i18n/bn.po index 52f86684882..1062f56b8e3 100644 --- a/addons/web/i18n/bn.po +++ b/addons/web/i18n/bn.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:56+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/bs.po b/addons/web/i18n/bs.po index 020e67a13a5..f8dfcf8379a 100644 --- a/addons/web/i18n/bs.po +++ b/addons/web/i18n/bs.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:56+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/ca.po b/addons/web/i18n/ca.po index a33bc2afff1..c138e492fbe 100644 --- a/addons/web/i18n/ca.po +++ b/addons/web/i18n/ca.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:56+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/cs.po b/addons/web/i18n/cs.po index 03e9b4fc2fb..523d5688c6f 100644 --- a/addons/web/i18n/cs.po +++ b/addons/web/i18n/cs.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:56+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" +"X-Generator: Launchpad (build 16901)\n" "X-Poedit-Language: Czech\n" #. module: web diff --git a/addons/web/i18n/da.po b/addons/web/i18n/da.po index 585e3331cb5..e5b0ec143ea 100644 --- a/addons/web/i18n/da.po +++ b/addons/web/i18n/da.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:56+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/de.po b/addons/web/i18n/de.po index f18efb89867..e00d94558c7 100644 --- a/addons/web/i18n/de.po +++ b/addons/web/i18n/de.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:56+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web @@ -68,14 +68,14 @@ msgstr "Bitte geben Sie Ihr altes Passwort ein" #: code:addons/web/static/src/xml/base.xml:300 #, python-format msgid "Master password:" -msgstr "Master Passwort" +msgstr "Masterpasswort" #. module: web #. openerp-web #: code:addons/web/static/src/xml/base.xml:292 #, python-format msgid "Change Master Password" -msgstr "Master Passwort ändern" +msgstr "Masterpasswort ändern" #. module: web #. openerp-web @@ -141,7 +141,8 @@ msgstr "'%s' ist kein gültiges Datum" #: code:addons/web/static/src/xml/base.xml:1858 #, python-format msgid "Here is a preview of the file we could not import:" -msgstr "Hier ist eine Vorschau der Datei die nicht importiert werden konnte" +msgstr "" +"Hier ist eine Vorschau der Datei, die nicht importiert werden konnte:" #. module: web #. openerp-web @@ -177,7 +178,7 @@ msgstr "Ungültiger Benutzername oder Passwort" #: code:addons/web/static/src/xml/base.xml:278 #, python-format msgid "Master Password:" -msgstr "Master Passwort" +msgstr "Masterpasswort" #. module: web #. openerp-web @@ -185,7 +186,7 @@ msgstr "Master Passwort" #: code:addons/web/static/src/xml/base.xml:1402 #, python-format msgid "Select" -msgstr "Ausgewählte Hinzufügen" +msgstr "Auswählen" #. module: web #. openerp-web @@ -221,7 +222,7 @@ msgstr "" #: code:addons/web/static/src/js/view_form.js:1241 #, python-format msgid "Widget type '%s' is not implemented" -msgstr "Widget Typ '%s' ist nicht implementiert" +msgstr "Widgettyp '%s' ist nicht implementiert" #. module: web #. openerp-web @@ -250,7 +251,7 @@ msgstr "(keine Zeichen)" #: code:addons/web/static/src/js/formats.js:286 #, python-format msgid "'%s' is not a correct time" -msgstr "'%s' ist keine gülte Zeit" +msgstr "'%s' ist keine gültige Zeitangabe" #. module: web #. openerp-web @@ -313,7 +314,7 @@ msgstr "Benutzerdefinierte Filter" #: code:addons/web/static/src/xml/base.xml:1364 #, python-format msgid "Button Type:" -msgstr "Schaltfläche Typ:" +msgstr "Button-Typ:" #. module: web #. openerp-web @@ -356,7 +357,7 @@ msgstr "Passwort ändern" #: code:addons/web/static/src/js/view_form.js:3528 #, python-format msgid "View type '%s' is not supported in One2Many." -msgstr "Ansichtstyp '%s' wird von O2M nicht unterstützt." +msgstr "Ansichtstyp '%s' wird von One2Many nicht unterstützt." #. module: web #. openerp-web @@ -385,7 +386,7 @@ msgstr "Gruppe" #: code:addons/web/static/src/xml/base.xml:949 #, python-format msgid "Unhandled widget" -msgstr "unbekanntes Oberflächenelement" +msgstr "Unbekanntes Oberflächenelement" #. module: web #. openerp-web @@ -469,7 +470,7 @@ msgstr "Nehmen Sie sich einen Moment Zeit,
laden dauert noch etwas..." #: code:addons/web/static/src/xml/base.xml:435 #, python-format msgid "Activate the developer mode" -msgstr "Entwickler Modus aktivieren" +msgstr "Entwicklermodus aktivieren" #. module: web #. openerp-web @@ -623,7 +624,7 @@ msgstr "All Informationen hinzufügen..." #: code:addons/web/static/src/xml/base.xml:1701 #, python-format msgid "Export Formats" -msgstr "Export Formate" +msgstr "Exportformate" #. module: web #. openerp-web @@ -769,14 +770,14 @@ msgstr "E-Mail-Fehler" #: code:addons/web/static/src/js/coresetup.js:595 #, python-format msgid "a day ago" -msgstr "Vor 1 Tag" +msgstr "vor einem Tag" #. module: web #. openerp-web #: code:addons/web/static/src/xml/base.xml:1810 #, python-format msgid "Does your file have titles?" -msgstr "Enthält Ihre Datei eine Titel Zeile?" +msgstr "Enthält Ihre Datei eine Titelzeile?" #. module: web #. openerp-web @@ -839,7 +840,7 @@ msgstr "Filtername" #: code:addons/web/static/src/xml/base.xml:1490 #, python-format msgid "-- Actions --" -msgstr "-- Actions --" +msgstr "-- Aktionen --" #. module: web #. openerp-web @@ -973,7 +974,7 @@ msgstr "Die Daten des Formulars können nicht gelöscht werden" #: code:addons/web/static/src/xml/base.xml:555 #, python-format msgid "Debug View#" -msgstr "Source von Sicht#" +msgstr "Debugansicht#" #. module: web #. openerp-web @@ -1011,7 +1012,7 @@ msgstr "" #: code:addons/web/static/src/js/chrome.js:367 #, python-format msgid "Invalid database name" -msgstr "Ungültiger Datenbank Name" +msgstr "Ungültiger Datenbankname" #. module: web #. openerp-web @@ -1046,7 +1047,7 @@ msgstr "Erstellungsdatum:" #: code:addons/web/controllers/main.py:878 #, python-format msgid "Error, password not changed !" -msgstr "Fehler, das Passwort wurde nicht geändert!" +msgstr "Fehler: das Passwort wurde nicht geändert!" #. module: web #. openerp-web @@ -1093,7 +1094,7 @@ msgstr "Öffne: " #: code:addons/web/static/src/xml/base.xml:327 #, python-format msgid "Backup" -msgstr "Sichern" +msgstr "Backup" #. module: web #. openerp-web @@ -1202,7 +1203,7 @@ msgid "" msgstr "" "Wählen Sie eine CSV Datei aus, die Sie importieren möchten. Wenn Sie eine " "Beispieldatei benötigen,\n" -" sollten Sie beim Export die Option \"Import-Kompatibel\" wählen." +" sollten Sie beim Export die Option \"Import kompatibel\" wählen." #. module: web #. openerp-web @@ -1267,7 +1268,7 @@ msgstr "Wiederherstellen" #: code:addons/web/static/src/xml/base.xml:1695 #, python-format msgid "Export Type:" -msgstr "Export Typ:" +msgstr "Exporttyp:" #. module: web #. openerp-web @@ -1438,7 +1439,7 @@ msgstr "Standardwert ändern:" #: code:addons/web/static/src/xml/base.xml:189 #, python-format msgid "Original database name:" -msgstr "Original Datenbank Name :" +msgstr "Original Datenbankname :" #. module: web #. openerp-web @@ -1469,7 +1470,7 @@ msgstr "Erweiterte Suche" #: code:addons/web/static/src/xml/base.xml:308 #, python-format msgid "Confirm new master password:" -msgstr "Bestätigen Sie das neue Master Passwort:" +msgstr "Bestätigen Sie das neue Masterpasswort:" #. module: web #. openerp-web @@ -1574,7 +1575,7 @@ msgstr "'%s' ist kein gültiger Integer-Wert" #: code:addons/web/static/src/xml/base.xml:899 #, python-format msgid "All users" -msgstr "Für alle Benutzer" +msgstr "Alle Benutzer" #. module: web #. openerp-web @@ -1696,7 +1697,7 @@ msgstr "Bitte geben Sie Ihr neues Passwort ein" #: code:addons/web/static/src/js/view_form.js:5017 #, python-format msgid "The field is empty, there's nothing to save !" -msgstr "Das Feld ist leer, sie können nichts speichern!" +msgstr "Das Feld ist leer. Sie können nichts speichern!" #. module: web #. openerp-web @@ -1796,7 +1797,7 @@ msgstr "Erstelle: " #: code:addons/web/static/src/xml/base.xml:562 #, python-format msgid "View Fields" -msgstr "Ansicht Felder" +msgstr "Felder anzeigen" #. module: web #. openerp-web @@ -1810,7 +1811,7 @@ msgstr "Neues Passwort bestätigen:" #: code:addons/web/static/src/js/view_list.js:587 #, python-format msgid "Do you really want to remove these records?" -msgstr "Möchten Sie diese Datensätze wirklich löschen" +msgstr "Möchten Sie diese Datensätze wirklich löschen?" #. module: web #. openerp-web @@ -1861,7 +1862,7 @@ msgstr "OpenERP" #: code:addons/web/doc/module/static/src/xml/web_example.xml:8 #, python-format msgid "Stop" -msgstr "Stop" +msgstr "Stopp" #. module: web #. openerp-web @@ -1915,7 +1916,7 @@ msgstr "-- Filter --" #: code:addons/web/static/src/xml/base.xml:1260 #, python-format msgid "Clear" -msgstr "Suche Leeren" +msgstr "Suche löschen" #. module: web #. openerp-web @@ -1952,8 +1953,8 @@ msgid "" " You can export all data or only the fields that can be " "reimported after modification." msgstr "" -"Dieser Assistent wird alle Daten in eine CSV exportieren, die den aktuellen " -"Suchbedingungen entsprechen.\n" +"Dieser Assistent wird alle Daten in eine CSV Datei exportieren, die den " +"aktuellen Suchbedingungen entsprechen.\n" " Sie können alle Daten oder nur die Felder exportieren, die nach einer " "Bearbeitung wieder importiert werden können." @@ -1969,7 +1970,7 @@ msgstr "Der Datensatz konnte in der Datenbank nicht entdeckt werden." #: code:addons/web/static/src/xml/base.xml:1498 #, python-format msgid "Filter Name:" -msgstr "Filter Name:" +msgstr "Filtername:" #. module: web #. openerp-web @@ -2113,7 +2114,7 @@ msgstr "Datei:" #: code:addons/web/static/src/js/search.js:2122 #, python-format msgid "less than" -msgstr "ist kleiner als" +msgstr "ist weniger als" #. module: web #. openerp-web @@ -2135,7 +2136,7 @@ msgstr "Bearbeite Suchansicht" #: code:addons/web/static/src/js/search.js:2160 #, python-format msgid "is true" -msgstr "ist Wahr" +msgstr "ist wahr" #. module: web #. openerp-web @@ -2192,7 +2193,7 @@ msgstr "Kann Wert %s nicht in den Kontext konvertieren" #: code:addons/web/static/src/xml/base.xml:563 #, python-format msgid "Fields View Get" -msgstr "Feld Ansicht Definition" +msgstr "Ansicht der Felder aufrufen" #. module: web #. openerp-web @@ -2215,7 +2216,7 @@ msgstr "ist größer oder gleich als" #: code:addons/web/static/src/xml/base.xml:1349 #, python-format msgid "Button" -msgstr "Schaltfläche" +msgstr "Button" #. module: web #. openerp-web @@ -2236,7 +2237,7 @@ msgstr "Bitte wählen Sie Felder für den Export" #: code:addons/web/static/src/xml/base.xml:304 #, python-format msgid "New master password:" -msgstr "Neues Master Passwort:" +msgstr "Neues Masterpasswort:" #. module: web #. openerp-web @@ -2272,7 +2273,7 @@ msgstr "Kein Inhalt für das Feld '%s' am '%s:%s' gefunden" #: code:addons/web/static/src/xml/base.xml:322 #, python-format msgid "Database Management" -msgstr "Datenbank Verwaltung" +msgstr "Datenbankverwaltung" #. module: web #. openerp-web @@ -2293,7 +2294,7 @@ msgstr "Datenbanken verwalten" #: code:addons/web/static/src/js/pyeval.js:770 #, python-format msgid "Evaluation Error" -msgstr "Evalution Fehler" +msgstr "Evalutionsfehler" #. module: web #. openerp-web @@ -2525,7 +2526,7 @@ msgstr "" #: code:addons/web/static/src/xml/base.xml:583 #, python-format msgid "Creation User:" -msgstr "Benutzer Erstellung" +msgstr "Benutzer erstellen" #. module: web #. openerp-web @@ -2546,7 +2547,7 @@ msgstr "Speichern & Beenden" #: code:addons/web/static/src/js/view_form.js:2932 #, python-format msgid "Search More..." -msgstr "Mehr suchen" +msgstr "Weitere suchen..." #. module: web #. openerp-web diff --git a/addons/web/i18n/en_AU.po b/addons/web/i18n/en_AU.po index d9547ad1cde..44b6727bf93 100644 --- a/addons/web/i18n/en_AU.po +++ b/addons/web/i18n/en_AU.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/en_GB.po b/addons/web/i18n/en_GB.po index 48f2f6b77aa..3c4c2b14b40 100644 --- a/addons/web/i18n/en_GB.po +++ b/addons/web/i18n/en_GB.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/es.po b/addons/web/i18n/es.po index 24ac062be50..80dcbed17d0 100644 --- a/addons/web/i18n/es.po +++ b/addons/web/i18n/es.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/es_CL.po b/addons/web/i18n/es_CL.po index 9ee76014baf..cc5d2b7854e 100644 --- a/addons/web/i18n/es_CL.po +++ b/addons/web/i18n/es_CL.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/es_CR.po b/addons/web/i18n/es_CR.po index 31d7c476114..e35826ae260 100644 --- a/addons/web/i18n/es_CR.po +++ b/addons/web/i18n/es_CR.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" "Language: es\n" #. module: web diff --git a/addons/web/i18n/es_DO.po b/addons/web/i18n/es_DO.po index f54ca8b896d..3f3477532a2 100644 --- a/addons/web/i18n/es_DO.po +++ b/addons/web/i18n/es_DO.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/es_EC.po b/addons/web/i18n/es_EC.po index 5d6d594de6c..45bffa013d2 100644 --- a/addons/web/i18n/es_EC.po +++ b/addons/web/i18n/es_EC.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/es_MX.po b/addons/web/i18n/es_MX.po index 03eb711e64e..06dd3a02850 100644 --- a/addons/web/i18n/es_MX.po +++ b/addons/web/i18n/es_MX.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/es_PE.po b/addons/web/i18n/es_PE.po index 97d01461fa4..234fea210c6 100644 --- a/addons/web/i18n/es_PE.po +++ b/addons/web/i18n/es_PE.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/et.po b/addons/web/i18n/et.po index 86c8a4f598a..dc7814e2ca9 100644 --- a/addons/web/i18n/et.po +++ b/addons/web/i18n/et.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:56+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/eu.po b/addons/web/i18n/eu.po index e2bd7249357..ce409b1ab58 100644 --- a/addons/web/i18n/eu.po +++ b/addons/web/i18n/eu.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:56+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/fa.po b/addons/web/i18n/fa.po index 041fa4bcda6..fc7e0b38cb1 100644 --- a/addons/web/i18n/fa.po +++ b/addons/web/i18n/fa.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/fi.po b/addons/web/i18n/fi.po index 1b6df7ea9a2..6ac32e07f46 100644 --- a/addons/web/i18n/fi.po +++ b/addons/web/i18n/fi.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:56+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/fr.po b/addons/web/i18n/fr.po index 6fe8a5baf9a..8bb41b2d5b5 100644 --- a/addons/web/i18n/fr.po +++ b/addons/web/i18n/fr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:56+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/fr_CA.po b/addons/web/i18n/fr_CA.po index a46f676e809..83a3009f2d6 100644 --- a/addons/web/i18n/fr_CA.po +++ b/addons/web/i18n/fr_CA.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/gl.po b/addons/web/i18n/gl.po index 0b0649e94ea..e9fc6b24994 100644 --- a/addons/web/i18n/gl.po +++ b/addons/web/i18n/gl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:56+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/gu.po b/addons/web/i18n/gu.po index c491703fa92..ae83c879747 100644 --- a/addons/web/i18n/gu.po +++ b/addons/web/i18n/gu.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:56+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/he.po b/addons/web/i18n/he.po index 1e64d1a6371..3717273e55a 100644 --- a/addons/web/i18n/he.po +++ b/addons/web/i18n/he.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:56+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/hi.po b/addons/web/i18n/hi.po index bfaa6622f67..ad32265fd37 100644 --- a/addons/web/i18n/hi.po +++ b/addons/web/i18n/hi.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:56+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/hr.po b/addons/web/i18n/hr.po index fd6d661d707..35507525b56 100644 --- a/addons/web/i18n/hr.po +++ b/addons/web/i18n/hr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/hu.po b/addons/web/i18n/hu.po index 121783c6949..557e2b9be39 100644 --- a/addons/web/i18n/hu.po +++ b/addons/web/i18n/hu.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:56+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/id.po b/addons/web/i18n/id.po index 23f91d12db5..060dbaaf155 100644 --- a/addons/web/i18n/id.po +++ b/addons/web/i18n/id.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:56+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/it.po b/addons/web/i18n/it.po index 18e8ca045be..fca544b2854 100644 --- a/addons/web/i18n/it.po +++ b/addons/web/i18n/it.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:56+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/ja.po b/addons/web/i18n/ja.po index 1a12516061a..1945b99d0f3 100644 --- a/addons/web/i18n/ja.po +++ b/addons/web/i18n/ja.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/ka.po b/addons/web/i18n/ka.po index 92fc8eb5747..55bc0048468 100644 --- a/addons/web/i18n/ka.po +++ b/addons/web/i18n/ka.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:56+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/ko.po b/addons/web/i18n/ko.po index cb35cee57a7..27f3d58e77e 100644 --- a/addons/web/i18n/ko.po +++ b/addons/web/i18n/ko.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/lo.po b/addons/web/i18n/lo.po index b981485817f..8c8eaac1f49 100644 --- a/addons/web/i18n/lo.po +++ b/addons/web/i18n/lo.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/lt.po b/addons/web/i18n/lt.po index f9bb6a3de62..66a33884b1e 100644 --- a/addons/web/i18n/lt.po +++ b/addons/web/i18n/lt.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/lv.po b/addons/web/i18n/lv.po index 62eb24cedfd..41315df4194 100644 --- a/addons/web/i18n/lv.po +++ b/addons/web/i18n/lv.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/mk.po b/addons/web/i18n/mk.po index ab3e657f2e9..d0ed37cc199 100644 --- a/addons/web/i18n/mk.po +++ b/addons/web/i18n/mk.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/mn.po b/addons/web/i18n/mn.po index c43ba903890..867b66d6c54 100644 --- a/addons/web/i18n/mn.po +++ b/addons/web/i18n/mn.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/nb.po b/addons/web/i18n/nb.po index 4e71260b524..043634d172c 100644 --- a/addons/web/i18n/nb.po +++ b/addons/web/i18n/nb.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/nl.po b/addons/web/i18n/nl.po index bf95bf60af7..f6241921ff7 100644 --- a/addons/web/i18n/nl.po +++ b/addons/web/i18n/nl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:56+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/nl_BE.po b/addons/web/i18n/nl_BE.po index 1dc74c9dd08..7ab38b33799 100644 --- a/addons/web/i18n/nl_BE.po +++ b/addons/web/i18n/nl_BE.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/pl.po b/addons/web/i18n/pl.po index 749b6e5d398..ecba69029bd 100644 --- a/addons/web/i18n/pl.po +++ b/addons/web/i18n/pl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/pt.po b/addons/web/i18n/pt.po index 7b5f7c79c06..e3fbf7cd497 100644 --- a/addons/web/i18n/pt.po +++ b/addons/web/i18n/pt.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/pt_BR.po b/addons/web/i18n/pt_BR.po index 041413b9d81..d890a471d45 100644 --- a/addons/web/i18n/pt_BR.po +++ b/addons/web/i18n/pt_BR.po @@ -15,8 +15,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/ro.po b/addons/web/i18n/ro.po index 4daf0f35f67..aefa8fcc1e1 100644 --- a/addons/web/i18n/ro.po +++ b/addons/web/i18n/ro.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/ru.po b/addons/web/i18n/ru.po index 736bd114be9..11ac8dd03b6 100644 --- a/addons/web/i18n/ru.po +++ b/addons/web/i18n/ru.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/sk.po b/addons/web/i18n/sk.po index 2af0066acfb..5c2b7860d23 100644 --- a/addons/web/i18n/sk.po +++ b/addons/web/i18n/sk.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/sl.po b/addons/web/i18n/sl.po index 29566f7ed04..1698909b738 100644 --- a/addons/web/i18n/sl.po +++ b/addons/web/i18n/sl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/sq.po b/addons/web/i18n/sq.po index 48091c10b87..3e4e3891e43 100644 --- a/addons/web/i18n/sq.po +++ b/addons/web/i18n/sq.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:56+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/sr@latin.po b/addons/web/i18n/sr@latin.po index 40d545ce4b0..c1a051db2e8 100644 --- a/addons/web/i18n/sr@latin.po +++ b/addons/web/i18n/sr@latin.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/sv.po b/addons/web/i18n/sv.po index 0e1ba671d10..02477dbf250 100644 --- a/addons/web/i18n/sv.po +++ b/addons/web/i18n/sv.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/th.po b/addons/web/i18n/th.po index 8713097c04f..b21d8ec2b74 100644 --- a/addons/web/i18n/th.po +++ b/addons/web/i18n/th.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/tr.po b/addons/web/i18n/tr.po index 6b7ee296d60..c9bc9ecc225 100644 --- a/addons/web/i18n/tr.po +++ b/addons/web/i18n/tr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/uk.po b/addons/web/i18n/uk.po index 96dfa5972bb..38f8667bd4c 100644 --- a/addons/web/i18n/uk.po +++ b/addons/web/i18n/uk.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/vi.po b/addons/web/i18n/vi.po index 49c02e2a514..ea08e77aaa6 100644 --- a/addons/web/i18n/vi.po +++ b/addons/web/i18n/vi.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/zh_CN.po b/addons/web/i18n/zh_CN.po index 8a961136bcf..75678a3ec27 100644 --- a/addons/web/i18n/zh_CN.po +++ b/addons/web/i18n/zh_CN.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/zh_TW.po b/addons/web/i18n/zh_TW.po index 6d8294e4976..4886e970bd3 100644 --- a/addons/web/i18n/zh_TW.po +++ b/addons/web/i18n/zh_TW.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web #. openerp-web diff --git a/addons/web_calendar/i18n/ar.po b/addons/web_calendar/i18n/ar.po index d95b1b89a96..a2c84caaad5 100644 --- a/addons/web_calendar/i18n/ar.po +++ b/addons/web_calendar/i18n/ar.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/bg.po b/addons/web_calendar/i18n/bg.po index a6f2e016cf4..6a09a9098de 100644 --- a/addons/web_calendar/i18n/bg.po +++ b/addons/web_calendar/i18n/bg.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/bn.po b/addons/web_calendar/i18n/bn.po index 29934c42ab4..072de5710af 100644 --- a/addons/web_calendar/i18n/bn.po +++ b/addons/web_calendar/i18n/bn.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/bs.po b/addons/web_calendar/i18n/bs.po index 1f578d48e1a..d7927b05814 100644 --- a/addons/web_calendar/i18n/bs.po +++ b/addons/web_calendar/i18n/bs.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/ca.po b/addons/web_calendar/i18n/ca.po index 2d3f7569e4a..7b9b180f88d 100644 --- a/addons/web_calendar/i18n/ca.po +++ b/addons/web_calendar/i18n/ca.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/cs.po b/addons/web_calendar/i18n/cs.po index a48b805dcd2..088507f4c71 100644 --- a/addons/web_calendar/i18n/cs.po +++ b/addons/web_calendar/i18n/cs.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" "X-Poedit-Language: Czech\n" #. module: web_calendar diff --git a/addons/web_calendar/i18n/da.po b/addons/web_calendar/i18n/da.po index 05a4c4913b5..0edc30865f6 100644 --- a/addons/web_calendar/i18n/da.po +++ b/addons/web_calendar/i18n/da.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/de.po b/addons/web_calendar/i18n/de.po index 533ad52dab6..0a5fd9f8ab0 100644 --- a/addons/web_calendar/i18n/de.po +++ b/addons/web_calendar/i18n/de.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web @@ -43,9 +43,7 @@ msgstr "Speichern" #: code:addons/web_calendar/static/src/js/calendar.js:109 #, python-format msgid "Calendar view has a 'date_delay' type != float" -msgstr "" -"Kalender Ansicht hat eine Datum-Vezögerungs-Feld das nicht für type " -"\"Float\" ist" +msgstr "Kalenderansicht hat ein 'date_delay' type != float" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/en_AU.po b/addons/web_calendar/i18n/en_AU.po index e1879a3989b..429cf8d478c 100644 --- a/addons/web_calendar/i18n/en_AU.po +++ b/addons/web_calendar/i18n/en_AU.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/en_GB.po b/addons/web_calendar/i18n/en_GB.po index 77fee026378..eb5081f5618 100644 --- a/addons/web_calendar/i18n/en_GB.po +++ b/addons/web_calendar/i18n/en_GB.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/es.po b/addons/web_calendar/i18n/es.po index d1a16666e4c..6b9dae4fc07 100644 --- a/addons/web_calendar/i18n/es.po +++ b/addons/web_calendar/i18n/es.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/es_CL.po b/addons/web_calendar/i18n/es_CL.po index 6db0f7b4a3f..ead94c26856 100644 --- a/addons/web_calendar/i18n/es_CL.po +++ b/addons/web_calendar/i18n/es_CL.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/es_CR.po b/addons/web_calendar/i18n/es_CR.po index 1884a5e94a0..d629fa6a948 100644 --- a/addons/web_calendar/i18n/es_CR.po +++ b/addons/web_calendar/i18n/es_CR.po @@ -15,8 +15,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" "Language: es\n" #. module: web_calendar diff --git a/addons/web_calendar/i18n/es_DO.po b/addons/web_calendar/i18n/es_DO.po index a5910264859..8e660cab09c 100644 --- a/addons/web_calendar/i18n/es_DO.po +++ b/addons/web_calendar/i18n/es_DO.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/es_EC.po b/addons/web_calendar/i18n/es_EC.po index 19050d67077..f559e50d953 100644 --- a/addons/web_calendar/i18n/es_EC.po +++ b/addons/web_calendar/i18n/es_EC.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/es_MX.po b/addons/web_calendar/i18n/es_MX.po index 7cf50f647ec..fc291fb1261 100644 --- a/addons/web_calendar/i18n/es_MX.po +++ b/addons/web_calendar/i18n/es_MX.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/es_PE.po b/addons/web_calendar/i18n/es_PE.po index 184112e2075..cb0012ad1f4 100644 --- a/addons/web_calendar/i18n/es_PE.po +++ b/addons/web_calendar/i18n/es_PE.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/et.po b/addons/web_calendar/i18n/et.po index 8b694fef8a3..5c0059c6a02 100644 --- a/addons/web_calendar/i18n/et.po +++ b/addons/web_calendar/i18n/et.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/eu.po b/addons/web_calendar/i18n/eu.po index 7e023bcae7b..7e969fa3a86 100644 --- a/addons/web_calendar/i18n/eu.po +++ b/addons/web_calendar/i18n/eu.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/fa.po b/addons/web_calendar/i18n/fa.po index 36940ef7416..ce99a426d91 100644 --- a/addons/web_calendar/i18n/fa.po +++ b/addons/web_calendar/i18n/fa.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/fi.po b/addons/web_calendar/i18n/fi.po index ab8359053c8..f93cd86e325 100644 --- a/addons/web_calendar/i18n/fi.po +++ b/addons/web_calendar/i18n/fi.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/fr.po b/addons/web_calendar/i18n/fr.po index d91a8f23251..c4ca38348cc 100644 --- a/addons/web_calendar/i18n/fr.po +++ b/addons/web_calendar/i18n/fr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/fr_CA.po b/addons/web_calendar/i18n/fr_CA.po index c5e6ac5bd3c..872127be40a 100644 --- a/addons/web_calendar/i18n/fr_CA.po +++ b/addons/web_calendar/i18n/fr_CA.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/gl.po b/addons/web_calendar/i18n/gl.po index 5c0f2fc82c2..7a7143e4c20 100644 --- a/addons/web_calendar/i18n/gl.po +++ b/addons/web_calendar/i18n/gl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/gu.po b/addons/web_calendar/i18n/gu.po index 7d8dc92a254..75552e944a5 100644 --- a/addons/web_calendar/i18n/gu.po +++ b/addons/web_calendar/i18n/gu.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/hr.po b/addons/web_calendar/i18n/hr.po index 2235b30a924..b1c2e39a3bb 100644 --- a/addons/web_calendar/i18n/hr.po +++ b/addons/web_calendar/i18n/hr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/hu.po b/addons/web_calendar/i18n/hu.po index dcbe448a9c0..5f969c91d02 100644 --- a/addons/web_calendar/i18n/hu.po +++ b/addons/web_calendar/i18n/hu.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/id.po b/addons/web_calendar/i18n/id.po index ba92b7a81b2..ba5d17a15c3 100644 --- a/addons/web_calendar/i18n/id.po +++ b/addons/web_calendar/i18n/id.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/it.po b/addons/web_calendar/i18n/it.po index 4bdf316b4d7..cd4b3084400 100644 --- a/addons/web_calendar/i18n/it.po +++ b/addons/web_calendar/i18n/it.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/ja.po b/addons/web_calendar/i18n/ja.po index ea337786ecb..5412c6cffd4 100644 --- a/addons/web_calendar/i18n/ja.po +++ b/addons/web_calendar/i18n/ja.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/ka.po b/addons/web_calendar/i18n/ka.po index 6c72cdea7ca..aaa9c610910 100644 --- a/addons/web_calendar/i18n/ka.po +++ b/addons/web_calendar/i18n/ka.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/ko.po b/addons/web_calendar/i18n/ko.po index 7e2f55dcbf0..8b26d2e46f2 100644 --- a/addons/web_calendar/i18n/ko.po +++ b/addons/web_calendar/i18n/ko.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/lt.po b/addons/web_calendar/i18n/lt.po index 8154db25317..7c03629bef9 100644 --- a/addons/web_calendar/i18n/lt.po +++ b/addons/web_calendar/i18n/lt.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/mk.po b/addons/web_calendar/i18n/mk.po index 4e88a7ea7e4..89a0b413da5 100644 --- a/addons/web_calendar/i18n/mk.po +++ b/addons/web_calendar/i18n/mk.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/mn.po b/addons/web_calendar/i18n/mn.po index 36493818921..4690dede241 100644 --- a/addons/web_calendar/i18n/mn.po +++ b/addons/web_calendar/i18n/mn.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/nb.po b/addons/web_calendar/i18n/nb.po index 539312fc1d5..faf4a95a078 100644 --- a/addons/web_calendar/i18n/nb.po +++ b/addons/web_calendar/i18n/nb.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/nl.po b/addons/web_calendar/i18n/nl.po index 2b01735bf7e..6f705a208eb 100644 --- a/addons/web_calendar/i18n/nl.po +++ b/addons/web_calendar/i18n/nl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/nl_BE.po b/addons/web_calendar/i18n/nl_BE.po index d79bb1a37eb..6d62c6d5fbb 100644 --- a/addons/web_calendar/i18n/nl_BE.po +++ b/addons/web_calendar/i18n/nl_BE.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/pl.po b/addons/web_calendar/i18n/pl.po index b2dcdd8b60a..12db918676f 100644 --- a/addons/web_calendar/i18n/pl.po +++ b/addons/web_calendar/i18n/pl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/pt.po b/addons/web_calendar/i18n/pt.po index 7578f0c6218..9ab3c45c5ff 100644 --- a/addons/web_calendar/i18n/pt.po +++ b/addons/web_calendar/i18n/pt.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/pt_BR.po b/addons/web_calendar/i18n/pt_BR.po index f6bb4388aa6..3287dbca7ff 100644 --- a/addons/web_calendar/i18n/pt_BR.po +++ b/addons/web_calendar/i18n/pt_BR.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/ro.po b/addons/web_calendar/i18n/ro.po index b9990ab3941..a39402cf992 100644 --- a/addons/web_calendar/i18n/ro.po +++ b/addons/web_calendar/i18n/ro.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/ru.po b/addons/web_calendar/i18n/ru.po index 67260f94cff..7e36e019c51 100644 --- a/addons/web_calendar/i18n/ru.po +++ b/addons/web_calendar/i18n/ru.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/sk.po b/addons/web_calendar/i18n/sk.po index 427ff7cd50e..46f57561b5c 100644 --- a/addons/web_calendar/i18n/sk.po +++ b/addons/web_calendar/i18n/sk.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/sl.po b/addons/web_calendar/i18n/sl.po index 8da08391a20..49b5df3cd41 100644 --- a/addons/web_calendar/i18n/sl.po +++ b/addons/web_calendar/i18n/sl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/sq.po b/addons/web_calendar/i18n/sq.po index dff99ca64cb..5bf699a5672 100644 --- a/addons/web_calendar/i18n/sq.po +++ b/addons/web_calendar/i18n/sq.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:57+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/sr@latin.po b/addons/web_calendar/i18n/sr@latin.po index 962ea5ea600..0e15510ab21 100644 --- a/addons/web_calendar/i18n/sr@latin.po +++ b/addons/web_calendar/i18n/sr@latin.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/sv.po b/addons/web_calendar/i18n/sv.po index 30334dff0d1..1190d98d168 100644 --- a/addons/web_calendar/i18n/sv.po +++ b/addons/web_calendar/i18n/sv.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/th.po b/addons/web_calendar/i18n/th.po index aee94c44149..6f8fb802053 100644 --- a/addons/web_calendar/i18n/th.po +++ b/addons/web_calendar/i18n/th.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/tr.po b/addons/web_calendar/i18n/tr.po index 46e1c1ee80b..09aa137e184 100644 --- a/addons/web_calendar/i18n/tr.po +++ b/addons/web_calendar/i18n/tr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/uk.po b/addons/web_calendar/i18n/uk.po index 71adf5093a0..b0316ad34bf 100644 --- a/addons/web_calendar/i18n/uk.po +++ b/addons/web_calendar/i18n/uk.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/zh_CN.po b/addons/web_calendar/i18n/zh_CN.po index 0f1f0f7fd47..7eb8698e3e0 100644 --- a/addons/web_calendar/i18n/zh_CN.po +++ b/addons/web_calendar/i18n/zh_CN.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_calendar/i18n/zh_TW.po b/addons/web_calendar/i18n/zh_TW.po index 4583666c998..7ddcb527229 100644 --- a/addons/web_calendar/i18n/zh_TW.po +++ b/addons/web_calendar/i18n/zh_TW.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_calendar #. openerp-web diff --git a/addons/web_diagram/i18n/ar.po b/addons/web_diagram/i18n/ar.po index 2d2bca0f02f..42a7bd42f59 100644 --- a/addons/web_diagram/i18n/ar.po +++ b/addons/web_diagram/i18n/ar.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/bg.po b/addons/web_diagram/i18n/bg.po index 90773064058..5c8e3282b2f 100644 --- a/addons/web_diagram/i18n/bg.po +++ b/addons/web_diagram/i18n/bg.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/bn.po b/addons/web_diagram/i18n/bn.po index 179c14f1779..ba043e3c684 100644 --- a/addons/web_diagram/i18n/bn.po +++ b/addons/web_diagram/i18n/bn.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/bs.po b/addons/web_diagram/i18n/bs.po index ac4d744de74..a80ca4bcf46 100644 --- a/addons/web_diagram/i18n/bs.po +++ b/addons/web_diagram/i18n/bs.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/ca.po b/addons/web_diagram/i18n/ca.po index 73ea592283d..649a7985f62 100644 --- a/addons/web_diagram/i18n/ca.po +++ b/addons/web_diagram/i18n/ca.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/cs.po b/addons/web_diagram/i18n/cs.po index 37dee065cfb..9cb6c99a439 100644 --- a/addons/web_diagram/i18n/cs.po +++ b/addons/web_diagram/i18n/cs.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" "X-Poedit-Language: Czech\n" #. module: web_diagram diff --git a/addons/web_diagram/i18n/da.po b/addons/web_diagram/i18n/da.po index 4bb2b5f6583..f31fb749527 100644 --- a/addons/web_diagram/i18n/da.po +++ b/addons/web_diagram/i18n/da.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/de.po b/addons/web_diagram/i18n/de.po index 8791e50f3c1..b2b038a8073 100644 --- a/addons/web_diagram/i18n/de.po +++ b/addons/web_diagram/i18n/de.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web @@ -36,7 +36,7 @@ msgid "" "Are you sure ?" msgstr "" "Die Löschung dieses Knotens kann nicht widerrufen werden.\n" -"Es werden ebenfalls alls verbundenen Vorgänge gelöscht.\n" +"Es werden ebenfalls alle verbundenen Vorgänge gelöscht.\n" "\n" "Sind Sie sich sicher?" diff --git a/addons/web_diagram/i18n/en_AU.po b/addons/web_diagram/i18n/en_AU.po index 60ff42ba126..c9e414b0548 100644 --- a/addons/web_diagram/i18n/en_AU.po +++ b/addons/web_diagram/i18n/en_AU.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/en_GB.po b/addons/web_diagram/i18n/en_GB.po index 553db76d976..6e8b9ed12ce 100644 --- a/addons/web_diagram/i18n/en_GB.po +++ b/addons/web_diagram/i18n/en_GB.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/es.po b/addons/web_diagram/i18n/es.po index 04187450902..b9489f4a796 100644 --- a/addons/web_diagram/i18n/es.po +++ b/addons/web_diagram/i18n/es.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/es_CL.po b/addons/web_diagram/i18n/es_CL.po index 593c69ef535..231ab4b8b84 100644 --- a/addons/web_diagram/i18n/es_CL.po +++ b/addons/web_diagram/i18n/es_CL.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/es_CR.po b/addons/web_diagram/i18n/es_CR.po index 2e78593361b..a49cd8cf59f 100644 --- a/addons/web_diagram/i18n/es_CR.po +++ b/addons/web_diagram/i18n/es_CR.po @@ -15,8 +15,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" "Language: es\n" #. module: web_diagram diff --git a/addons/web_diagram/i18n/es_DO.po b/addons/web_diagram/i18n/es_DO.po index 91c9fae988b..d267de6245e 100644 --- a/addons/web_diagram/i18n/es_DO.po +++ b/addons/web_diagram/i18n/es_DO.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/es_EC.po b/addons/web_diagram/i18n/es_EC.po index 10b17a7323e..ffd6ae52109 100644 --- a/addons/web_diagram/i18n/es_EC.po +++ b/addons/web_diagram/i18n/es_EC.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/es_MX.po b/addons/web_diagram/i18n/es_MX.po index 62b36dcfe7b..e65c461a834 100644 --- a/addons/web_diagram/i18n/es_MX.po +++ b/addons/web_diagram/i18n/es_MX.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/es_PE.po b/addons/web_diagram/i18n/es_PE.po index 8c95d67a8ea..b909ad42edd 100644 --- a/addons/web_diagram/i18n/es_PE.po +++ b/addons/web_diagram/i18n/es_PE.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/et.po b/addons/web_diagram/i18n/et.po index a6bd9b5b5a5..783fbc985f0 100644 --- a/addons/web_diagram/i18n/et.po +++ b/addons/web_diagram/i18n/et.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/fa.po b/addons/web_diagram/i18n/fa.po index 1e09a0a16a7..4cf35ee49f5 100644 --- a/addons/web_diagram/i18n/fa.po +++ b/addons/web_diagram/i18n/fa.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/fi.po b/addons/web_diagram/i18n/fi.po index 0667da0f3bc..0c205755504 100644 --- a/addons/web_diagram/i18n/fi.po +++ b/addons/web_diagram/i18n/fi.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/fr.po b/addons/web_diagram/i18n/fr.po index e82fb7ab3b2..e9152d8451e 100644 --- a/addons/web_diagram/i18n/fr.po +++ b/addons/web_diagram/i18n/fr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/gl.po b/addons/web_diagram/i18n/gl.po index ee7a3b0fef3..cd803f91633 100644 --- a/addons/web_diagram/i18n/gl.po +++ b/addons/web_diagram/i18n/gl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/gu.po b/addons/web_diagram/i18n/gu.po index 1126b7d7646..becec3e93e9 100644 --- a/addons/web_diagram/i18n/gu.po +++ b/addons/web_diagram/i18n/gu.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/hr.po b/addons/web_diagram/i18n/hr.po index 4eb30151eb2..6039905f0bd 100644 --- a/addons/web_diagram/i18n/hr.po +++ b/addons/web_diagram/i18n/hr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/hu.po b/addons/web_diagram/i18n/hu.po index 1e26c89a689..8374036c5d1 100644 --- a/addons/web_diagram/i18n/hu.po +++ b/addons/web_diagram/i18n/hu.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/id.po b/addons/web_diagram/i18n/id.po index 4a650face88..2b6f9654c90 100644 --- a/addons/web_diagram/i18n/id.po +++ b/addons/web_diagram/i18n/id.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/it.po b/addons/web_diagram/i18n/it.po index a59ddd2659b..bbb90a829c9 100644 --- a/addons/web_diagram/i18n/it.po +++ b/addons/web_diagram/i18n/it.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/ja.po b/addons/web_diagram/i18n/ja.po index 83ffc755e42..735f78354e2 100644 --- a/addons/web_diagram/i18n/ja.po +++ b/addons/web_diagram/i18n/ja.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/ka.po b/addons/web_diagram/i18n/ka.po index 7c33e179a65..f41e4f13553 100644 --- a/addons/web_diagram/i18n/ka.po +++ b/addons/web_diagram/i18n/ka.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/ko.po b/addons/web_diagram/i18n/ko.po index 884498f4740..231f96f396f 100644 --- a/addons/web_diagram/i18n/ko.po +++ b/addons/web_diagram/i18n/ko.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/lt.po b/addons/web_diagram/i18n/lt.po index ac088a7be80..4456b686a50 100644 --- a/addons/web_diagram/i18n/lt.po +++ b/addons/web_diagram/i18n/lt.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/mk.po b/addons/web_diagram/i18n/mk.po index f84d583d926..4912a7ab8d7 100644 --- a/addons/web_diagram/i18n/mk.po +++ b/addons/web_diagram/i18n/mk.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/mn.po b/addons/web_diagram/i18n/mn.po index 0e00810fbe5..f8476123213 100644 --- a/addons/web_diagram/i18n/mn.po +++ b/addons/web_diagram/i18n/mn.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/nb.po b/addons/web_diagram/i18n/nb.po index fcde764a86f..3d001e4bd1b 100644 --- a/addons/web_diagram/i18n/nb.po +++ b/addons/web_diagram/i18n/nb.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/nl.po b/addons/web_diagram/i18n/nl.po index 3be359e4ea1..bfc8a1a016b 100644 --- a/addons/web_diagram/i18n/nl.po +++ b/addons/web_diagram/i18n/nl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/nl_BE.po b/addons/web_diagram/i18n/nl_BE.po index 71359610ebb..1c98a7ab78d 100644 --- a/addons/web_diagram/i18n/nl_BE.po +++ b/addons/web_diagram/i18n/nl_BE.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/pl.po b/addons/web_diagram/i18n/pl.po index ddd31afd035..a42a2a72f9c 100644 --- a/addons/web_diagram/i18n/pl.po +++ b/addons/web_diagram/i18n/pl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/pt.po b/addons/web_diagram/i18n/pt.po index 09c8ab529f9..c7261f27b27 100644 --- a/addons/web_diagram/i18n/pt.po +++ b/addons/web_diagram/i18n/pt.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/pt_BR.po b/addons/web_diagram/i18n/pt_BR.po index bba8001829a..6588fa4eb1a 100644 --- a/addons/web_diagram/i18n/pt_BR.po +++ b/addons/web_diagram/i18n/pt_BR.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/ro.po b/addons/web_diagram/i18n/ro.po index 1e1276e51c2..cdbe4c43e39 100644 --- a/addons/web_diagram/i18n/ro.po +++ b/addons/web_diagram/i18n/ro.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/ru.po b/addons/web_diagram/i18n/ru.po index c0af2b747a6..47b69e3c93f 100644 --- a/addons/web_diagram/i18n/ru.po +++ b/addons/web_diagram/i18n/ru.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/sl.po b/addons/web_diagram/i18n/sl.po index 44a07d9ea52..55f9f090359 100644 --- a/addons/web_diagram/i18n/sl.po +++ b/addons/web_diagram/i18n/sl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/sq.po b/addons/web_diagram/i18n/sq.po index 539d5938cc9..60499529af3 100644 --- a/addons/web_diagram/i18n/sq.po +++ b/addons/web_diagram/i18n/sq.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/sr@latin.po b/addons/web_diagram/i18n/sr@latin.po index 795c332d7ef..1e1ffd23465 100644 --- a/addons/web_diagram/i18n/sr@latin.po +++ b/addons/web_diagram/i18n/sr@latin.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/sv.po b/addons/web_diagram/i18n/sv.po index 676543b60ca..259ec490045 100644 --- a/addons/web_diagram/i18n/sv.po +++ b/addons/web_diagram/i18n/sv.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/th.po b/addons/web_diagram/i18n/th.po index f18c78bf2f8..d364a3cba98 100644 --- a/addons/web_diagram/i18n/th.po +++ b/addons/web_diagram/i18n/th.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/tr.po b/addons/web_diagram/i18n/tr.po index 8f80688680f..7c92da4956a 100644 --- a/addons/web_diagram/i18n/tr.po +++ b/addons/web_diagram/i18n/tr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/zh_CN.po b/addons/web_diagram/i18n/zh_CN.po index eb8818b934f..e85f119a2f5 100644 --- a/addons/web_diagram/i18n/zh_CN.po +++ b/addons/web_diagram/i18n/zh_CN.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_diagram/i18n/zh_TW.po b/addons/web_diagram/i18n/zh_TW.po index 0e9babbc51e..3ee998b1f3b 100644 --- a/addons/web_diagram/i18n/zh_TW.po +++ b/addons/web_diagram/i18n/zh_TW.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_diagram #. openerp-web diff --git a/addons/web_gantt/i18n/ar.po b/addons/web_gantt/i18n/ar.po index e961d2eef32..9911018ea50 100644 --- a/addons/web_gantt/i18n/ar.po +++ b/addons/web_gantt/i18n/ar.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/bg.po b/addons/web_gantt/i18n/bg.po index af8c1b09f02..ea0e3da0e06 100644 --- a/addons/web_gantt/i18n/bg.po +++ b/addons/web_gantt/i18n/bg.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/bn.po b/addons/web_gantt/i18n/bn.po index 9cbaa46f1b6..40256c67baf 100644 --- a/addons/web_gantt/i18n/bn.po +++ b/addons/web_gantt/i18n/bn.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/bs.po b/addons/web_gantt/i18n/bs.po index 813791d1459..fd48d8d4d80 100644 --- a/addons/web_gantt/i18n/bs.po +++ b/addons/web_gantt/i18n/bs.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/ca.po b/addons/web_gantt/i18n/ca.po index f29c532b1b3..1c0f32e8d31 100644 --- a/addons/web_gantt/i18n/ca.po +++ b/addons/web_gantt/i18n/ca.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/cs.po b/addons/web_gantt/i18n/cs.po index 18697ec2ff8..6df43c2499e 100644 --- a/addons/web_gantt/i18n/cs.po +++ b/addons/web_gantt/i18n/cs.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" "X-Poedit-Language: Czech\n" #. module: web_gantt diff --git a/addons/web_gantt/i18n/da.po b/addons/web_gantt/i18n/da.po index e8bf0a667fd..342d49b8525 100644 --- a/addons/web_gantt/i18n/da.po +++ b/addons/web_gantt/i18n/da.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/de.po b/addons/web_gantt/i18n/de.po index 5041848963a..33a5869b63d 100644 --- a/addons/web_gantt/i18n/de.po +++ b/addons/web_gantt/i18n/de.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/en_AU.po b/addons/web_gantt/i18n/en_AU.po index 5c2095d8275..a69a9306aee 100644 --- a/addons/web_gantt/i18n/en_AU.po +++ b/addons/web_gantt/i18n/en_AU.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/en_GB.po b/addons/web_gantt/i18n/en_GB.po index bd0af9d4867..b89d0fa084b 100644 --- a/addons/web_gantt/i18n/en_GB.po +++ b/addons/web_gantt/i18n/en_GB.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/es.po b/addons/web_gantt/i18n/es.po index 6def22b90fd..6ef47f3818d 100644 --- a/addons/web_gantt/i18n/es.po +++ b/addons/web_gantt/i18n/es.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/es_CL.po b/addons/web_gantt/i18n/es_CL.po index c81a0850548..2ff77b9cd31 100644 --- a/addons/web_gantt/i18n/es_CL.po +++ b/addons/web_gantt/i18n/es_CL.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/es_CR.po b/addons/web_gantt/i18n/es_CR.po index 874bcb25392..6f469d6969f 100644 --- a/addons/web_gantt/i18n/es_CR.po +++ b/addons/web_gantt/i18n/es_CR.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/es_DO.po b/addons/web_gantt/i18n/es_DO.po index f6975bba4b7..8d2f7a34382 100644 --- a/addons/web_gantt/i18n/es_DO.po +++ b/addons/web_gantt/i18n/es_DO.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/es_EC.po b/addons/web_gantt/i18n/es_EC.po index 6c4d0150928..e7176103c7b 100644 --- a/addons/web_gantt/i18n/es_EC.po +++ b/addons/web_gantt/i18n/es_EC.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/es_MX.po b/addons/web_gantt/i18n/es_MX.po index 30f0ab7d9ae..4cb07ce81aa 100644 --- a/addons/web_gantt/i18n/es_MX.po +++ b/addons/web_gantt/i18n/es_MX.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/et.po b/addons/web_gantt/i18n/et.po index 3382e80fd9c..b5eee9933ca 100644 --- a/addons/web_gantt/i18n/et.po +++ b/addons/web_gantt/i18n/et.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/fa.po b/addons/web_gantt/i18n/fa.po index 82ec61832f2..2bbda94d2d1 100644 --- a/addons/web_gantt/i18n/fa.po +++ b/addons/web_gantt/i18n/fa.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/fi.po b/addons/web_gantt/i18n/fi.po index 8e3209653d3..4cfca092419 100644 --- a/addons/web_gantt/i18n/fi.po +++ b/addons/web_gantt/i18n/fi.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/fr.po b/addons/web_gantt/i18n/fr.po index c8a6bfe46a9..80de73b7e25 100644 --- a/addons/web_gantt/i18n/fr.po +++ b/addons/web_gantt/i18n/fr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/gl.po b/addons/web_gantt/i18n/gl.po index c4eddf7b99c..f38e64c5b26 100644 --- a/addons/web_gantt/i18n/gl.po +++ b/addons/web_gantt/i18n/gl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/gu.po b/addons/web_gantt/i18n/gu.po index 4d7650133b7..16b5a429f77 100644 --- a/addons/web_gantt/i18n/gu.po +++ b/addons/web_gantt/i18n/gu.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/he.po b/addons/web_gantt/i18n/he.po index df6d0d7fa09..85aa8ee693b 100644 --- a/addons/web_gantt/i18n/he.po +++ b/addons/web_gantt/i18n/he.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/hr.po b/addons/web_gantt/i18n/hr.po index 0d0631aaf6c..d10f4692e0a 100644 --- a/addons/web_gantt/i18n/hr.po +++ b/addons/web_gantt/i18n/hr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/hu.po b/addons/web_gantt/i18n/hu.po index 2a1ac0aa7c1..d1fd02875e3 100644 --- a/addons/web_gantt/i18n/hu.po +++ b/addons/web_gantt/i18n/hu.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/it.po b/addons/web_gantt/i18n/it.po index d74dd619a90..d803cb6c36a 100644 --- a/addons/web_gantt/i18n/it.po +++ b/addons/web_gantt/i18n/it.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/ja.po b/addons/web_gantt/i18n/ja.po index b13512a46c9..664871f06dd 100644 --- a/addons/web_gantt/i18n/ja.po +++ b/addons/web_gantt/i18n/ja.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/ka.po b/addons/web_gantt/i18n/ka.po index e3b4b507582..201328d49fb 100644 --- a/addons/web_gantt/i18n/ka.po +++ b/addons/web_gantt/i18n/ka.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/ko.po b/addons/web_gantt/i18n/ko.po index b29ab77149f..a3ade594741 100644 --- a/addons/web_gantt/i18n/ko.po +++ b/addons/web_gantt/i18n/ko.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/lo.po b/addons/web_gantt/i18n/lo.po index 8e080b2697a..b708e69219e 100644 --- a/addons/web_gantt/i18n/lo.po +++ b/addons/web_gantt/i18n/lo.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/lt.po b/addons/web_gantt/i18n/lt.po index f736595b3b2..b352bce428f 100644 --- a/addons/web_gantt/i18n/lt.po +++ b/addons/web_gantt/i18n/lt.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/mk.po b/addons/web_gantt/i18n/mk.po index 70784859754..f763b70d752 100644 --- a/addons/web_gantt/i18n/mk.po +++ b/addons/web_gantt/i18n/mk.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/mn.po b/addons/web_gantt/i18n/mn.po index d2b33c20199..95480336078 100644 --- a/addons/web_gantt/i18n/mn.po +++ b/addons/web_gantt/i18n/mn.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/nb.po b/addons/web_gantt/i18n/nb.po index 5e10d7ff9d4..9097d4f1418 100644 --- a/addons/web_gantt/i18n/nb.po +++ b/addons/web_gantt/i18n/nb.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/nl.po b/addons/web_gantt/i18n/nl.po index 88e6e98adc1..8fb149f6c17 100644 --- a/addons/web_gantt/i18n/nl.po +++ b/addons/web_gantt/i18n/nl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/nl_BE.po b/addons/web_gantt/i18n/nl_BE.po index cf68723bc40..e69380e86ab 100644 --- a/addons/web_gantt/i18n/nl_BE.po +++ b/addons/web_gantt/i18n/nl_BE.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/pl.po b/addons/web_gantt/i18n/pl.po index 7535b253e89..bd2ae40e30b 100644 --- a/addons/web_gantt/i18n/pl.po +++ b/addons/web_gantt/i18n/pl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/pt.po b/addons/web_gantt/i18n/pt.po index 06dbedfe62b..a4b25ceb87e 100644 --- a/addons/web_gantt/i18n/pt.po +++ b/addons/web_gantt/i18n/pt.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/pt_BR.po b/addons/web_gantt/i18n/pt_BR.po index 35f5e4d6fb4..0bf07553543 100644 --- a/addons/web_gantt/i18n/pt_BR.po +++ b/addons/web_gantt/i18n/pt_BR.po @@ -15,8 +15,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/ro.po b/addons/web_gantt/i18n/ro.po index 11cffeb4027..52ceb86236f 100644 --- a/addons/web_gantt/i18n/ro.po +++ b/addons/web_gantt/i18n/ro.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/ru.po b/addons/web_gantt/i18n/ru.po index afc72cc0ee5..3b561287d22 100644 --- a/addons/web_gantt/i18n/ru.po +++ b/addons/web_gantt/i18n/ru.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/sl.po b/addons/web_gantt/i18n/sl.po index 7551d5a58f3..7bd736a2dcf 100644 --- a/addons/web_gantt/i18n/sl.po +++ b/addons/web_gantt/i18n/sl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/sq.po b/addons/web_gantt/i18n/sq.po index 24bcdc3ca14..746b1140638 100644 --- a/addons/web_gantt/i18n/sq.po +++ b/addons/web_gantt/i18n/sq.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/sr@latin.po b/addons/web_gantt/i18n/sr@latin.po index 15b7e473e2f..4ee87f72c6c 100644 --- a/addons/web_gantt/i18n/sr@latin.po +++ b/addons/web_gantt/i18n/sr@latin.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/sv.po b/addons/web_gantt/i18n/sv.po index 49c463443fe..6d852061945 100644 --- a/addons/web_gantt/i18n/sv.po +++ b/addons/web_gantt/i18n/sv.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/th.po b/addons/web_gantt/i18n/th.po index 38b9167d0f8..7594d57ede7 100644 --- a/addons/web_gantt/i18n/th.po +++ b/addons/web_gantt/i18n/th.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/tr.po b/addons/web_gantt/i18n/tr.po index 90d70231f62..7a46e0a50ba 100644 --- a/addons/web_gantt/i18n/tr.po +++ b/addons/web_gantt/i18n/tr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_gantt/i18n/zh_CN.po b/addons/web_gantt/i18n/zh_CN.po index 08cee96b938..77002000ab8 100644 --- a/addons/web_gantt/i18n/zh_CN.po +++ b/addons/web_gantt/i18n/zh_CN.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_gantt #. openerp-web diff --git a/addons/web_graph/i18n/ar.po b/addons/web_graph/i18n/ar.po index f48a8647eab..1b80691a807 100644 --- a/addons/web_graph/i18n/ar.po +++ b/addons/web_graph/i18n/ar.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/bg.po b/addons/web_graph/i18n/bg.po index 89fcc25f674..c6b10a795d7 100644 --- a/addons/web_graph/i18n/bg.po +++ b/addons/web_graph/i18n/bg.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/bn.po b/addons/web_graph/i18n/bn.po index 58a17dd1d08..a7dde793bb9 100644 --- a/addons/web_graph/i18n/bn.po +++ b/addons/web_graph/i18n/bn.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/bs.po b/addons/web_graph/i18n/bs.po index 30e414a8c59..5d48e6b8bc4 100644 --- a/addons/web_graph/i18n/bs.po +++ b/addons/web_graph/i18n/bs.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/ca.po b/addons/web_graph/i18n/ca.po index 50d242936ab..06c0dc2f855 100644 --- a/addons/web_graph/i18n/ca.po +++ b/addons/web_graph/i18n/ca.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/cs.po b/addons/web_graph/i18n/cs.po index 9e8ce26f858..ad7d4555f70 100644 --- a/addons/web_graph/i18n/cs.po +++ b/addons/web_graph/i18n/cs.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/da.po b/addons/web_graph/i18n/da.po index 88fdc0e966f..204b24fa911 100644 --- a/addons/web_graph/i18n/da.po +++ b/addons/web_graph/i18n/da.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/de.po b/addons/web_graph/i18n/de.po index 5b6a4ca1def..3bd8c592a82 100644 --- a/addons/web_graph/i18n/de.po +++ b/addons/web_graph/i18n/de.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web @@ -71,7 +71,7 @@ msgstr "Aktionen" #: code:addons/web_graph/static/src/xml/web_graph.xml:7 #, python-format msgid "Graph Mode" -msgstr "Diagramm Ansicht" +msgstr "Diagrammansicht" #. module: web_graph #. openerp-web @@ -106,7 +106,7 @@ msgstr "Versteckt" #: code:addons/web_graph/static/src/xml/web_graph.xml:3 #, python-format msgid "Graph Options" -msgstr "Diagramm Optionen" +msgstr "Diagrammoptionen" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/en_AU.po b/addons/web_graph/i18n/en_AU.po index 5a39fe3fddb..1d3d5605607 100644 --- a/addons/web_graph/i18n/en_AU.po +++ b/addons/web_graph/i18n/en_AU.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/en_GB.po b/addons/web_graph/i18n/en_GB.po index 09a5d3e4ca0..41c48fd250e 100644 --- a/addons/web_graph/i18n/en_GB.po +++ b/addons/web_graph/i18n/en_GB.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/es.po b/addons/web_graph/i18n/es.po index 5029f085394..f36eb9ac017 100644 --- a/addons/web_graph/i18n/es.po +++ b/addons/web_graph/i18n/es.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/es_CL.po b/addons/web_graph/i18n/es_CL.po index 6e0ae2b5ee1..a2048d7c2a0 100644 --- a/addons/web_graph/i18n/es_CL.po +++ b/addons/web_graph/i18n/es_CL.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/es_CR.po b/addons/web_graph/i18n/es_CR.po index 19c00e76b85..61fb3fe248a 100644 --- a/addons/web_graph/i18n/es_CR.po +++ b/addons/web_graph/i18n/es_CR.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/es_DO.po b/addons/web_graph/i18n/es_DO.po index 8fe185b9968..2acfce74dec 100644 --- a/addons/web_graph/i18n/es_DO.po +++ b/addons/web_graph/i18n/es_DO.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/es_EC.po b/addons/web_graph/i18n/es_EC.po index 494e5628b54..189fc083180 100644 --- a/addons/web_graph/i18n/es_EC.po +++ b/addons/web_graph/i18n/es_EC.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/es_MX.po b/addons/web_graph/i18n/es_MX.po index 8c76fd0a298..4de8adad6ad 100644 --- a/addons/web_graph/i18n/es_MX.po +++ b/addons/web_graph/i18n/es_MX.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/et.po b/addons/web_graph/i18n/et.po index ba4ee785c5c..527aa553b54 100644 --- a/addons/web_graph/i18n/et.po +++ b/addons/web_graph/i18n/et.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/fa.po b/addons/web_graph/i18n/fa.po index 41fd7240b50..4d06afdcfe3 100644 --- a/addons/web_graph/i18n/fa.po +++ b/addons/web_graph/i18n/fa.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/fi.po b/addons/web_graph/i18n/fi.po index c1cfbfd056e..3cfeb34fb09 100644 --- a/addons/web_graph/i18n/fi.po +++ b/addons/web_graph/i18n/fi.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/fr.po b/addons/web_graph/i18n/fr.po index 52de9587fda..eb8272a150c 100644 --- a/addons/web_graph/i18n/fr.po +++ b/addons/web_graph/i18n/fr.po @@ -15,8 +15,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/fr_CA.po b/addons/web_graph/i18n/fr_CA.po index 20c26855358..ce6a74e4b7c 100644 --- a/addons/web_graph/i18n/fr_CA.po +++ b/addons/web_graph/i18n/fr_CA.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/gl.po b/addons/web_graph/i18n/gl.po index 42e1afe436f..2dbb56cb0c2 100644 --- a/addons/web_graph/i18n/gl.po +++ b/addons/web_graph/i18n/gl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/gu.po b/addons/web_graph/i18n/gu.po index ae20f960810..fdffe2a3973 100644 --- a/addons/web_graph/i18n/gu.po +++ b/addons/web_graph/i18n/gu.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/he.po b/addons/web_graph/i18n/he.po index 38f8d254a11..9fcc928725e 100644 --- a/addons/web_graph/i18n/he.po +++ b/addons/web_graph/i18n/he.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/hr.po b/addons/web_graph/i18n/hr.po index aba82286bb9..9259bc99633 100644 --- a/addons/web_graph/i18n/hr.po +++ b/addons/web_graph/i18n/hr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/hu.po b/addons/web_graph/i18n/hu.po index fa4f5398860..7a4ae3a30e4 100644 --- a/addons/web_graph/i18n/hu.po +++ b/addons/web_graph/i18n/hu.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/it.po b/addons/web_graph/i18n/it.po index e2d3ec96966..b6dda4e77bb 100644 --- a/addons/web_graph/i18n/it.po +++ b/addons/web_graph/i18n/it.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/ja.po b/addons/web_graph/i18n/ja.po index 4fef520e251..b9fcdedabf6 100644 --- a/addons/web_graph/i18n/ja.po +++ b/addons/web_graph/i18n/ja.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/ka.po b/addons/web_graph/i18n/ka.po index 25cb23e0b30..916a561a743 100644 --- a/addons/web_graph/i18n/ka.po +++ b/addons/web_graph/i18n/ka.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/ko.po b/addons/web_graph/i18n/ko.po index b740c32eb46..e1add495838 100644 --- a/addons/web_graph/i18n/ko.po +++ b/addons/web_graph/i18n/ko.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/lt.po b/addons/web_graph/i18n/lt.po index 634e5e4e086..f624c6044c7 100644 --- a/addons/web_graph/i18n/lt.po +++ b/addons/web_graph/i18n/lt.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/mk.po b/addons/web_graph/i18n/mk.po index 8dce217248d..1e2e7d8edff 100644 --- a/addons/web_graph/i18n/mk.po +++ b/addons/web_graph/i18n/mk.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/mn.po b/addons/web_graph/i18n/mn.po index 83d028461f2..d3e510a7c67 100644 --- a/addons/web_graph/i18n/mn.po +++ b/addons/web_graph/i18n/mn.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/nb.po b/addons/web_graph/i18n/nb.po index 118ccbe98bd..b5c3747cb20 100644 --- a/addons/web_graph/i18n/nb.po +++ b/addons/web_graph/i18n/nb.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/nl.po b/addons/web_graph/i18n/nl.po index 41958c3996c..ffc7d1a5d72 100644 --- a/addons/web_graph/i18n/nl.po +++ b/addons/web_graph/i18n/nl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/nl_BE.po b/addons/web_graph/i18n/nl_BE.po index 95028987097..e1fc4211dd0 100644 --- a/addons/web_graph/i18n/nl_BE.po +++ b/addons/web_graph/i18n/nl_BE.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/pl.po b/addons/web_graph/i18n/pl.po index c64aa3201f2..72369f33e3e 100644 --- a/addons/web_graph/i18n/pl.po +++ b/addons/web_graph/i18n/pl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/pt.po b/addons/web_graph/i18n/pt.po index 94646471876..b19629bad54 100644 --- a/addons/web_graph/i18n/pt.po +++ b/addons/web_graph/i18n/pt.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/pt_BR.po b/addons/web_graph/i18n/pt_BR.po index a242fe6dc0c..463283c08fe 100644 --- a/addons/web_graph/i18n/pt_BR.po +++ b/addons/web_graph/i18n/pt_BR.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/ro.po b/addons/web_graph/i18n/ro.po index a85618aaf6f..a88ce8e668b 100644 --- a/addons/web_graph/i18n/ro.po +++ b/addons/web_graph/i18n/ro.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/ru.po b/addons/web_graph/i18n/ru.po index a717300acc2..9410e052f4e 100644 --- a/addons/web_graph/i18n/ru.po +++ b/addons/web_graph/i18n/ru.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/sl.po b/addons/web_graph/i18n/sl.po index 8b919689885..04ac86eaaea 100644 --- a/addons/web_graph/i18n/sl.po +++ b/addons/web_graph/i18n/sl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/sq.po b/addons/web_graph/i18n/sq.po index 717e1757a7a..080727613f6 100644 --- a/addons/web_graph/i18n/sq.po +++ b/addons/web_graph/i18n/sq.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/sr@latin.po b/addons/web_graph/i18n/sr@latin.po index ccf9b237cc9..66c95b2bc59 100644 --- a/addons/web_graph/i18n/sr@latin.po +++ b/addons/web_graph/i18n/sr@latin.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/sv.po b/addons/web_graph/i18n/sv.po index d181ab6d074..239c8e68813 100644 --- a/addons/web_graph/i18n/sv.po +++ b/addons/web_graph/i18n/sv.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/th.po b/addons/web_graph/i18n/th.po index 78447fe36fe..9c403ff8de9 100644 --- a/addons/web_graph/i18n/th.po +++ b/addons/web_graph/i18n/th.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/tr.po b/addons/web_graph/i18n/tr.po index 7bd7237d375..76812f67da9 100644 --- a/addons/web_graph/i18n/tr.po +++ b/addons/web_graph/i18n/tr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/i18n/zh_CN.po b/addons/web_graph/i18n/zh_CN.po index 837e7d08382..d5fbde837fc 100644 --- a/addons/web_graph/i18n/zh_CN.po +++ b/addons/web_graph/i18n/zh_CN.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_graph #. openerp-web diff --git a/addons/web_kanban/i18n/ar.po b/addons/web_kanban/i18n/ar.po index 9c99e8ccb86..95b48ece526 100644 --- a/addons/web_kanban/i18n/ar.po +++ b/addons/web_kanban/i18n/ar.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/bg.po b/addons/web_kanban/i18n/bg.po index 660c6065955..3618fb9801f 100644 --- a/addons/web_kanban/i18n/bg.po +++ b/addons/web_kanban/i18n/bg.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/bn.po b/addons/web_kanban/i18n/bn.po index 0bb0dd03493..acc110ede8c 100644 --- a/addons/web_kanban/i18n/bn.po +++ b/addons/web_kanban/i18n/bn.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/bs.po b/addons/web_kanban/i18n/bs.po index e94c3b0b4a0..abfa686ef51 100644 --- a/addons/web_kanban/i18n/bs.po +++ b/addons/web_kanban/i18n/bs.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/ca.po b/addons/web_kanban/i18n/ca.po index 041e1400bbf..566486529ef 100644 --- a/addons/web_kanban/i18n/ca.po +++ b/addons/web_kanban/i18n/ca.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/cs.po b/addons/web_kanban/i18n/cs.po index 161c4eb3be0..6853538a383 100644 --- a/addons/web_kanban/i18n/cs.po +++ b/addons/web_kanban/i18n/cs.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" "X-Poedit-Language: Czech\n" #. module: web_kanban diff --git a/addons/web_kanban/i18n/da.po b/addons/web_kanban/i18n/da.po index 7703fdb49aa..6ec5a169a7e 100644 --- a/addons/web_kanban/i18n/da.po +++ b/addons/web_kanban/i18n/da.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/de.po b/addons/web_kanban/i18n/de.po index 93bdc19f63c..80b94c1e2e0 100644 --- a/addons/web_kanban/i18n/de.po +++ b/addons/web_kanban/i18n/de.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/en_AU.po b/addons/web_kanban/i18n/en_AU.po index f2d7e2e341c..0c999378e7b 100644 --- a/addons/web_kanban/i18n/en_AU.po +++ b/addons/web_kanban/i18n/en_AU.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/en_GB.po b/addons/web_kanban/i18n/en_GB.po index a80406f52ce..cc0e7d30f7b 100644 --- a/addons/web_kanban/i18n/en_GB.po +++ b/addons/web_kanban/i18n/en_GB.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/es.po b/addons/web_kanban/i18n/es.po index 03a8dc11d5c..c6608c32936 100644 --- a/addons/web_kanban/i18n/es.po +++ b/addons/web_kanban/i18n/es.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/es_CL.po b/addons/web_kanban/i18n/es_CL.po index 6669f43d285..2115063dc55 100644 --- a/addons/web_kanban/i18n/es_CL.po +++ b/addons/web_kanban/i18n/es_CL.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/es_CR.po b/addons/web_kanban/i18n/es_CR.po index 2146ebf96c4..644e05a3cf5 100644 --- a/addons/web_kanban/i18n/es_CR.po +++ b/addons/web_kanban/i18n/es_CR.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/es_DO.po b/addons/web_kanban/i18n/es_DO.po index 24df2f9cfbe..ed89c89740b 100644 --- a/addons/web_kanban/i18n/es_DO.po +++ b/addons/web_kanban/i18n/es_DO.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/es_EC.po b/addons/web_kanban/i18n/es_EC.po index 496e2915687..192f82b575d 100644 --- a/addons/web_kanban/i18n/es_EC.po +++ b/addons/web_kanban/i18n/es_EC.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/es_MX.po b/addons/web_kanban/i18n/es_MX.po index 25b875fc475..1ef37e92d99 100644 --- a/addons/web_kanban/i18n/es_MX.po +++ b/addons/web_kanban/i18n/es_MX.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/et.po b/addons/web_kanban/i18n/et.po index 82dd74139ef..3607b0b36dc 100644 --- a/addons/web_kanban/i18n/et.po +++ b/addons/web_kanban/i18n/et.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/fa.po b/addons/web_kanban/i18n/fa.po index 0b23800c85c..abd0db30966 100644 --- a/addons/web_kanban/i18n/fa.po +++ b/addons/web_kanban/i18n/fa.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/fi.po b/addons/web_kanban/i18n/fi.po index 029d6b1410e..a9ee92d0873 100644 --- a/addons/web_kanban/i18n/fi.po +++ b/addons/web_kanban/i18n/fi.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/fr.po b/addons/web_kanban/i18n/fr.po index 3d2d9834911..46f59318957 100644 --- a/addons/web_kanban/i18n/fr.po +++ b/addons/web_kanban/i18n/fr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/fr_CA.po b/addons/web_kanban/i18n/fr_CA.po index bdcbe96d612..3537ff022ca 100644 --- a/addons/web_kanban/i18n/fr_CA.po +++ b/addons/web_kanban/i18n/fr_CA.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/gl.po b/addons/web_kanban/i18n/gl.po index 97bc1df65c1..1366d0b2d87 100644 --- a/addons/web_kanban/i18n/gl.po +++ b/addons/web_kanban/i18n/gl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/gu.po b/addons/web_kanban/i18n/gu.po index c951e206cf5..9ebf7cfb556 100644 --- a/addons/web_kanban/i18n/gu.po +++ b/addons/web_kanban/i18n/gu.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/he.po b/addons/web_kanban/i18n/he.po index ff0508797b3..e30d8ea118b 100644 --- a/addons/web_kanban/i18n/he.po +++ b/addons/web_kanban/i18n/he.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/hr.po b/addons/web_kanban/i18n/hr.po index 08806141e31..ef49ec16fdd 100644 --- a/addons/web_kanban/i18n/hr.po +++ b/addons/web_kanban/i18n/hr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/hu.po b/addons/web_kanban/i18n/hu.po index 843b8552914..36edb43f9d4 100644 --- a/addons/web_kanban/i18n/hu.po +++ b/addons/web_kanban/i18n/hu.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/it.po b/addons/web_kanban/i18n/it.po index f9c445ad5b8..2d7acd210b2 100644 --- a/addons/web_kanban/i18n/it.po +++ b/addons/web_kanban/i18n/it.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/ja.po b/addons/web_kanban/i18n/ja.po index bf2bf3d68e8..9121c2e9f9b 100644 --- a/addons/web_kanban/i18n/ja.po +++ b/addons/web_kanban/i18n/ja.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/ka.po b/addons/web_kanban/i18n/ka.po index ad622df58ec..4457e5c8645 100644 --- a/addons/web_kanban/i18n/ka.po +++ b/addons/web_kanban/i18n/ka.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/ko.po b/addons/web_kanban/i18n/ko.po index 110cdbc0ff4..1c2f2fd77fe 100644 --- a/addons/web_kanban/i18n/ko.po +++ b/addons/web_kanban/i18n/ko.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/lt.po b/addons/web_kanban/i18n/lt.po index e720e15f6c5..eda2db5768b 100644 --- a/addons/web_kanban/i18n/lt.po +++ b/addons/web_kanban/i18n/lt.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/mk.po b/addons/web_kanban/i18n/mk.po index 17821668756..097647bb478 100644 --- a/addons/web_kanban/i18n/mk.po +++ b/addons/web_kanban/i18n/mk.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/mn.po b/addons/web_kanban/i18n/mn.po index 0978030639f..d3230d330d6 100644 --- a/addons/web_kanban/i18n/mn.po +++ b/addons/web_kanban/i18n/mn.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/nb.po b/addons/web_kanban/i18n/nb.po index 3903e5b5279..59a235c5d82 100644 --- a/addons/web_kanban/i18n/nb.po +++ b/addons/web_kanban/i18n/nb.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/nl.po b/addons/web_kanban/i18n/nl.po index f055aa75f1d..42760f533a4 100644 --- a/addons/web_kanban/i18n/nl.po +++ b/addons/web_kanban/i18n/nl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/nl_BE.po b/addons/web_kanban/i18n/nl_BE.po index d7358adc3e4..a56779f7931 100644 --- a/addons/web_kanban/i18n/nl_BE.po +++ b/addons/web_kanban/i18n/nl_BE.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/pl.po b/addons/web_kanban/i18n/pl.po index c2b099cc678..6347127c0b5 100644 --- a/addons/web_kanban/i18n/pl.po +++ b/addons/web_kanban/i18n/pl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/pt.po b/addons/web_kanban/i18n/pt.po index ab05091a346..d96875cc5c3 100644 --- a/addons/web_kanban/i18n/pt.po +++ b/addons/web_kanban/i18n/pt.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/pt_BR.po b/addons/web_kanban/i18n/pt_BR.po index c95990772d3..c05650feeaf 100644 --- a/addons/web_kanban/i18n/pt_BR.po +++ b/addons/web_kanban/i18n/pt_BR.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/ro.po b/addons/web_kanban/i18n/ro.po index bd7aaabc6de..9a79489ce57 100644 --- a/addons/web_kanban/i18n/ro.po +++ b/addons/web_kanban/i18n/ro.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/ru.po b/addons/web_kanban/i18n/ru.po index f5194202b66..209deff5fb8 100644 --- a/addons/web_kanban/i18n/ru.po +++ b/addons/web_kanban/i18n/ru.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/sl.po b/addons/web_kanban/i18n/sl.po index beeeb2b060d..402901a6ca1 100644 --- a/addons/web_kanban/i18n/sl.po +++ b/addons/web_kanban/i18n/sl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/sr@latin.po b/addons/web_kanban/i18n/sr@latin.po index 04a3009485b..19058bbb396 100644 --- a/addons/web_kanban/i18n/sr@latin.po +++ b/addons/web_kanban/i18n/sr@latin.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/sv.po b/addons/web_kanban/i18n/sv.po index c726a56247e..22349895797 100644 --- a/addons/web_kanban/i18n/sv.po +++ b/addons/web_kanban/i18n/sv.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/th.po b/addons/web_kanban/i18n/th.po index b8cea272541..28f13622307 100644 --- a/addons/web_kanban/i18n/th.po +++ b/addons/web_kanban/i18n/th.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/tr.po b/addons/web_kanban/i18n/tr.po index f5fd5d5bae2..0205e957649 100644 --- a/addons/web_kanban/i18n/tr.po +++ b/addons/web_kanban/i18n/tr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/zh_CN.po b/addons/web_kanban/i18n/zh_CN.po index 32ef33193c3..96346f923ec 100644 --- a/addons/web_kanban/i18n/zh_CN.po +++ b/addons/web_kanban/i18n/zh_CN.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/zh_TW.po b/addons/web_kanban/i18n/zh_TW.po index 04c6e8decbf..e9dacb249c6 100644 --- a/addons/web_kanban/i18n/zh_TW.po +++ b/addons/web_kanban/i18n/zh_TW.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_kanban #. openerp-web diff --git a/addons/web_view_editor/i18n/ar.po b/addons/web_view_editor/i18n/ar.po index 149ae013dc5..1b06420d87a 100644 --- a/addons/web_view_editor/i18n/ar.po +++ b/addons/web_view_editor/i18n/ar.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/bs.po b/addons/web_view_editor/i18n/bs.po index f019a35649f..0e91c510ea7 100644 --- a/addons/web_view_editor/i18n/bs.po +++ b/addons/web_view_editor/i18n/bs.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/cs.po b/addons/web_view_editor/i18n/cs.po index 95f27a10dfb..f14f5313a24 100644 --- a/addons/web_view_editor/i18n/cs.po +++ b/addons/web_view_editor/i18n/cs.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/da.po b/addons/web_view_editor/i18n/da.po index 3fcaa5caac3..3ace6a4f56e 100644 --- a/addons/web_view_editor/i18n/da.po +++ b/addons/web_view_editor/i18n/da.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/de.po b/addons/web_view_editor/i18n/de.po index 34c6123d9ca..e674d832a45 100644 --- a/addons/web_view_editor/i18n/de.po +++ b/addons/web_view_editor/i18n/de.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web @@ -157,7 +157,7 @@ msgstr "Kann die Ansicht nicht aktualisieren" #: code:addons/web_view_editor/static/src/js/view_editor.js:380 #, python-format msgid "View Editor %d - %s" -msgstr "Anicht Editor %d - %s" +msgstr "Ansicht Editor %d - %s" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/en_AU.po b/addons/web_view_editor/i18n/en_AU.po index 443b733d6bd..b2aab82b179 100644 --- a/addons/web_view_editor/i18n/en_AU.po +++ b/addons/web_view_editor/i18n/en_AU.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/en_GB.po b/addons/web_view_editor/i18n/en_GB.po index d2c5c65bf38..f7d4d952195 100644 --- a/addons/web_view_editor/i18n/en_GB.po +++ b/addons/web_view_editor/i18n/en_GB.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/es.po b/addons/web_view_editor/i18n/es.po index 2cecbcb0305..f4d16dc68a0 100644 --- a/addons/web_view_editor/i18n/es.po +++ b/addons/web_view_editor/i18n/es.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/es_DO.po b/addons/web_view_editor/i18n/es_DO.po index d145739269e..8127c64265f 100644 --- a/addons/web_view_editor/i18n/es_DO.po +++ b/addons/web_view_editor/i18n/es_DO.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/es_EC.po b/addons/web_view_editor/i18n/es_EC.po index 1029d0263a5..331bef163cb 100644 --- a/addons/web_view_editor/i18n/es_EC.po +++ b/addons/web_view_editor/i18n/es_EC.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/es_MX.po b/addons/web_view_editor/i18n/es_MX.po index 28e50a37ef7..7aad743f052 100644 --- a/addons/web_view_editor/i18n/es_MX.po +++ b/addons/web_view_editor/i18n/es_MX.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/et.po b/addons/web_view_editor/i18n/et.po index f87bdf1b403..1a847dd16a4 100644 --- a/addons/web_view_editor/i18n/et.po +++ b/addons/web_view_editor/i18n/et.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/fa.po b/addons/web_view_editor/i18n/fa.po index 0df4aaa1175..372869e1f45 100644 --- a/addons/web_view_editor/i18n/fa.po +++ b/addons/web_view_editor/i18n/fa.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/fi.po b/addons/web_view_editor/i18n/fi.po index 256730a1c8b..ed60c2d91d3 100644 --- a/addons/web_view_editor/i18n/fi.po +++ b/addons/web_view_editor/i18n/fi.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/fr.po b/addons/web_view_editor/i18n/fr.po index e9e882dd7d1..3ce39b86ba2 100644 --- a/addons/web_view_editor/i18n/fr.po +++ b/addons/web_view_editor/i18n/fr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/he.po b/addons/web_view_editor/i18n/he.po index bfa96626baa..cba12e600e1 100644 --- a/addons/web_view_editor/i18n/he.po +++ b/addons/web_view_editor/i18n/he.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/hr.po b/addons/web_view_editor/i18n/hr.po index 1175f9a70d3..19ed93b03bb 100644 --- a/addons/web_view_editor/i18n/hr.po +++ b/addons/web_view_editor/i18n/hr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/hu.po b/addons/web_view_editor/i18n/hu.po index 8552fd25280..f037afda208 100644 --- a/addons/web_view_editor/i18n/hu.po +++ b/addons/web_view_editor/i18n/hu.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/it.po b/addons/web_view_editor/i18n/it.po index 95e4b760c10..b2f7a6b6554 100644 --- a/addons/web_view_editor/i18n/it.po +++ b/addons/web_view_editor/i18n/it.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/ko.po b/addons/web_view_editor/i18n/ko.po index 45bbe218f9a..a385e93c184 100644 --- a/addons/web_view_editor/i18n/ko.po +++ b/addons/web_view_editor/i18n/ko.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/lt.po b/addons/web_view_editor/i18n/lt.po index 68bff77a26f..190b759b5f7 100644 --- a/addons/web_view_editor/i18n/lt.po +++ b/addons/web_view_editor/i18n/lt.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/lv.po b/addons/web_view_editor/i18n/lv.po index ba9ac062127..105583bc59c 100644 --- a/addons/web_view_editor/i18n/lv.po +++ b/addons/web_view_editor/i18n/lv.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/mk.po b/addons/web_view_editor/i18n/mk.po index 1f4466d8faf..6bdfe19fddb 100644 --- a/addons/web_view_editor/i18n/mk.po +++ b/addons/web_view_editor/i18n/mk.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/mn.po b/addons/web_view_editor/i18n/mn.po index 7835af1bd0b..fa02ced8ad6 100644 --- a/addons/web_view_editor/i18n/mn.po +++ b/addons/web_view_editor/i18n/mn.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/nb.po b/addons/web_view_editor/i18n/nb.po index a9f6785b8d6..602d25af086 100644 --- a/addons/web_view_editor/i18n/nb.po +++ b/addons/web_view_editor/i18n/nb.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/nl.po b/addons/web_view_editor/i18n/nl.po index fd28146d4b6..6fc3c12099f 100644 --- a/addons/web_view_editor/i18n/nl.po +++ b/addons/web_view_editor/i18n/nl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/nl_BE.po b/addons/web_view_editor/i18n/nl_BE.po index df20911f4c9..9fff731ecf1 100644 --- a/addons/web_view_editor/i18n/nl_BE.po +++ b/addons/web_view_editor/i18n/nl_BE.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/pl.po b/addons/web_view_editor/i18n/pl.po index d23f7e5a5e5..aa56a2a07a5 100644 --- a/addons/web_view_editor/i18n/pl.po +++ b/addons/web_view_editor/i18n/pl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/pt.po b/addons/web_view_editor/i18n/pt.po index dba82460c6f..8ee7e0c586c 100644 --- a/addons/web_view_editor/i18n/pt.po +++ b/addons/web_view_editor/i18n/pt.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/pt_BR.po b/addons/web_view_editor/i18n/pt_BR.po index 0d00ca718c5..ffcc740e695 100644 --- a/addons/web_view_editor/i18n/pt_BR.po +++ b/addons/web_view_editor/i18n/pt_BR.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/ro.po b/addons/web_view_editor/i18n/ro.po index ce33d0dceee..d66a035ef66 100644 --- a/addons/web_view_editor/i18n/ro.po +++ b/addons/web_view_editor/i18n/ro.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/ru.po b/addons/web_view_editor/i18n/ru.po index 8ee39b5f2a5..0adc0c67b08 100644 --- a/addons/web_view_editor/i18n/ru.po +++ b/addons/web_view_editor/i18n/ru.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/sl.po b/addons/web_view_editor/i18n/sl.po index 3efeb43fb8c..e012ca56fc0 100644 --- a/addons/web_view_editor/i18n/sl.po +++ b/addons/web_view_editor/i18n/sl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/sv.po b/addons/web_view_editor/i18n/sv.po index 82d61956353..96721ec339d 100644 --- a/addons/web_view_editor/i18n/sv.po +++ b/addons/web_view_editor/i18n/sv.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/th.po b/addons/web_view_editor/i18n/th.po index 8c1aaa6a9ef..bcac4f00fd1 100644 --- a/addons/web_view_editor/i18n/th.po +++ b/addons/web_view_editor/i18n/th.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/tr.po b/addons/web_view_editor/i18n/tr.po index a876af19890..3b88ec50edf 100644 --- a/addons/web_view_editor/i18n/tr.po +++ b/addons/web_view_editor/i18n/tr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/zh_CN.po b/addons/web_view_editor/i18n/zh_CN.po index f8081e053fe..b20ccc5b000 100644 --- a/addons/web_view_editor/i18n/zh_CN.po +++ b/addons/web_view_editor/i18n/zh_CN.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-14 05:58+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-01-22 05:40+0000\n" +"X-Generator: Launchpad (build 16901)\n" #. module: web_view_editor #. openerp-web From 9fbbba1ee022c64a7566734db38ad4af5693bc52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 22 Jan 2014 14:29:18 +0100 Subject: [PATCH 17/20] [IMP] resource : some docstrings cleaning + void calendar taken into account in days scheduling + finished yesys bzr revid: tde@openerp.com-20140122132918-4c1ag6y5gqasi32d --- addons/resource/resource.py | 109 +++++++++++++++++-------- addons/resource/tests/common.py | 2 +- addons/resource/tests/test_resource.py | 59 +++++++++---- 3 files changed, 122 insertions(+), 48 deletions(-) diff --git a/addons/resource/resource.py b/addons/resource/resource.py index 3824f154681..8ee41c313cb 100644 --- a/addons/resource/resource.py +++ b/addons/resource/resource.py @@ -254,7 +254,7 @@ class resource_calendar(osv.osv): def get_working_intervals_of_day(self, cr, uid, id, start_dt=None, end_dt=None, leaves=None, compute_leaves=False, resource_id=None, - context=None): + context=None, default_interval=None): """Get the working intervals of the day based on calendar. This method handle leaves that come directly from the leaves parameter or can be computed. @@ -279,12 +279,16 @@ class resource_calendar(osv.osv): computing the leaves. If not set, only general leaves are computed. If set, generic and specific leaves are computed. + :param tuple default_interval: if no id, try to return a default working + day using default_interval[0] as beginning + hour, and default_interval[1] as ending hour. + Example: default_interval = (8, 16). + Otherwise, a void list of working intervals + is returned when id is None. :return list intervals: a list of tuples (start_datetime, end_datetime) of work intervals """ - if id is None: - return [] if isinstance(id, (list, tuple)): id = id[0] @@ -305,6 +309,12 @@ class resource_calendar(osv.osv): intervals = [] work_dt = start_dt.replace(hour=0, minute=0, second=0) + # no calendar: try to use the default_interval, then return directly + if id is None: + if default_interval: + intervals.append((start_dt.replace(hour=default_interval[0]), start_dt.replace(hour=default_interval[1]))) + return intervals + working_intervals = [] for calendar_working_day in self.get_attendances_for_weekdays(cr, uid, id, [start_dt.weekday()], context): working_interval = ( @@ -336,6 +346,10 @@ class resource_calendar(osv.osv): res += interval[1] - interval[0] return (res.total_seconds() / 3600.0) + # -------------------------------------------------- + # Hours scheduling + # -------------------------------------------------- + def _schedule_hours(self, cr, uid, id, hours, day_dt=None, compute_leaves=False, resource_id=None, context=None): @@ -343,7 +357,7 @@ class resource_calendar(osv.osv): compute working and leave days. This method can be used backwards, i.e. scheduling days before a deadline. - :param timedelta hours: number of hours to schedule + :param int hours: number of hours to schedule :param datetime day_dt: reference date to compute working days. If days is > 0 date is the starting date. If days is < 0 date is the ending date. @@ -381,7 +395,7 @@ class resource_calendar(osv.osv): working_intervals = self.get_working_intervals_of_day(cr, uid, id, **call_args) - if id is None: # no calendar -> consider 8 working hours + if id is None: # no calendar -> consider working 8 hours remaining_hours -= 8.0 elif working_intervals: if backwards: @@ -419,7 +433,8 @@ class resource_calendar(osv.osv): scheduling. """ return self._schedule_hours(cr, uid, id, hours, day_dt, compute_leaves, resource_id, context) - def get_working_hours(self, cr, uid, id, start_dt, end_dt, compute_leaves=False, resource_id=None, context=None): + def get_working_hours(self, cr, uid, id, start_dt, end_dt, compute_leaves=False, + resource_id=None, context=None): hours = 0.0 for day in rrule.rrule(rrule.DAILY, dtstart=start_dt, until=end_dt + datetime.timedelta(days=1), @@ -427,11 +442,18 @@ class resource_calendar(osv.osv): hours += self.get_working_hours_of_date(cr, uid, id, start_dt=day, compute_leaves=compute_leaves, resource_id=resource_id) return hours - def _schedule_days(self, cr, uid, id, days, day_date=None, compute_leaves=False, resource_id=None, context=None): + # -------------------------------------------------- + # Days scheduling + # -------------------------------------------------- + + def _schedule_days(self, cr, uid, id, days, day_date=None, compute_leaves=False, + resource_id=None, default_interval=None, context=None): """Schedule days of work, using a calendar and an optional resource to compute working and leave days. This method can be used backwards, i.e. scheduling days before a deadline. + :param int days: number of days to schedule. Use a negative number to compute + a backwards scheduling. :param date day_date: reference date to compute working days. If days is > 0 date is the starting date. If days is < 0 date is the ending date. @@ -442,13 +464,19 @@ class resource_calendar(osv.osv): computing the leaves. If not set, only general leaves are computed. If set, generic and specific leaves are computed. + :param tuple default_interval: if no id, try to return a default working + day using default_interval[0] as beginning + hour, and default_interval[1] as ending hour. + Example: default_interval = (8, 16). + Otherwise, a void list of working intervals + is returned when id is None. :return tuple (datetime, intervals): datetime is the beginning/ending date of the schedulign; intervals are the working intervals of the scheduling. - TDE NOTE: Why not using rrule.rrule ? Because rrule does not seem to - allow getting back in time. + Implementation note: rrule.rrule is not used because rrule it des not seem + to allow getting back in time. """ if day_date is None: day_date = datetime.datetime.now() @@ -463,7 +491,11 @@ class resource_calendar(osv.osv): current_datetime = day_date.replace(hour=0, minute=0, second=0) while planned_days < days and iterations < 1000: - working_intervals = self.get_working_intervals_of_day(cr, uid, id, current_datetime, compute_leaves=compute_leaves, resource_id=resource_id, context=context) + working_intervals = self.get_working_intervals_of_day( + cr, uid, id, current_datetime, + compute_leaves=compute_leaves, resource_id=resource_id, + context=context, + default_interval=default_interval) if id is None or working_intervals: # no calendar -> no working hours, but day is considered as worked planned_days += 1 intervals += working_intervals @@ -477,33 +509,37 @@ class resource_calendar(osv.osv): return intervals - def schedule_days_get_date(self, cr, uid, id, days, day_date=None, compute_leaves=False, resource_id=None, context=None): - """Wrapper on _schedule_days: return the beginning/ending datetime of + def schedule_days_get_date(self, cr, uid, id, days, day_date=None, compute_leaves=False, + resource_id=None, default_interval=None, context=None): + """ Wrapper on _schedule_days: return the beginning/ending datetime of a days scheduling. """ - res = self._schedule_days(cr, uid, id, days, day_date, compute_leaves, resource_id, context) - return res[-1][1] + res = self._schedule_days(cr, uid, id, days, day_date, compute_leaves, resource_id, default_interval, context) + return res and res[-1][1] or [] - def schedule_days(self, cr, uid, id, days, day_date=None, compute_leaves=False, resource_id=None, context=None): - """Wrapper on _schedule_days: return the working intervals of a days + def schedule_days(self, cr, uid, id, days, day_date=None, compute_leaves=False, + resource_id=None, default_interval=None, context=None): + """ Wrapper on _schedule_days: return the working intervals of a days scheduling. """ - return self._schedule_days(cr, uid, id, days, day_date, compute_leaves, resource_id, context) + return self._schedule_days(cr, uid, id, days, day_date, compute_leaves, resource_id, default_interval, context) # -------------------------------------------------- # Compatibility / to clean / to remove # -------------------------------------------------- def working_hours_on_day(self, cr, uid, resource_calendar_id, day, context=None): - """ Compatibility method - will be removed for OpenERP v8. - Computation was done for the whole day, ignoring hour/minutes. - Used in hr_payroll/hr_payroll.py """ + """ Used in hr_payroll/hr_payroll.py + + :deprecated: OpenERP saas-3. Use get_working_hours_of_date instead. Note: + since saas-3, take hour/minutes into account, not just the whole day.""" if isinstance(day, datetime.datetime): day = day.replace(hour=0, minute=0) return self.get_working_hours_of_date(cr, uid, resource_calendar_id.id, start_dt=day, context=None) def interval_min_get(self, cr, uid, id, dt_from, hours, resource=False): - """ Compatibility method - will be removed for OpenERP v8. - Schedule hours backwards. Note: now count leave hours instead of all-day leaves. - Used in mrp_operations/mrp_operations.py. """ + """ Schedule hours backwards. Used in mrp_operations/mrp_operations.py. + + :deprecated: OpenERP saas-3. Use schedule_hours instead. Note: since + saas-3, counts leave hours instead of all-day leaves.""" return self.schedule_hours( cr, uid, id, hours * -1.0, day_dt=dt_from.replace(minute=0, second=0), @@ -511,9 +547,11 @@ class resource_calendar(osv.osv): ) def interval_get_multi(self, cr, uid, date_and_hours_by_cal, resource=False, byday=True): - """ Compatibility method - will be removed for OpenERP v8. - Note: used in mrp_operations/mrp_operations.py (default parameters) and in interval_get() - Byday was not used. Now counts Leave hours instead of all-day leaves. """ + """ Used in mrp_operations/mrp_operations.py (default parameters) and in + interval_get() + + :deprecated: OpenERP saas-3. Use get_working_hours_of_date instead. Note: + Byday was not used. Since saas-3, counts Leave hours instead of all-day leaves.""" res = {} for dt_str, hours, calendar_id in date_and_hours_by_cal: result = self.schedule_hours( @@ -525,20 +563,25 @@ class resource_calendar(osv.osv): return res def interval_get(self, cr, uid, id, dt_from, hours, resource=False, byday=True): - """ Compatibility method - will be removed for OpenERP v8. Unifier of interval_get_multi. - Used in: mrp_operations/mrp_operations.py, crm/crm_lead.py (res given) """ + """ Unifier of interval_get_multi. Used in: mrp_operations/mrp_operations.py, + crm/crm_lead.py (res given). + + :deprecated: OpenERP saas-3. Use get_working_hours instead.""" res = self.interval_get_multi(cr, uid, [(dt_from.strftime('%Y-%m-%d %H:%M:%S'), hours, id)], resource, byday)[(dt_from.strftime('%Y-%m-%d %H:%M:%S'), hours, id)] return res def interval_hours_get(self, cr, uid, id, dt_from, dt_to, resource=False): - """ Compatibility method - will be removed for OpenERP v8. Unused wrapper """ + """ Unused wrapper. + + :deprecated: OpenERP saas-3. Use get_working_hours instead.""" return self._interval_hours_get(cr, uid, id, dt_from, dt_to, resource_id=resource) def _interval_hours_get(self, cr, uid, id, dt_from, dt_to, resource_id=False, timezone_from_uid=None, exclude_leaves=True, context=None): - """ Compatibility method - will be removed for OpenERP v8. - Computes working hours between two dates, taking always same hour/minuts. - Note: now resets hour/minuts. Now counts leave hours instead of all-day leaves. """ - return self.get_working_hours(cr, uid, id, dt_from, dt_to, compute_leaves=exclude_leaves, resource_id=resource_id, context=context) + """ Computes working hours between two dates, taking always same hour/minuts. + + :deprecated: OpenERP saas-3. Use get_working_hours instead. Note: since saas-3, + now resets hour/minuts. Now counts leave hours instead of all-day leaves.""" + return self.get_working_hours(cr, uid, id, dt_from, dt_to, compute_leaves=(not exclude_leaves), resource_id=resource_id, context=context) class resource_calendar_attendance(osv.osv): diff --git a/addons/resource/tests/common.py b/addons/resource/tests/common.py index e5d17bc7455..74b91abde2e 100644 --- a/addons/resource/tests/common.py +++ b/addons/resource/tests/common.py @@ -52,7 +52,7 @@ class TestResourceCommon(common.TransactionCase): self.leave3_end = datetime.strptime('2013-03-01 11:30:00', '%Y-%m-%d %H:%M:%S') # Resource data - # Calendar working days: 1 (8-16), 4 (8-13, 21-22) + # Calendar working days: 1 (8-16 -> 8hours), 4 (8-13, 16-23 -> 12hours) self.calendar_id = self.resource_calendar.create( cr, uid, { 'name': 'TestCalendar', diff --git a/addons/resource/tests/test_resource.py b/addons/resource/tests/test_resource.py index 1413c6732c6..ad06a1f2430 100644 --- a/addons/resource/tests/test_resource.py +++ b/addons/resource/tests/test_resource.py @@ -293,7 +293,7 @@ class TestResource(TestResourceCommon): self.assertEqual(td.total_seconds() / 3600.0, 40.0, 'resource_calendar: wrong hours scheduling') # -------------------------------------------------- - # Test1: schedule hours forward (old interval_get) + # Test2: schedule hours forward (old interval_get) # -------------------------------------------------- # res = self.resource_calendar.interval_get(cr, uid, self.calendar_id, self.date1, 40, resource=False, byday=True) @@ -366,23 +366,55 @@ class TestResource(TestResourceCommon): td += item[1] - item[0] self.assertEqual(td.total_seconds() / 3600.0, 40.0, 'resource_calendar: wrong hours scheduling') - res = self.resource_calendar._interval_hours_get(cr, uid, self.calendar_id, self.date1.replace(hour=6, minute=0), self.date2.replace(hour=23, minute=0) + relativedelta(days=7), resource_id=self.resource1_id, exclude_leaves=False) - # print res + # -------------------------------------------------- + # Test3: working hours (old _interval_hours_get) + # -------------------------------------------------- - res = self.resource_calendar.get_working_hours(cr, uid, self.calendar_id, self.date1.replace(hour=6, minute=0), self.date2.replace(hour=23, minute=0) + relativedelta(days=7), compute_leaves=False, resource_id=self.resource1_id) - # print res + # old API: resource without leaves + # res: 2 weeks -> 40 hours + res = self.resource_calendar._interval_hours_get( + cr, uid, self.calendar_id, + self.date1.replace(hour=6, minute=0), + self.date2.replace(hour=23, minute=0) + relativedelta(days=7), + resource_id=self.resource1_id, exclude_leaves=True) + self.assertEqual(res, 40.0, 'resource_calendar: wrong _interval_hours_get compatibility computation') - res = self.resource_calendar._interval_hours_get(cr, uid, self.calendar_id, self.date1.replace(hour=6, minute=0), self.date2.replace(hour=23, minute=0) + relativedelta(days=7), resource_id=self.resource1_id, exclude_leaves=True) - # print res + # new API: resource without leaves + # res: 2 weeks -> 40 hours + res = self.resource_calendar.get_working_hours( + cr, uid, self.calendar_id, + self.date1.replace(hour=6, minute=0), + self.date2.replace(hour=23, minute=0) + relativedelta(days=7), + compute_leaves=False, resource_id=self.resource1_id) + self.assertEqual(res, 40.0, 'resource_calendar: wrong get_working_hours computation') - res = self.resource_calendar.get_working_hours(cr, uid, self.calendar_id, self.date1.replace(hour=6, minute=0), self.date2.replace(hour=23, minute=0) + relativedelta(days=7), compute_leaves=True, resource_id=self.resource1_id) - # print res + # old API: resource and leaves + # res: 2 weeks -> 40 hours - (3+4) leave hours + res = self.resource_calendar._interval_hours_get( + cr, uid, self.calendar_id, + self.date1.replace(hour=6, minute=0), + self.date2.replace(hour=23, minute=0) + relativedelta(days=7), + resource_id=self.resource1_id, exclude_leaves=False) + self.assertEqual(res, 33.0, 'resource_calendar: wrong _interval_hours_get compatibility computation') + + # new API: resource and leaves + # res: 2 weeks -> 40 hours - (3+4) leave hours + res = self.resource_calendar.get_working_hours( + cr, uid, self.calendar_id, + self.date1.replace(hour=6, minute=0), + self.date2.replace(hour=23, minute=0) + relativedelta(days=7), + compute_leaves=True, resource_id=self.resource1_id) + self.assertEqual(res, 33.0, 'resource_calendar: wrong get_working_hours computation') def test_50_calendar_schedule_days(self): """ Testing calendar days scheduling """ cr, uid = self.cr, self.uid _format = '%Y-%m-%d %H:%M:%S' + # -------------------------------------------------- + # Test1: with calendar + # -------------------------------------------------- + res = self.resource_calendar.schedule_days_get_date(cr, uid, self.calendar_id, 5, day_date=self.date1) self.assertEqual(res.date(), datetime.strptime('2013-02-26 00:0:00', _format).date(), 'resource_calendar: wrong days scheduling') @@ -392,10 +424,9 @@ class TestResource(TestResourceCommon): self.assertEqual(res.date(), datetime.strptime('2013-03-01 00:0:00', _format).date(), 'resource_calendar: wrong days scheduling') # -------------------------------------------------- - # Misc + # Test2: without calendar and default scheduling # -------------------------------------------------- - # # Without calendar, should only count days - # print '---------------' - # res = self.resource_calendar.schedule_days_get_date(cr, uid, None, 5, day_date=self.date1) - # print res + # Without calendar, should only count days -> 12 -> 16, 5 days + res = self.resource_calendar.schedule_days_get_date(cr, uid, None, 5, day_date=self.date1, default_interval=(8, 16)) + self.assertEqual(res, datetime.strptime('2013-02-16 16:00:00', _format), 'resource_calendar: wrong days scheduling') From 6df94832bdb30f386c3d7bf11f4280777de847c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 22 Jan 2014 14:46:09 +0100 Subject: [PATCH 18/20] [CLEAN] resource: some cleaning in docstrings bzr revid: tde@openerp.com-20140122134609-7fvd1p49r8e40zoa --- addons/resource/resource.py | 106 +++++++++++++++++++++++------------- 1 file changed, 68 insertions(+), 38 deletions(-) diff --git a/addons/resource/resource.py b/addons/resource/resource.py index 8ee41c313cb..b89ddb2f8a5 100644 --- a/addons/resource/resource.py +++ b/addons/resource/resource.py @@ -2,7 +2,7 @@ ############################################################################## # # OpenERP, Open Source Management Solution -# Copyright (C) 2004-2009 Tiny SPRL (). +# Copyright (C) 2004-TODAY OpenERP SA (http://www.openerp.com) # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -23,7 +23,6 @@ import datetime from dateutil import rrule from dateutil.relativedelta import relativedelta from operator import itemgetter -# import pytz from faces import * from openerp import tools @@ -33,8 +32,19 @@ from openerp.tools.translate import _ class resource_calendar(osv.osv): + """ Calendar model for a resource. It has + + - attendance_ids: list of resource.calendar.attendance that are a working + interval in a given weekday. + - leave_ids: list of leaves linked to this calendar. A leave can be general + or linked to a specific resource, depending on its resource_id. + + All methods in this class use intervals. An interval is a tuple holding + (begin_datetime, end_datetime). A list of intervals is therefore a list of + tuples, holding several intervals of work or leaves. """ _name = "resource.calendar" _description = "Resource Calendar" + _columns = { 'name': fields.char("Name", size=64, required=True), 'company_id': fields.many2one('res.company', 'Company', required=False), @@ -60,8 +70,7 @@ class resource_calendar(osv.osv): :param list intervals: list of intervals; each interval is a tuple (datetime_from, datetime_to) - :return list cleaned: list of sorted intervals without overlap - """ + :return list cleaned: list of sorted intervals without overlap """ intervals = sorted(intervals, key=itemgetter(0)) # sort on first datetime cleaned = [] working_interval = None @@ -81,7 +90,7 @@ class resource_calendar(osv.osv): def interval_remove_leaves(self, interval, leave_intervals): """ Utility method that remove leave intervals from a base interval: - - clean the leave intrevals, to have an ordered list of not-overlapping + - clean the leave intervals, to have an ordered list of not-overlapping intervals - initiate the current interval to be the base interval - for each leave interval: @@ -101,8 +110,7 @@ class resource_calendar(osv.osv): :param list leave_intervals: a list of tuples (beginning datetime, ending datetime) that are intervals to remove from the base interval :return list intervals: a list of tuples (begin datetime, end datetime) - that are the remaining valid intervals - """ + that are the remaining valid intervals """ if not interval: return interval if leave_intervals is None: @@ -135,13 +143,16 @@ class resource_calendar(osv.osv): submitted accordingly. :param list intervals: a list of tuples (beginning datetime, ending datetime) - :param int/float hours: number of hours to schedule + :param int/float hours: number of hours to schedule. It will be converted + into a timedelta, but should be submitted as an + int or float. :param boolean remove_at_end: remove extra hours at the end of the last matching interval. Otherwise, do it at the beginning. - :return list results: a list of intervals - """ + :return list results: a list of intervals. If the number of hours to schedule + is greater than the possible scheduling in the intervals, no extra-scheduling + is done, and results == intervals. """ results = [] res = datetime.timedelta() limit = datetime.timedelta(hours=hour) @@ -177,8 +188,11 @@ class resource_calendar(osv.osv): """ Get following date of day_date, based on resource.calendar. If no calendar is provided, just return the next day. + :param int id: id of a resource.calendar. If not given, simply add one day + to the submitted date. :param date day_date: current day as a date - """ + + :return date: next day of calendar, or just next day """ if not id: return day_date + relativedelta(days=1) weekdays = self.get_weekdays(cr, uid, id, context) @@ -200,8 +214,11 @@ class resource_calendar(osv.osv): """ Get previous date of day_date, based on resource.calendar. If no calendar is provided, just return the previous day. + :param int id: id of a resource.calendar. If not given, simply remove + one day from the submitted date. :param date day_date: current day as a date - """ + + :return date: previous day of calendar, or just previous day """ if not id: return day_date + relativedelta(days=-1) weekdays = self.get_weekdays(cr, uid, id, context) @@ -254,8 +271,8 @@ class resource_calendar(osv.osv): def get_working_intervals_of_day(self, cr, uid, id, start_dt=None, end_dt=None, leaves=None, compute_leaves=False, resource_id=None, - context=None, default_interval=None): - """Get the working intervals of the day based on calendar. This method + default_interval=None, context=None): + """ Get the working intervals of the day based on calendar. This method handle leaves that come directly from the leaves parameter or can be computed. :param int id: resource.calendar id; take the first one if is a list @@ -287,8 +304,7 @@ class resource_calendar(osv.osv): is returned when id is None. :return list intervals: a list of tuples (start_datetime, end_datetime) - of work intervals - """ + of work intervals """ if isinstance(id, (list, tuple)): id = id[0] @@ -336,28 +352,47 @@ class resource_calendar(osv.osv): def get_working_hours_of_date(self, cr, uid, id, start_dt=None, end_dt=None, leaves=None, compute_leaves=False, resource_id=None, - context=None): - """Get the working hours of the day based on calendar. This method uses + default_interval=None, context=None): + """ Get the working hours of the day based on calendar. This method uses get_working_intervals_of_day to have the work intervals of the day. It then calculates the number of hours contained in those intervals. """ res = datetime.timedelta() - intervals = self.get_working_intervals_of_day(cr, uid, id, start_dt, end_dt, leaves, compute_leaves, resource_id, context) + intervals = self.get_working_intervals_of_day( + cr, uid, id, + start_dt, end_dt, leaves, + compute_leaves, resource_id, + default_interval, context) for interval in intervals: res += interval[1] - interval[0] return (res.total_seconds() / 3600.0) + def get_working_hours(self, cr, uid, id, start_dt, end_dt, compute_leaves=False, + resource_id=None, default_interval=None, context=None): + hours = 0.0 + for day in rrule.rrule(rrule.DAILY, dtstart=start_dt, + until=end_dt + datetime.timedelta(days=1), + byweekday=self.get_weekdays(cr, uid, id, context=context)): + hours += self.get_working_hours_of_date( + cr, uid, id, start_dt=day, + compute_leaves=compute_leaves, resource_id=resource_id, + default_interval=default_interval, + context=context) + return hours + # -------------------------------------------------- # Hours scheduling + # Note: do not support calendar being None # -------------------------------------------------- def _schedule_hours(self, cr, uid, id, hours, day_dt=None, compute_leaves=False, resource_id=None, context=None): - """Schedule hours of work, using a calendar and an optional resource to + """ Schedule hours of work, using a calendar and an optional resource to compute working and leave days. This method can be used backwards, i.e. scheduling days before a deadline. - :param int hours: number of hours to schedule + :param int hours: number of hours to schedule. Use a negative number to + compute a backwards scheduling. :param datetime day_dt: reference date to compute working days. If days is > 0 date is the starting date. If days is < 0 date is the ending date. @@ -422,26 +457,21 @@ class resource_calendar(osv.osv): return intervals - def schedule_hours_get_date(self, cr, uid, id, hours, day_dt=None, compute_leaves=False, resource_id=None, context=None): - """Wrapper on _schedule_hours: return the beginning/ending datetime of + def schedule_hours_get_date(self, cr, uid, id, hours, day_dt=None, + compute_leaves=False, resource_id=None, + context=None): + """ Wrapper on _schedule_hours: return the beginning/ending datetime of an hours scheduling. """ res = self._schedule_hours(cr, uid, id, hours, day_dt, compute_leaves, resource_id, context) return res[0][0] - def schedule_hours(self, cr, uid, id, hours, day_dt=None, compute_leaves=False, resource_id=None, context=None): - """Wrapper on _schedule_hours: return the working intervals of an hours + def schedule_hours(self, cr, uid, id, hours, day_dt=None, + compute_leaves=False, resource_id=None, + context=None): + """ Wrapper on _schedule_hours: return the working intervals of an hours scheduling. """ return self._schedule_hours(cr, uid, id, hours, day_dt, compute_leaves, resource_id, context) - def get_working_hours(self, cr, uid, id, start_dt, end_dt, compute_leaves=False, - resource_id=None, context=None): - hours = 0.0 - for day in rrule.rrule(rrule.DAILY, dtstart=start_dt, - until=end_dt + datetime.timedelta(days=1), - byweekday=self.get_weekdays(cr, uid, id, context=context)): - hours += self.get_working_hours_of_date(cr, uid, id, start_dt=day, compute_leaves=compute_leaves, resource_id=resource_id) - return hours - # -------------------------------------------------- # Days scheduling # -------------------------------------------------- @@ -452,8 +482,8 @@ class resource_calendar(osv.osv): compute working and leave days. This method can be used backwards, i.e. scheduling days before a deadline. - :param int days: number of days to schedule. Use a negative number to compute - a backwards scheduling. + :param int days: number of days to schedule. Use a negative number to + compute a backwards scheduling. :param date day_date: reference date to compute working days. If days is > 0 date is the starting date. If days is < 0 date is the ending date. @@ -494,8 +524,8 @@ class resource_calendar(osv.osv): working_intervals = self.get_working_intervals_of_day( cr, uid, id, current_datetime, compute_leaves=compute_leaves, resource_id=resource_id, - context=context, - default_interval=default_interval) + default_interval=default_interval, + context=context) if id is None or working_intervals: # no calendar -> no working hours, but day is considered as worked planned_days += 1 intervals += working_intervals From 2f275894f3723c25d48830ee0bb13ed952fd0264 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 22 Jan 2014 14:47:00 +0100 Subject: [PATCH 19/20] [CLEAN] resource: removed some TDE NOTE bzr revid: tde@openerp.com-20140122134700-0iwb4uhg8jjdjzxn --- addons/resource/resource.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/resource/resource.py b/addons/resource/resource.py index b89ddb2f8a5..a5887e8b9fb 100644 --- a/addons/resource/resource.py +++ b/addons/resource/resource.py @@ -670,7 +670,7 @@ class resource_resource(osv.osv): """ Return a list of Resource Class objects for the resources allocated to the phase. - TDE NOTE: used in project/project.py + NOTE: Used in project/project.py """ resource_objs = {} user_pool = self.pool.get('res.users') @@ -699,7 +699,7 @@ class resource_resource(osv.osv): @param resource_id : resource working on phase/task @param resource_calendar : working calendar of the resource - TDE NOTE: used in project/project.py, and in generate_resources + NOTE: used in project/project.py, and in generate_resources """ resource_calendar_leaves_pool = self.pool.get('resource.calendar.leaves') leave_list = [] @@ -726,7 +726,7 @@ class resource_resource(osv.osv): Change the format of working calendar from 'Openerp' format to bring it into 'Faces' format. @param calendar_id : working calendar of the project - TDE NOTE: used in project/project.py + NOTE: used in project/project.py """ if not calendar_id: # Calendar is not specified: working days: 24/7 From 339c2ecc541dba407a9ed3a0e588707a0b3e8c8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 22 Jan 2014 15:28:05 +0100 Subject: [PATCH 20/20] [IMP] default_interval also in schedule_hours, allowing to schedule some work with a default calendar, like previous version of resource module. bzr revid: tde@openerp.com-20140122142805-8zyntmkx72l10fbq --- addons/resource/resource.py | 48 +++++++++++++++++--------- addons/resource/tests/test_resource.py | 17 +++++++-- 2 files changed, 46 insertions(+), 19 deletions(-) diff --git a/addons/resource/resource.py b/addons/resource/resource.py index a5887e8b9fb..cbaf15147d1 100644 --- a/addons/resource/resource.py +++ b/addons/resource/resource.py @@ -176,8 +176,11 @@ class resource_calendar(osv.osv): calendar = self.browse(cr, uid, id, context=None) return [att for att in calendar.attendance_ids if int(att.dayofweek) in weekdays] - def get_weekdays(self, cr, uid, id, context=None): - """ Return the list of weekdays that contain at least one working interval """ + def get_weekdays(self, cr, uid, id, default_weekdays=None, context=None): + """ Return the list of weekdays that contain at least one working interval. + If no id is given (no calendar), return default weekdays. """ + if id is None: + return default_weekdays if default_weekdays is not None else [0, 1, 2, 3, 4] calendar = self.browse(cr, uid, id, context=None) weekdays = set() for attendance in calendar.attendance_ids: @@ -381,12 +384,11 @@ class resource_calendar(osv.osv): # -------------------------------------------------- # Hours scheduling - # Note: do not support calendar being None # -------------------------------------------------- def _schedule_hours(self, cr, uid, id, hours, day_dt=None, compute_leaves=False, resource_id=None, - context=None): + default_interval=None, context=None): """ Schedule hours of work, using a calendar and an optional resource to compute working and leave days. This method can be used backwards, i.e. scheduling days before a deadline. @@ -403,6 +405,12 @@ class resource_calendar(osv.osv): computing the leaves. If not set, only general leaves are computed. If set, generic and specific leaves are computed. + :param tuple default_interval: if no id, try to return a default working + day using default_interval[0] as beginning + hour, and default_interval[1] as ending hour. + Example: default_interval = (8, 16). + Otherwise, a void list of working intervals + is returned when id is None. :return tuple (datetime, intervals): datetime is the beginning/ending date of the schedulign; intervals are the @@ -420,7 +428,7 @@ class resource_calendar(osv.osv): iterations = 0 current_datetime = day_dt - call_args = dict(compute_leaves=compute_leaves, resource_id=resource_id, context=context) + call_args = dict(compute_leaves=compute_leaves, resource_id=resource_id, default_interval=default_interval, context=context) while float_compare(remaining_hours, 0.0, precision_digits=2) in (1, 0) and iterations < 1000: if backwards: @@ -430,7 +438,7 @@ class resource_calendar(osv.osv): working_intervals = self.get_working_intervals_of_day(cr, uid, id, **call_args) - if id is None: # no calendar -> consider working 8 hours + if id is None and not working_interval: # no calendar -> consider working 8 hours remaining_hours -= 8.0 elif working_intervals: if backwards: @@ -459,18 +467,18 @@ class resource_calendar(osv.osv): def schedule_hours_get_date(self, cr, uid, id, hours, day_dt=None, compute_leaves=False, resource_id=None, - context=None): + default_interval=None, context=None): """ Wrapper on _schedule_hours: return the beginning/ending datetime of an hours scheduling. """ - res = self._schedule_hours(cr, uid, id, hours, day_dt, compute_leaves, resource_id, context) - return res[0][0] + res = self._schedule_hours(cr, uid, id, hours, day_dt, compute_leaves, resource_id, default_interval, context) + return res and res[0][0] or False def schedule_hours(self, cr, uid, id, hours, day_dt=None, compute_leaves=False, resource_id=None, - context=None): + default_interval=None, context=None): """ Wrapper on _schedule_hours: return the working intervals of an hours scheduling. """ - return self._schedule_hours(cr, uid, id, hours, day_dt, compute_leaves, resource_id, context) + return self._schedule_hours(cr, uid, id, hours, day_dt, compute_leaves, resource_id, default_interval, context) # -------------------------------------------------- # Days scheduling @@ -544,7 +552,7 @@ class resource_calendar(osv.osv): """ Wrapper on _schedule_days: return the beginning/ending datetime of a days scheduling. """ res = self._schedule_days(cr, uid, id, days, day_date, compute_leaves, resource_id, default_interval, context) - return res and res[-1][1] or [] + return res and res[-1][1] or False def schedule_days(self, cr, uid, id, days, day_date=None, compute_leaves=False, resource_id=None, default_interval=None, context=None): @@ -573,21 +581,23 @@ class resource_calendar(osv.osv): return self.schedule_hours( cr, uid, id, hours * -1.0, day_dt=dt_from.replace(minute=0, second=0), - compute_leaves=True, resource_id=resource + compute_leaves=True, resource_id=resource, + default_interval=(8, 16) ) def interval_get_multi(self, cr, uid, date_and_hours_by_cal, resource=False, byday=True): """ Used in mrp_operations/mrp_operations.py (default parameters) and in interval_get() - :deprecated: OpenERP saas-3. Use get_working_hours_of_date instead. Note: + :deprecated: OpenERP saas-3. Use schedule_hours instead. Note: Byday was not used. Since saas-3, counts Leave hours instead of all-day leaves.""" res = {} for dt_str, hours, calendar_id in date_and_hours_by_cal: result = self.schedule_hours( cr, uid, calendar_id, hours, day_dt=datetime.datetime.strptime(dt_str, '%Y-%m-%d %H:%M:%S').replace(minute=0, second=0), - compute_leaves=True, resource_id=resource + compute_leaves=True, resource_id=resource, + default_interval=(8, 16) ) res[(dt_str, hours, calendar_id)] = result return res @@ -597,7 +607,8 @@ class resource_calendar(osv.osv): crm/crm_lead.py (res given). :deprecated: OpenERP saas-3. Use get_working_hours instead.""" - res = self.interval_get_multi(cr, uid, [(dt_from.strftime('%Y-%m-%d %H:%M:%S'), hours, id)], resource, byday)[(dt_from.strftime('%Y-%m-%d %H:%M:%S'), hours, id)] + res = self.interval_get_multi( + cr, uid, [(dt_from.strftime('%Y-%m-%d %H:%M:%S'), hours, id)], resource, byday)[(dt_from.strftime('%Y-%m-%d %H:%M:%S'), hours, id)] return res def interval_hours_get(self, cr, uid, id, dt_from, dt_to, resource=False): @@ -611,7 +622,10 @@ class resource_calendar(osv.osv): :deprecated: OpenERP saas-3. Use get_working_hours instead. Note: since saas-3, now resets hour/minuts. Now counts leave hours instead of all-day leaves.""" - return self.get_working_hours(cr, uid, id, dt_from, dt_to, compute_leaves=(not exclude_leaves), resource_id=resource_id, context=context) + return self.get_working_hours( + cr, uid, id, dt_from, dt_to, + compute_leaves=(not exclude_leaves), resource_id=resource_id, + default_interval=(8, 16), context=context) class resource_calendar_attendance(osv.osv): diff --git a/addons/resource/tests/test_resource.py b/addons/resource/tests/test_resource.py index ad06a1f2430..346317449d3 100644 --- a/addons/resource/tests/test_resource.py +++ b/addons/resource/tests/test_resource.py @@ -406,6 +406,19 @@ class TestResource(TestResourceCommon): compute_leaves=True, resource_id=self.resource1_id) self.assertEqual(res, 33.0, 'resource_calendar: wrong get_working_hours computation') + # -------------------------------------------------- + # Test4: misc + # -------------------------------------------------- + + # Test without calendar and default_interval + res = self.resource_calendar.get_working_hours( + cr, uid, None, + self.date1.replace(hour=6, minute=0), + self.date2.replace(hour=23, minute=0), + compute_leaves=True, resource_id=self.resource1_id, + default_interval=(8, 16)) + self.assertEqual(res, 32.0, 'resource_calendar: wrong get_working_hours computation') + def test_50_calendar_schedule_days(self): """ Testing calendar days scheduling """ cr, uid = self.cr, self.uid @@ -424,9 +437,9 @@ class TestResource(TestResourceCommon): self.assertEqual(res.date(), datetime.strptime('2013-03-01 00:0:00', _format).date(), 'resource_calendar: wrong days scheduling') # -------------------------------------------------- - # Test2: without calendar and default scheduling + # Test2: misc # -------------------------------------------------- - # Without calendar, should only count days -> 12 -> 16, 5 days + # Without calendar, should only count days -> 12 -> 16, 5 days with default intervals res = self.resource_calendar.schedule_days_get_date(cr, uid, None, 5, day_date=self.date1, default_interval=(8, 16)) self.assertEqual(res, datetime.strptime('2013-02-16 16:00:00', _format), 'resource_calendar: wrong days scheduling')