From 82f780e948444cd9938613e99b3a77f32056f3ba Mon Sep 17 00:00:00 2001 From: Florent Xicluna Date: Thu, 19 Jan 2012 20:16:54 +0100 Subject: [PATCH 001/325] [REM] unused imports. bzr revid: florent.xicluna@gmail.com-20120119191654-scm8c3o07icyz5b1 --- openerp/osv/fields.py | 3 --- openerp/tests/common.py | 1 - openerp/tests/test_orm.py | 1 - openerp/tiny_socket.py | 1 - 4 files changed, 6 deletions(-) diff --git a/openerp/osv/fields.py b/openerp/osv/fields.py index 871fc32f884..ff02a8c89f9 100644 --- a/openerp/osv/fields.py +++ b/openerp/osv/fields.py @@ -35,14 +35,11 @@ import base64 import datetime as DT import re -import string -import sys import warnings import xmlrpclib from psycopg2 import Binary import openerp -import openerp.netsvc as netsvc import openerp.tools as tools from openerp.tools.translate import _ from openerp.tools import float_round, float_repr diff --git a/openerp/tests/common.py b/openerp/tests/common.py index 44696384ce7..93e5f6d5bc2 100644 --- a/openerp/tests/common.py +++ b/openerp/tests/common.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- -import os import time import xmlrpclib diff --git a/openerp/tests/test_orm.py b/openerp/tests/test_orm.py index c11d4cd19d2..cf880933fe5 100644 --- a/openerp/tests/test_orm.py +++ b/openerp/tests/test_orm.py @@ -1,4 +1,3 @@ -import os import unittest2 import openerp diff --git a/openerp/tiny_socket.py b/openerp/tiny_socket.py index b4bed83a4c0..f86797f0f67 100644 --- a/openerp/tiny_socket.py +++ b/openerp/tiny_socket.py @@ -22,7 +22,6 @@ import socket import cPickle import cStringIO -import marshal import netsvc From e7838dfbc44472a444b1f58dd7869febbc5984b7 Mon Sep 17 00:00:00 2001 From: Florent Xicluna Date: Thu, 19 Jan 2012 20:17:56 +0100 Subject: [PATCH 002/325] [REF] fix weird indentation, not multiple of four. bzr revid: florent.xicluna@gmail.com-20120119191756-niny262vp1nvmpp8 --- openerp/netsvc.py | 16 ++++++++-------- openerp/osv/orm.py | 12 ++++++------ openerp/service/netrpc_server.py | 6 +++--- openerp/service/web_services.py | 10 +++++----- openerp/tests/test_xmlrpc.py | 4 ++-- 5 files changed, 24 insertions(+), 24 deletions(-) diff --git a/openerp/netsvc.py b/openerp/netsvc.py index ca08a362771..53750ed84da 100644 --- a/openerp/netsvc.py +++ b/openerp/netsvc.py @@ -84,12 +84,12 @@ class Service(object): cls._services.pop(name) def LocalService(name): - # Special case for addons support, will be removed in a few days when addons - # are updated to directly use openerp.osv.osv.service. - if name == 'object_proxy': - return openerp.osv.osv.service + # Special case for addons support, will be removed in a few days when addons + # are updated to directly use openerp.osv.osv.service. + if name == 'object_proxy': + return openerp.osv.osv.service - return Service._services[name] + return Service._services[name] class ExportService(object): """ Proxy for exported services. @@ -198,9 +198,9 @@ def init_logger(): # server intended to test it. def init_alternative_logger(): class H(logging.Handler): - def emit(self, record): - if record.levelno > 20: - print record.levelno, record.pathname, record.msg + def emit(self, record): + if record.levelno > 20: + print record.levelno, record.pathname, record.msg handler = H() logger = logging.getLogger() logger.handlers = [] diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index 1c12fab27c9..f2686708436 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -98,10 +98,10 @@ def transfer_node_to_modifiers(node, modifiers, context=None, in_tree_view=False if node.get('states'): if 'invisible' in modifiers and isinstance(modifiers['invisible'], list): - # TODO combine with AND or OR, use implicit AND for now. - modifiers['invisible'].append(('state', 'not in', node.get('states').split(','))) + # TODO combine with AND or OR, use implicit AND for now. + modifiers['invisible'].append(('state', 'not in', node.get('states').split(','))) else: - modifiers['invisible'] = [('state', 'not in', node.get('states').split(','))] + modifiers['invisible'] = [('state', 'not in', node.get('states').split(','))] for a in ('invisible', 'readonly', 'required'): if node.get(a): @@ -894,8 +894,8 @@ class BaseModel(object): for c in cls.__dict__.get(s, []): exist = False for c2 in range(len(new)): - #For _constraints, we should check field and methods as well - if new[c2][2]==c[2] and (new[c2][0] == c[0] \ + #For _constraints, we should check field and methods as well + if new[c2][2]==c[2] and (new[c2][0] == c[0] \ or getattr(new[c2][0],'__name__', True) == \ getattr(c[0],'__name__', False)): # If new class defines a constraint with @@ -2690,7 +2690,7 @@ class BaseModel(object): elif val in dict(self._columns[field].selection(self, cr, uid, context=context)): return raise except_orm(_('ValidateError'), - _('The value "%s" for the field "%s.%s" is not in the selection') % (value, self._table, field)) + _('The value "%s" for the field "%s.%s" is not in the selection') % (value, self._table, field)) def _check_removed_columns(self, cr, log=False): # iterate on the database columns to drop the NOT NULL constraints diff --git a/openerp/service/netrpc_server.py b/openerp/service/netrpc_server.py index f86d6d21273..efe26906720 100644 --- a/openerp/service/netrpc_server.py +++ b/openerp/service/netrpc_server.py @@ -125,9 +125,9 @@ class TinySocketServerThread(threading.Thread,netsvc.Server): ct.start() lt = len(self.threads) if (lt > 10) and (lt % 10 == 0): - # Not many threads should be serving at the same time, so log - # their abuse. - netsvc.Logger().notifyChannel("web-services", netsvc.LOG_DEBUG, + # Not many threads should be serving at the same time, so log + # their abuse. + netsvc.Logger().notifyChannel("web-services", netsvc.LOG_DEBUG, "Netrpc: %d threads" % len(self.threads)) self.socket.close() except Exception, e: diff --git a/openerp/service/web_services.py b/openerp/service/web_services.py index 1bda0230c89..8c3db0e88af 100644 --- a/openerp/service/web_services.py +++ b/openerp/service/web_services.py @@ -521,11 +521,11 @@ GNU Public Licence. 'OS Name : %s\n' \ %(platform.platform(), platform.os.name) if os.name == 'posix': - if platform.system() == 'Linux': - lsbinfo = os.popen('lsb_release -a').read() - environment += '%s'%(lsbinfo) - else: - environment += 'Your System is not lsb compliant\n' + if platform.system() == 'Linux': + lsbinfo = os.popen('lsb_release -a').read() + environment += '%s'%(lsbinfo) + else: + environment += 'Your System is not lsb compliant\n' environment += 'Operating System Release : %s\n' \ 'Operating System Version : %s\n' \ 'Operating System Architecture : %s\n' \ diff --git a/openerp/tests/test_xmlrpc.py b/openerp/tests/test_xmlrpc.py index 954d3447360..ca0ae454437 100644 --- a/openerp/tests/test_xmlrpc.py +++ b/openerp/tests/test_xmlrpc.py @@ -19,8 +19,8 @@ ADMIN_USER_ID = common.ADMIN_USER_ID ADMIN_PASSWORD = common.ADMIN_PASSWORD def setUpModule(): - common.start_openerp() - common.create_xmlrpc_proxies() + common.start_openerp() + common.create_xmlrpc_proxies() tearDownModule = common.tearDownModule From efef81654b90e70a24d1a330c0ef8d9942e05444 Mon Sep 17 00:00:00 2001 From: Florent Xicluna Date: Thu, 19 Jan 2012 20:18:38 +0100 Subject: [PATCH 003/325] [REF] replace deprecated <> symbol. bzr revid: florent.xicluna@gmail.com-20120119191838-r07oybyiqbkfehsz --- openerp/osv/orm.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index f2686708436..dceb14a2710 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -1303,7 +1303,7 @@ class BaseModel(object): if not line[i]: continue - if field[:len(prefix)] <> prefix: + if field[:len(prefix)] != prefix: if line[i] and skip: return False continue @@ -2666,7 +2666,7 @@ class BaseModel(object): # if val is a many2one, just write the ID if type(val) == tuple: val = val[0] - if (val<>False) or (type(val)<>bool): + if val is not False: cr.execute(update_query, (ss[1](val), key)) def _check_selection_field_value(self, cr, uid, field, value, context=None): From c749cd8fcc864e6103f55bcf7b12e0910f2ffa14 Mon Sep 17 00:00:00 2001 From: Florent Xicluna Date: Mon, 23 Jan 2012 15:29:32 +0100 Subject: [PATCH 004/325] =?UTF-8?q?[IMP]=C2=A0upgrade=20the=20Pickle=20pro?= =?UTF-8?q?tocol=20to=20consume=20less=20bandwidth.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit bzr revid: florent.xicluna@gmail.com-20120123142932-idcqz4p46gvbvhfh --- openerp/tiny_socket.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/openerp/tiny_socket.py b/openerp/tiny_socket.py index b4bed83a4c0..c3960afd054 100644 --- a/openerp/tiny_socket.py +++ b/openerp/tiny_socket.py @@ -28,6 +28,10 @@ import netsvc #.apidoc title: Net-RPC classes +# Pickle protocol version 2 is optimized compared to default (version 0) +PICKLE_PROTOCOL = 2 + + class Myexception(Exception): """ custom exception object store @@ -63,8 +67,8 @@ class mysocket: netsvc.close_socket(self.sock) def mysend(self, msg, exception=False, traceback=None): - msg = cPickle.dumps([msg,traceback]) - self.sock.sendall('%8d%s%s' % (len(msg), exception and "1" or "0", msg)) + msg = cPickle.dumps([msg, traceback], PICKLE_PROTOCOL) + self.sock.sendall('%8d%d%s' % (len(msg), bool(exception), msg)) def myreceive(self): buf='' From bac1a957193c5b76fc944d268d2b711809e34d19 Mon Sep 17 00:00:00 2001 From: Florent Xicluna Date: Mon, 23 Jan 2012 15:30:15 +0100 Subject: [PATCH 005/325] =?UTF-8?q?[IMP]=C2=A0merge=20two=20socket.recv=20?= =?UTF-8?q?into=20one.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit bzr revid: florent.xicluna@gmail.com-20120123143015-gz22l5qre6ria8f4 --- openerp/tiny_socket.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/openerp/tiny_socket.py b/openerp/tiny_socket.py index c3960afd054..87db82f6d91 100644 --- a/openerp/tiny_socket.py +++ b/openerp/tiny_socket.py @@ -72,15 +72,14 @@ class mysocket: def myreceive(self): buf='' - while len(buf) < 8: - chunk = self.sock.recv(8 - len(buf)) + while len(buf) < 9: + chunk = self.sock.recv(9 - len(buf)) if not chunk: raise socket.timeout buf += chunk - size = int(buf) - buf = self.sock.recv(1) - if buf != "0": - exception = buf + size = int(buf[:8]) + if buf[8] != "0": + exception = buf[8] else: exception = False msg = '' From 5c40627e4bd91c2355a4d196f62e1ccfa83aaf12 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 26 Jan 2012 14:30:13 +0100 Subject: [PATCH 006/325] [FIX] don't just print a warning if an @eval fails in an XML file bzr revid: xmo@openerp.com-20120126133013-5fnsouix8cutwlik --- openerp/tools/convert.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/openerp/tools/convert.py b/openerp/tools/convert.py index 553aa48effc..ec3e67670c3 100644 --- a/openerp/tools/convert.py +++ b/openerp/tools/convert.py @@ -129,15 +129,14 @@ def _eval_xml(self, node, pool, cr, uid, idref, context=None): f_val = f_val[0] return f_val a_eval = node.get('eval','') - idref2 = {} if a_eval: idref2 = _get_idref(self, cr, uid, f_model, context, idref) try: return unsafe_eval(a_eval, idref2) except Exception: - logger = logging.getLogger('init') - logger.warning('could not eval(%s) for %s in %s' % (a_eval, node.get('name'), context), exc_info=True) - return "" + logging.getLogger('openerp.tools.convert.init').error( + 'Could not eval(%s) for %s in %s', a_eval, node.get('name'), context) + raise if t == 'xml': def _process(s, idref): m = re.findall('[^%]%\((.*?)\)[ds]', s) From 111d8b76f7e384a3b1a77d802b52eedbb7ae04c7 Mon Sep 17 00:00:00 2001 From: Florent Xicluna Date: Wed, 1 Feb 2012 13:33:11 +0100 Subject: [PATCH 007/325] [REF] one unused import and one redundant import. bzr revid: florent.xicluna@gmail.com-20120201123311-yvljvcj0luly77qt --- openerp-server | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/openerp-server b/openerp-server index 334c1790526..5868b4f33d5 100755 --- a/openerp-server +++ b/openerp-server @@ -42,9 +42,6 @@ import openerp __author__ = openerp.release.author __version__ = openerp.release.version -import sys -import imp - def check_root_user(): """ Exit if the process's user is 'root' (on POSIX system).""" if os.name == 'posix': @@ -200,7 +197,7 @@ def quit_on_signals(): try: while quit_signals_received == 0: time.sleep(60) - except KeyboardInterrupt, e: + except KeyboardInterrupt: pass if config['pidfile']: From 1ef81548ba5dd463adaf20433b7bc4b39ebb8e78 Mon Sep 17 00:00:00 2001 From: Florent Xicluna Date: Wed, 8 Feb 2012 15:22:48 +0100 Subject: [PATCH 008/325] [REF] additional cleanup after vmt's logging refactoring. bzr revid: florent.xicluna@gmail.com-20120208142248-p63odfqo673yqqml --- openerp/service/netrpc_server.py | 2 +- openerp/service/web_services.py | 17 ++++++++--------- openerp/wizard/__init__.py | 6 +----- 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/openerp/service/netrpc_server.py b/openerp/service/netrpc_server.py index 327ebc5bbdc..fcbfaf0ba82 100644 --- a/openerp/service/netrpc_server.py +++ b/openerp/service/netrpc_server.py @@ -131,7 +131,7 @@ class TinySocketServerThread(threading.Thread,netsvc.Server): _logger.debug("Netrpc: %d threads", len(self.threads)) self.socket.close() except Exception, e: - _logger.warning("Netrpc: closing because of exception %s" % str(e)) + _logger.warning("Netrpc: closing because of exception %s", e) self.socket.close() return False diff --git a/openerp/service/web_services.py b/openerp/service/web_services.py index 43f4d1af639..661b74a6995 100644 --- a/openerp/service/web_services.py +++ b/openerp/service/web_services.py @@ -224,9 +224,9 @@ class db(netsvc.ExportService): if not data or res: _logger.error( - 'DUMP DB: %s failed! Please verify the configuration of the database password on the server. '\ - 'It should be provided as a -w command-line option, or as `db_password` in the '\ - 'server configuration file.\n %s' % (db_name, data)) + 'DUMP DB: %s failed! Please verify the configuration of the database password on the server. ' + 'It should be provided as a -w command-line option, or as `db_password` in the ' + 'server configuration file.\n %s', db_name, data) raise Exception, "Couldn't dump database" _logger.info('DUMP DB successful: %s', db_name) @@ -239,7 +239,7 @@ class db(netsvc.ExportService): self._set_pg_psw_env_var() if self.exp_db_exist(db_name): - _logger.warning('RESTORE DB: %s already exists' % (db_name,)) + _logger.warning('RESTORE DB: %s already exists', db_name) raise Exception, "Database already exists" self._create_empty_database(db_name) @@ -268,7 +268,7 @@ class db(netsvc.ExportService): res = stdout.close() if res: raise Exception, "Couldn't restore database" - _logger.info('RESTORE DB: %s' % (db_name)) + _logger.info('RESTORE DB: %s', db_name) return True finally: @@ -451,8 +451,7 @@ GNU Public Licence. backup_directory = os.path.join(tools.config['root_path'], 'backup', time.strftime('%Y-%m-%d-%H-%M')) if zips and not os.path.isdir(backup_directory): - _logger.info('create a new backup directory to \ - store the old modules: %s', backup_directory) + _logger.info('create a new backup directory to store the old modules: %s', backup_directory) os.makedirs(backup_directory) for module in zips: @@ -678,7 +677,7 @@ class report_spool(netsvc.ExportService): self._reports[id]['state'] = True except Exception, exception: - _logger.exception('Exception: %s\n', str(exception)) + _logger.exception('Exception: %s\n', exception) if hasattr(exception, 'name') and hasattr(exception, 'value'): self._reports[id]['exception'] = openerp.exceptions.DeferredException(tools.ustr(exception.name), tools.ustr(exception.value)) else: @@ -715,7 +714,7 @@ class report_spool(netsvc.ExportService): self._reports[id]['format'] = format self._reports[id]['state'] = True except Exception, exception: - _logger.exception('Exception: %s\n', str(exception)) + _logger.exception('Exception: %s\n', exception) if hasattr(exception, 'name') and hasattr(exception, 'value'): self._reports[id]['exception'] = openerp.exceptions.DeferredException(tools.ustr(exception.name), tools.ustr(exception.value)) else: diff --git a/openerp/wizard/__init__.py b/openerp/wizard/__init__.py index 7354a43498d..debf0f1e74f 100644 --- a/openerp/wizard/__init__.py +++ b/openerp/wizard/__init__.py @@ -31,7 +31,6 @@ import openerp.pooler as pooler from openerp.osv.osv import except_osv from openerp.osv.orm import except_orm -import sys _logger = logging.getLogger(__name__) @@ -168,10 +167,7 @@ class interface(netsvc.Service): or isinstance(e, except_orm): netsvc.abort_response(2, e.name, 'warning', e.value) else: - import traceback - tb_s = reduce(lambda x, y: x+y, traceback.format_exception( - sys.exc_type, sys.exc_value, sys.exc_traceback)) - _logger.error('Exception in call: ' + tb_s) + _logger.exception('Exception in call:') raise return res From 57ca8e47975101c57991cf89efe86c033ff8a6de Mon Sep 17 00:00:00 2001 From: Florent Xicluna Date: Wed, 8 Feb 2012 18:00:34 +0100 Subject: [PATCH 009/325] [REF] openerp.report: better use of isinstance. bzr revid: florent.xicluna@gmail.com-20120208170034-2w8szxy350qpwas6 --- openerp/report/custom.py | 2 +- openerp/report/render/rml2txt/utils.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/openerp/report/custom.py b/openerp/report/custom.py index 051d1f29862..d06f2d721f7 100644 --- a/openerp/report/custom.py +++ b/openerp/report/custom.py @@ -108,7 +108,7 @@ class report_custom(report_int): key = levels.keys() for l in key: objs = eval('obj.'+l,{'obj': obj}) - if not isinstance(objs, browse_record_list) and type(objs) <> type([]): + if not isinstance(objs, (browse_record_list, list)): objs = [objs] field_new = [] cond_new = [] diff --git a/openerp/report/render/rml2txt/utils.py b/openerp/report/render/rml2txt/utils.py index 122411afb2d..c08210ecc79 100644 --- a/openerp/report/render/rml2txt/utils.py +++ b/openerp/report/render/rml2txt/utils.py @@ -75,9 +75,9 @@ def _process_text(self, txt): txt2 = eval(sps.pop(0),self.localcontext) except: txt2 = '' - if type(txt2) == type(0) or type(txt2) == type(0.0): + if isinstance(txt2, (int, float)): txt2 = str(txt2) - if type(txt2)==type('') or type(txt2)==type(u''): + if isinstance(txt2, basestring): result += txt2 return result From b5fa51f4a691b840e588bc33e4e960958860fd12 Mon Sep 17 00:00:00 2001 From: Florent Xicluna Date: Wed, 8 Feb 2012 18:02:17 +0100 Subject: [PATCH 010/325] =?UTF-8?q?[REF]=C2=A0openerp.report:=20use=20the?= =?UTF-8?q?=20recommended=20syntax=20to=20raise=20error=20and=20never=20us?= =?UTF-8?q?e=20empty=20except:.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit bzr revid: florent.xicluna@gmail.com-20120208170217-xsa5odzlhite0nda --- openerp/report/custom.py | 2 +- openerp/report/interface.py | 4 ++-- openerp/report/preprocess.py | 2 +- openerp/report/printscreen/ps_list.py | 2 +- openerp/report/render/rml2html/rml2html.py | 2 +- openerp/report/render/rml2pdf/trml2pdf.py | 2 +- openerp/report/render/rml2txt/utils.py | 8 ++++---- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/openerp/report/custom.py b/openerp/report/custom.py index d06f2d721f7..a03ae0b8a53 100644 --- a/openerp/report/custom.py +++ b/openerp/report/custom.py @@ -267,7 +267,7 @@ class report_custom(report_int): else: try: row.append(float(r[j])) - except: + except Exception: row.append(r[j]) results2.append(row) if report['type']=='pie': diff --git a/openerp/report/interface.py b/openerp/report/interface.py index 9a97c445671..69474a18433 100644 --- a/openerp/report/interface.py +++ b/openerp/report/interface.py @@ -44,8 +44,8 @@ class report_int(netsvc.Service): def __init__(self, name): assert not self.exists(name), 'The report "%s" already exists!' % name super(report_int, self).__init__(name) - if name[0:7]<>'report.': - raise Exception, 'ConceptionError, bad report name, should start with "report."' + if not name.startswith('report.'): + raise Exception('ConceptionError, bad report name, should start with "report."') self.name = name self.id = 0 self.name2 = '.'.join(name.split('.')[1:]) diff --git a/openerp/report/preprocess.py b/openerp/report/preprocess.py index e681860d7a2..93b6b4d1bc9 100644 --- a/openerp/report/preprocess.py +++ b/openerp/report/preprocess.py @@ -48,7 +48,7 @@ class report(object): try: while n.tag != txt.group(3): n = n.getparent() - except: + except Exception: n = node else: n = node.getparent() diff --git a/openerp/report/printscreen/ps_list.py b/openerp/report/printscreen/ps_list.py index dc280a53e3e..8f0629462f8 100644 --- a/openerp/report/printscreen/ps_list.py +++ b/openerp/report/printscreen/ps_list.py @@ -56,7 +56,7 @@ class report_printscreen_list(report_int): def _parse_string(self, view): try: dom = etree.XML(view.encode('utf-8')) - except: + except Exception: dom = etree.XML(view) return self._parse_node(dom) diff --git a/openerp/report/render/rml2html/rml2html.py b/openerp/report/render/rml2html/rml2html.py index 504492772df..a26f6eadaa6 100644 --- a/openerp/report/render/rml2html/rml2html.py +++ b/openerp/report/render/rml2html/rml2html.py @@ -98,7 +98,7 @@ class _flowable(object): try: if new_child.get('style').find('terp_tblheader')!= -1: new_node.tag = 'th' - except: + except Exception: pass process(node,new_node) if new_node.get('colWidths',False): diff --git a/openerp/report/render/rml2pdf/trml2pdf.py b/openerp/report/render/rml2pdf/trml2pdf.py index 96287166074..58457993142 100644 --- a/openerp/report/render/rml2pdf/trml2pdf.py +++ b/openerp/report/render/rml2pdf/trml2pdf.py @@ -424,7 +424,7 @@ class _rml_canvas(object): flow.drawOn(self.canvas,infos['x'],infos['y']) infos['height']-=h else: - raise ValueError, "Not enough space" + raise ValueError("Not enough space") def _line_mode(self, node): ljoin = {'round':1, 'mitered':0, 'bevelled':2} diff --git a/openerp/report/render/rml2txt/utils.py b/openerp/report/render/rml2txt/utils.py index c08210ecc79..95e99c32ce1 100644 --- a/openerp/report/render/rml2txt/utils.py +++ b/openerp/report/render/rml2txt/utils.py @@ -37,7 +37,7 @@ def _child_get(node, self=None, tagname=None): if n.get('rml_except', False): try: eval(n.get('rml_except'), {}, self.localcontext) - except: + except Exception: continue if n.get('rml_tag'): try: @@ -46,7 +46,7 @@ def _child_get(node, self=None, tagname=None): n2.tag = tag n2.attrib.update(attr) yield n2 - except: + except Exception: yield n else: yield n @@ -55,7 +55,7 @@ def _child_get(node, self=None, tagname=None): if self and self.localcontext and n.get('rml_except', False): try: eval(n.get('rml_except'), {}, self.localcontext) - except: + except Exception: continue if (tagname is None) or (n.tag==tagname): yield n @@ -73,7 +73,7 @@ def _process_text(self, txt): if sps: try: txt2 = eval(sps.pop(0),self.localcontext) - except: + except Exception: txt2 = '' if isinstance(txt2, (int, float)): txt2 = str(txt2) From 9621008df12a65730a123e389d84ef8b21e5941d Mon Sep 17 00:00:00 2001 From: Florent Xicluna Date: Wed, 8 Feb 2012 18:03:51 +0100 Subject: [PATCH 011/325] =?UTF-8?q?[REF]=C2=A0openerp.report:=20replace=20?= =?UTF-8?q?deprecated=20has=5Fkey.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit bzr revid: florent.xicluna@gmail.com-20120208170351-1vmewmuufmxn7x52 --- openerp/report/custom.py | 14 +++++++------- openerp/report/print_xml.py | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/openerp/report/custom.py b/openerp/report/custom.py index a03ae0b8a53..b33065fcdee 100644 --- a/openerp/report/custom.py +++ b/openerp/report/custom.py @@ -221,7 +221,7 @@ class report_custom(report_int): res_dic[prev].append(line) else: prev = line[groupby] - if res_dic.has_key(line[groupby]): + if line[groupby] in res_dic: res_dic[line[groupby]].append(line) else: res_dic[line[groupby]] = [] @@ -389,7 +389,7 @@ class report_custom(report_int): if date_idx != None: for r in results: key = process_date['Y'](r[date_idx]) - if not data_by_year.has_key(key): + if key not in data_by_year: data_by_year[key] = [] for i in range(len(r)): r[i] = fct[i](r[i]) @@ -407,14 +407,14 @@ class report_custom(report_int): for d in data_by_year[line]: for idx in range(len(fields)-1): fields_bar.append({}) - if fields_bar[idx].has_key(d[0]): + if d[0] in fields_bar[idx]: fields_bar[idx][d[0]] += d[idx+1] else: fields_bar[idx][d[0]] = d[idx+1] for idx in range(len(fields)-1): data = {} for k in fields_bar[idx].keys(): - if data.has_key(k): + if k in data: data[k] += fields_bar[idx][k] else: data[k] = fields_bar[idx][k] @@ -488,7 +488,7 @@ class report_custom(report_int): if date_idx != None: for r in results: key = process_date['Y'](r[date_idx]) - if not data_by_year.has_key(key): + if key not in data_by_year: data_by_year[key] = [] for i in range(len(r)): r[i] = fct[i](r[i]) @@ -507,14 +507,14 @@ class report_custom(report_int): for d in data_by_year[line]: for idx in range(len(fields)-1): fields_bar.append({}) - if fields_bar[idx].has_key(d[0]): + if d[0] in fields_bar[idx]: fields_bar[idx][d[0]] += d[idx+1] else: fields_bar[idx][d[0]] = d[idx+1] for idx in range(len(fields)-1): data = {} for k in fields_bar[idx].keys(): - if data.has_key(k): + if k in data: data[k] += fields_bar[idx][k] else: data[k] = fields_bar[idx][k] diff --git a/openerp/report/print_xml.py b/openerp/report/print_xml.py index ee1b9a316b3..2137eabee79 100644 --- a/openerp/report/print_xml.py +++ b/openerp/report/print_xml.py @@ -200,7 +200,7 @@ class document(object): else: args = [] # get the object - if attrs.has_key('model'): + if 'model' in attrs: obj = self.pool.get(attrs['model']) else: if isinstance(browser, list): @@ -209,7 +209,7 @@ class document(object): obj = browser._table # get the ids - if attrs.has_key('ids'): + if 'ids' in attrs: ids = self.eval(browser, attrs['ids']) else: if isinstance(browser, list): From 7675d45c2c10e833bc5d5f0b3f905f1cca652a3d Mon Sep 17 00:00:00 2001 From: Florent Xicluna Date: Wed, 8 Feb 2012 18:04:56 +0100 Subject: [PATCH 012/325] [REF] openerp.report: fix weird indentation, not multiple of four. bzr revid: florent.xicluna@gmail.com-20120208170456-ak1ykpy6yel71ylc --- openerp/report/interface.py | 2 +- openerp/report/print_xml.py | 2 +- openerp/report/printscreen/ps_form.py | 2 +- openerp/report/render/rml2html/rml2html.py | 16 ++++++++-------- openerp/report/render/rml2pdf/trml2pdf.py | 2 +- openerp/report/render/rml2txt/rml2txt.py | 4 ++-- openerp/report/render/simple.py | 2 +- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/openerp/report/interface.py b/openerp/report/interface.py index 69474a18433..17dc0973d7e 100644 --- a/openerp/report/interface.py +++ b/openerp/report/interface.py @@ -181,7 +181,7 @@ class report_rml(report_int): def create_pdf(self, rml, localcontext = None, logo=None, title=None): if not localcontext: - localcontext={} + localcontext = {} localcontext.update({'internal_header':self.internal_header}) if logo: self.bin_datas['logo'] = logo diff --git a/openerp/report/print_xml.py b/openerp/report/print_xml.py index 2137eabee79..c2af0984c2e 100644 --- a/openerp/report/print_xml.py +++ b/openerp/report/print_xml.py @@ -228,7 +228,7 @@ class document(object): if not isinstance(datas[atr['value']], (str, unicode)): txt = str(datas[atr['value']]) else: - txt = datas[atr['value']] + txt = datas[atr['value']] el.text = txt else: for el_cld in node: diff --git a/openerp/report/printscreen/ps_form.py b/openerp/report/printscreen/ps_form.py index 8e3823e6b03..cf6d77cbe26 100644 --- a/openerp/report/printscreen/ps_form.py +++ b/openerp/report/printscreen/ps_form.py @@ -120,7 +120,7 @@ class report_printscreen_list(report_int): line[f]=round(line[f],precision) col = etree.SubElement(node_line, 'col', tree='no') if line[f] != None: - col.text = tools.ustr(line[f] or '') + col.text = tools.ustr(line[f] or '') else: col.text = '/' diff --git a/openerp/report/render/rml2html/rml2html.py b/openerp/report/render/rml2html/rml2html.py index a26f6eadaa6..17ed2e3103e 100644 --- a/openerp/report/render/rml2html/rml2html.py +++ b/openerp/report/render/rml2html/rml2html.py @@ -232,7 +232,7 @@ class _rml_stylesheet(object): attr = {} attrs = ps.attrib for key, val in attrs.items(): - attr[key] = val + attr[key] = val attrs = [] for a in attr: if a in self._tags: @@ -296,13 +296,13 @@ class _rml_template(object): frames[(posy,posx,tmpl.get('id'))] = _rml_tmpl_frame(posx, utils.unit_get(tmpl.get('width'))) for tmpl in pt.findall('pageGraphics'): for n in tmpl: - if n.tag == 'image': - self.data = rc + utils._process_text(self, n.text) - if n.tag in self._tags: - t = self._tags[n.tag](n, self.style,self.localcontext) - frames[(t.posy,t.posx,n.tag)] = t - else: - self.style.update(n) + if n.tag == 'image': + self.data = rc + utils._process_text(self, n.text) + if n.tag in self._tags: + t = self._tags[n.tag](n, self.style,self.localcontext) + frames[(t.posy,t.posx,n.tag)] = t + else: + self.style.update(n) keys = frames.keys() keys.sort() keys.reverse() diff --git a/openerp/report/render/rml2pdf/trml2pdf.py b/openerp/report/render/rml2pdf/trml2pdf.py index 58457993142..a17c03b40cb 100644 --- a/openerp/report/render/rml2pdf/trml2pdf.py +++ b/openerp/report/render/rml2pdf/trml2pdf.py @@ -82,7 +82,7 @@ class NumberedCanvas(canvas.Canvas): def showPage(self): self._currentPage +=1 if not self._flag: - self._pageCount += 1 + self._pageCount += 1 else: self.pages.update({self._currentPage:self._pageCount}) self._codes.append({'code': self._code, 'stack': self._codeStack}) diff --git a/openerp/report/render/rml2txt/rml2txt.py b/openerp/report/render/rml2txt/rml2txt.py index 4a30e0d2345..8a8c1b7f3c7 100755 --- a/openerp/report/render/rml2txt/rml2txt.py +++ b/openerp/report/render/rml2txt/rml2txt.py @@ -336,8 +336,8 @@ class _rml_stylesheet(object): attr = {} attrs = ps.attributes for i in range(attrs.length): - name = attrs.item(i).localName - attr[name] = ps.get(name) + name = attrs.item(i).localName + attr[name] = ps.get(name) attrs = [] for a in attr: if a in self._tags: diff --git a/openerp/report/render/simple.py b/openerp/report/render/simple.py index 4ce10991924..49d1adf148e 100644 --- a/openerp/report/render/simple.py +++ b/openerp/report/render/simple.py @@ -82,7 +82,7 @@ if __name__=='__main__': ''' if s.render(): - print s.get() + print s.get() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From 6312fd9426d6ccdbbfdada88763961f4b29d5c06 Mon Sep 17 00:00:00 2001 From: Florent Xicluna Date: Wed, 8 Feb 2012 18:07:00 +0100 Subject: [PATCH 013/325] [REF] openerp.report: remove unused imports and vars, simplify logging. bzr revid: florent.xicluna@gmail.com-20120208170700-csx9jb3nwmvq3dzj --- openerp/report/custom.py | 3 --- openerp/report/render/html2html/html2html.py | 2 -- openerp/report/render/makohtml2html/makohtml2html.py | 8 +++----- openerp/report/render/odt2odt/odt2odt.py | 1 - openerp/report/render/rml2html/rml2html.py | 2 +- openerp/report/render/rml2txt/rml2txt.py | 2 -- openerp/report/render/rml2txt/utils.py | 1 - openerp/report/render/simple.py | 1 - 8 files changed, 4 insertions(+), 16 deletions(-) diff --git a/openerp/report/custom.py b/openerp/report/custom.py index b33065fcdee..80dd9462175 100644 --- a/openerp/report/custom.py +++ b/openerp/report/custom.py @@ -21,7 +21,6 @@ import os import time -import openerp.netsvc as netsvc import openerp.tools as tools from openerp.tools.safe_eval import safe_eval as eval @@ -67,7 +66,6 @@ class report_custom(report_int): # def _row_get(self, cr, uid, objs, fields, conditions, row_canvas=None, group_by=None): result = [] - tmp = [] for obj in objs: tobreak = False for cond in conditions: @@ -365,7 +363,6 @@ class report_custom(report_int): order_date['Y'] = lambda x : x abscissa = [] - tmp = {} idx = 0 date_idx = None diff --git a/openerp/report/render/html2html/html2html.py b/openerp/report/render/html2html/html2html.py index 181c7f7ba67..09d7ad5e825 100644 --- a/openerp/report/render/html2html/html2html.py +++ b/openerp/report/render/html2html/html2html.py @@ -20,9 +20,7 @@ ############################################################################## from openerp.report.render.rml2pdf import utils -from lxml import etree import copy -import openerp.pooler as pooler import base64 import cStringIO import re diff --git a/openerp/report/render/makohtml2html/makohtml2html.py b/openerp/report/render/makohtml2html/makohtml2html.py index 57e57bd8d63..dbb3327a105 100644 --- a/openerp/report/render/makohtml2html/makohtml2html.py +++ b/openerp/report/render/makohtml2html/makohtml2html.py @@ -23,8 +23,7 @@ import mako from lxml import etree from mako.template import Template from mako.lookup import TemplateLookup -import openerp.netsvc as netsvc -import traceback, sys, os +import os _logger = logging.getLogger(__name__) @@ -126,9 +125,8 @@ class makohtml2html(object): final_html += self.format_header(etree_obj) final_html += self.format_body(etree_obj) return final_html - except Exception,e: - tb_s = reduce(lambda x, y: x+y, traceback.format_exception(sys.exc_type, sys.exc_value, sys.exc_traceback)) - _logger.error('report :\n%s\n%s\n', tb_s, str(e)) + except Exception: + _logger.exception('report :') def parseNode(html, localcontext = {}): r = makohtml2html(html, localcontext) diff --git a/openerp/report/render/odt2odt/odt2odt.py b/openerp/report/render/odt2odt/odt2odt.py index d077207f4d7..b9713943dc8 100644 --- a/openerp/report/render/odt2odt/odt2odt.py +++ b/openerp/report/render/odt2odt/odt2odt.py @@ -20,7 +20,6 @@ ############################################################################## from openerp.report.render.rml2pdf import utils -from lxml import etree import copy class odt2odt(object): diff --git a/openerp/report/render/rml2html/rml2html.py b/openerp/report/render/rml2html/rml2html.py index 17ed2e3103e..90bd58af99a 100644 --- a/openerp/report/render/rml2html/rml2html.py +++ b/openerp/report/render/rml2html/rml2html.py @@ -39,7 +39,7 @@ import sys import cStringIO from lxml import etree import copy -import utils + from openerp.report.render.rml2pdf import utils class _flowable(object): diff --git a/openerp/report/render/rml2txt/rml2txt.py b/openerp/report/render/rml2txt/rml2txt.py index 8a8c1b7f3c7..ab1930d81ba 100755 --- a/openerp/report/render/rml2txt/rml2txt.py +++ b/openerp/report/render/rml2txt/rml2txt.py @@ -22,9 +22,7 @@ import sys import StringIO -import copy from lxml import etree -import base64 import utils diff --git a/openerp/report/render/rml2txt/utils.py b/openerp/report/render/rml2txt/utils.py index 95e99c32ce1..2bf66925527 100644 --- a/openerp/report/render/rml2txt/utils.py +++ b/openerp/report/render/rml2txt/utils.py @@ -22,7 +22,6 @@ import re import reportlab import reportlab.lib.units -from lxml import etree from openerp.tools.safe_eval import safe_eval as eval _regex = re.compile('\[\[(.+?)\]\]') diff --git a/openerp/report/render/simple.py b/openerp/report/render/simple.py index 49d1adf148e..cb3831c141f 100644 --- a/openerp/report/render/simple.py +++ b/openerp/report/render/simple.py @@ -66,7 +66,6 @@ class simple(render.render): return self.result.getvalue() if __name__=='__main__': - import time s = simple() s.xml = ''' From ab9db3f6227789fabf3fdfcd2eda016b996bfd28 Mon Sep 17 00:00:00 2001 From: Florent Xicluna Date: Wed, 8 Feb 2012 22:33:13 +0100 Subject: [PATCH 014/325] [REM] more unused imports. bzr revid: florent.xicluna@gmail.com-20120208213313-1v0dugc59ch1fnnu --- openerp/service/http_server.py | 2 -- openerp/tests/addons/test_limits/models.py | 1 - 2 files changed, 3 deletions(-) diff --git a/openerp/service/http_server.py b/openerp/service/http_server.py index 07e31ea9c7d..63e0d08fc92 100644 --- a/openerp/service/http_server.py +++ b/openerp/service/http_server.py @@ -44,10 +44,8 @@ import posixpath import urllib import os import logging -from SimpleXMLRPCServer import SimpleXMLRPCDispatcher from websrv_lib import * -import openerp.netsvc as netsvc import openerp.tools as tools try: diff --git a/openerp/tests/addons/test_limits/models.py b/openerp/tests/addons/test_limits/models.py index 5240acd23ab..32e2a9a16f4 100644 --- a/openerp/tests/addons/test_limits/models.py +++ b/openerp/tests/addons/test_limits/models.py @@ -27,7 +27,6 @@ class m(openerp.osv.osv.Model): return True def consume_cpu_time(self, cr, uid, seconds, context=None): - import os t0 = time.clock() t1 = time.clock() while t1 - t0 < seconds: From a1e5c645d97e4e8f48cec546e858643029b7424a Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Thu, 9 Feb 2012 22:33:17 +0100 Subject: [PATCH 015/325] postgres use postgres instead of template1 and template1 instead of template0 bzr revid: al@openerp.com-20120209213317-3tt4o0sj87764ocn --- openerp/service/web_services.py | 10 +++++----- openerp/tools/config.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/openerp/service/web_services.py b/openerp/service/web_services.py index 3a9ba89c002..24ec650e432 100644 --- a/openerp/service/web_services.py +++ b/openerp/service/web_services.py @@ -117,7 +117,7 @@ class db(netsvc.ExportService): return fn(*params) def _create_empty_database(self, name): - db = sql_db.db_connect('template1') + db = sql_db.db_connect('postgres') cr = db.cursor() chosen_template = tools.config['db_template'] try: @@ -176,7 +176,7 @@ class db(netsvc.ExportService): openerp.modules.registry.RegistryManager.delete(db_name) sql_db.close_db(db_name) - db = sql_db.db_connect('template1') + db = sql_db.db_connect('postgres') cr = db.cursor() cr.autocommit(True) # avoid transaction block try: @@ -278,7 +278,7 @@ class db(netsvc.ExportService): openerp.modules.registry.RegistryManager.delete(old_name) sql_db.close_db(old_name) - db = sql_db.db_connect('template1') + db = sql_db.db_connect('postgres') cr = db.cursor() cr.autocommit(True) # avoid transaction block try: @@ -306,7 +306,7 @@ class db(netsvc.ExportService): raise openerp.exceptions.AccessDenied() chosen_template = tools.config['db_template'] templates_list = tuple(set(['template0', 'template1', 'postgres', chosen_template])) - db = sql_db.db_connect('template1') + db = sql_db.db_connect('postgres') cr = db.cursor() try: try: @@ -544,7 +544,7 @@ GNU Public Licence. return http_server.list_http_services() def exp_check_connectivity(self): - return bool(sql_db.db_connect('template1')) + return bool(sql_db.db_connect('postgres')) def exp_get_os_time(self): return os.times() diff --git a/openerp/tools/config.py b/openerp/tools/config.py index d628447a7a8..a03937601dc 100644 --- a/openerp/tools/config.py +++ b/openerp/tools/config.py @@ -223,7 +223,7 @@ class configmanager(object): help="specify the database port", type="int") group.add_option("--db_maxconn", dest="db_maxconn", type='int', my_default=64, help="specify the the maximum number of physical connections to posgresql") - group.add_option("--db-template", dest="db_template", my_default="template0", + group.add_option("--db-template", dest="db_template", my_default="template1", help="specify a custom database template to create a new database") parser.add_option_group(group) From d52e838455be4b038064bd9a1d972869b13257c1 Mon Sep 17 00:00:00 2001 From: Bogdan Stanciu Date: Sun, 12 Feb 2012 12:45:09 +0100 Subject: [PATCH 016/325] [IMP] some English corrections & 'encoding' into 'coding' for several py files. No code change. bzr revid: bogdanovidiu.stanciu@gmail.com-20120212114509-yrw86zewyv70dow7 --- openerp/addons/base/i18n/af.po | 4 +- openerp/addons/base/i18n/am.po | 4 +- openerp/addons/base/i18n/ar.po | 4 +- openerp/addons/base/i18n/base.pot | 4 +- openerp/addons/base/i18n/bg.po | 4 +- openerp/addons/base/i18n/bs.po | 4 +- openerp/addons/base/i18n/ca.po | 4 +- openerp/addons/base/i18n/cs.po | 4 +- openerp/addons/base/i18n/da.po | 4 +- openerp/addons/base/i18n/de.po | 4 +- openerp/addons/base/i18n/el.po | 4 +- openerp/addons/base/i18n/en_GB.po | 6 +- openerp/addons/base/i18n/es.po | 4 +- openerp/addons/base/i18n/es_AR.po | 2 +- openerp/addons/base/i18n/es_CL.po | 4 +- openerp/addons/base/i18n/es_CR.po | 4 +- openerp/addons/base/i18n/es_EC.po | 4 +- openerp/addons/base/i18n/et.po | 4 +- openerp/addons/base/i18n/eu.po | 4 +- openerp/addons/base/i18n/fa.po | 4 +- openerp/addons/base/i18n/fa_AF.po | 4 +- openerp/addons/base/i18n/fi.po | 4 +- openerp/addons/base/i18n/fr.po | 8 +-- openerp/addons/base/i18n/gl.po | 4 +- openerp/addons/base/i18n/he.po | 4 +- openerp/addons/base/i18n/hr.po | 4 +- openerp/addons/base/i18n/hu.po | 4 +- openerp/addons/base/i18n/hy.po | 4 +- openerp/addons/base/i18n/id.po | 4 +- openerp/addons/base/i18n/is.po | 4 +- openerp/addons/base/i18n/it.po | 4 +- openerp/addons/base/i18n/ja.po | 4 +- openerp/addons/base/i18n/kk.po | 4 +- openerp/addons/base/i18n/ko.po | 4 +- openerp/addons/base/i18n/lt.po | 4 +- openerp/addons/base/i18n/lt_LT.po | 2 +- openerp/addons/base/i18n/lv.po | 4 +- openerp/addons/base/i18n/mk.po | 4 +- openerp/addons/base/i18n/mn.po | 4 +- openerp/addons/base/i18n/nb.po | 4 +- openerp/addons/base/i18n/nl.po | 91 ++++++++++++-------------- openerp/addons/base/i18n/nl_BE.po | 4 +- openerp/addons/base/i18n/nl_NL.po | 2 +- openerp/addons/base/i18n/pl.po | 4 +- openerp/addons/base/i18n/pt.po | 4 +- openerp/addons/base/i18n/pt_BR.po | 8 +-- openerp/addons/base/i18n/ro.po | 4 +- openerp/addons/base/i18n/ru.po | 4 +- openerp/addons/base/i18n/sk.po | 4 +- openerp/addons/base/i18n/sl.po | 4 +- openerp/addons/base/i18n/sq.po | 4 +- openerp/addons/base/i18n/sr.po | 4 +- openerp/addons/base/i18n/sr@latin.po | 4 +- openerp/addons/base/i18n/sv.po | 4 +- openerp/addons/base/i18n/th.po | 4 +- openerp/addons/base/i18n/tlh.po | 4 +- openerp/addons/base/i18n/tr.po | 4 +- openerp/addons/base/i18n/uk.po | 4 +- openerp/addons/base/i18n/uk_UA.po | 2 +- openerp/addons/base/i18n/ur.po | 4 +- openerp/addons/base/i18n/vi.po | 4 +- openerp/addons/base/i18n/zh_CN.po | 4 +- openerp/addons/base/i18n/zh_HK.po | 4 +- openerp/addons/base/i18n/zh_TW.po | 4 +- openerp/addons/base/ir/ir_actions.py | 4 +- openerp/addons/base/res/res_country.py | 5 +- openerp/release.py | 2 +- openerp/service/http_server.py | 4 +- openerp/service/websrv_lib.py | 4 +- openerp/tools/yaml_import.py | 2 +- 70 files changed, 181 insertions(+), 185 deletions(-) diff --git a/openerp/addons/base/i18n/af.po b/openerp/addons/base/i18n/af.po index 750498c192f..10b7c035815 100644 --- a/openerp/addons/base/i18n/af.po +++ b/openerp/addons/base/i18n/af.po @@ -775,7 +775,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5461,7 +5461,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/am.po b/openerp/addons/base/i18n/am.po index c1e1faad680..3214ddec3a7 100644 --- a/openerp/addons/base/i18n/am.po +++ b/openerp/addons/base/i18n/am.po @@ -775,7 +775,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5461,7 +5461,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/ar.po b/openerp/addons/base/i18n/ar.po index 72c254eedb6..5912643d3c0 100644 --- a/openerp/addons/base/i18n/ar.po +++ b/openerp/addons/base/i18n/ar.po @@ -795,7 +795,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5545,7 +5545,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "رمز الولاية (ثلاثة حروف).\n" #. module: base diff --git a/openerp/addons/base/i18n/base.pot b/openerp/addons/base/i18n/base.pot index 357319afe91..c1ca9862e96 100644 --- a/openerp/addons/base/i18n/base.pot +++ b/openerp/addons/base/i18n/base.pot @@ -727,7 +727,7 @@ msgstr "" #: help:ir.actions.todo,type:0 msgid "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets automatically to Done." +"Launch Manually Once: after having been launched manually, it sets automatically to Done." msgstr "" #. module: base @@ -5037,7 +5037,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." "" msgstr "" diff --git a/openerp/addons/base/i18n/bg.po b/openerp/addons/base/i18n/bg.po index b44b49136f9..5f070859688 100644 --- a/openerp/addons/base/i18n/bg.po +++ b/openerp/addons/base/i18n/bg.po @@ -797,7 +797,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5552,7 +5552,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "Кодът на държавата в три букви.\n" #. module: base diff --git a/openerp/addons/base/i18n/bs.po b/openerp/addons/base/i18n/bs.po index 8b489f353b9..f4a109a9f86 100644 --- a/openerp/addons/base/i18n/bs.po +++ b/openerp/addons/base/i18n/bs.po @@ -783,7 +783,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5469,7 +5469,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/ca.po b/openerp/addons/base/i18n/ca.po index e9e3c958f8f..dbcc9dd3c31 100644 --- a/openerp/addons/base/i18n/ca.po +++ b/openerp/addons/base/i18n/ca.po @@ -807,7 +807,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5641,7 +5641,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "El codi de la província de 3 caràcters.\n" #. module: base diff --git a/openerp/addons/base/i18n/cs.po b/openerp/addons/base/i18n/cs.po index 9d7f5fd42da..08924e330d5 100644 --- a/openerp/addons/base/i18n/cs.po +++ b/openerp/addons/base/i18n/cs.po @@ -806,7 +806,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5635,7 +5635,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "Kód státu ve třech znacích.\n" #. module: base diff --git a/openerp/addons/base/i18n/da.po b/openerp/addons/base/i18n/da.po index fc56fd78eba..d4fdbe01cc4 100644 --- a/openerp/addons/base/i18n/da.po +++ b/openerp/addons/base/i18n/da.po @@ -775,7 +775,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5461,7 +5461,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/de.po b/openerp/addons/base/i18n/de.po index 401ede6d3f9..13f9e6f19da 100644 --- a/openerp/addons/base/i18n/de.po +++ b/openerp/addons/base/i18n/de.po @@ -813,7 +813,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "Manuell: manuell gestartet" @@ -5678,7 +5678,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "Der 3 stellige Staatencode\n" #. module: base diff --git a/openerp/addons/base/i18n/el.po b/openerp/addons/base/i18n/el.po index eca0eba1ee5..9f1dc8937e1 100644 --- a/openerp/addons/base/i18n/el.po +++ b/openerp/addons/base/i18n/el.po @@ -795,7 +795,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5589,7 +5589,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "Ο κωδικός κατάστασης με 3 χαρακτήρες\n" #. module: base diff --git a/openerp/addons/base/i18n/en_GB.po b/openerp/addons/base/i18n/en_GB.po index ba564da1057..2c9d775d610 100644 --- a/openerp/addons/base/i18n/en_GB.po +++ b/openerp/addons/base/i18n/en_GB.po @@ -802,7 +802,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5618,8 +5618,8 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" -msgstr "The state code in three chars.\n" +msgid "The state code in max. three chars." +msgstr "The state code in max. three chars." #. module: base #: model:res.country,name:base.sj diff --git a/openerp/addons/base/i18n/es.po b/openerp/addons/base/i18n/es.po index 697adbf8dd3..4548e2692b8 100644 --- a/openerp/addons/base/i18n/es.po +++ b/openerp/addons/base/i18n/es.po @@ -842,7 +842,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5726,7 +5726,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "El código de la provincia de 3 caracteres.\n" #. module: base diff --git a/openerp/addons/base/i18n/es_AR.po b/openerp/addons/base/i18n/es_AR.po index 5f2d8cb3305..e0a1569cffe 100644 --- a/openerp/addons/base/i18n/es_AR.po +++ b/openerp/addons/base/i18n/es_AR.po @@ -5583,7 +5583,7 @@ msgstr "STOCK_MEDIA_PAUSE" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "El código de la provincia de 3 caracteres.\n" #. module: base diff --git a/openerp/addons/base/i18n/es_CL.po b/openerp/addons/base/i18n/es_CL.po index 9f432778665..e3ff1de6ef3 100644 --- a/openerp/addons/base/i18n/es_CL.po +++ b/openerp/addons/base/i18n/es_CL.po @@ -811,7 +811,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5652,7 +5652,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "El código de la provincia de 3 caracteres.\n" #. module: base diff --git a/openerp/addons/base/i18n/es_CR.po b/openerp/addons/base/i18n/es_CR.po index e5e6a7f4e3f..a4d9a8129d5 100644 --- a/openerp/addons/base/i18n/es_CR.po +++ b/openerp/addons/base/i18n/es_CR.po @@ -879,7 +879,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" "Manual: Lanzado manualmente.\n" @@ -6736,7 +6736,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "El código de la provincia de 3 caracteres.\n" #. module: base diff --git a/openerp/addons/base/i18n/es_EC.po b/openerp/addons/base/i18n/es_EC.po index dfd3f325733..dadcd9c0e46 100644 --- a/openerp/addons/base/i18n/es_EC.po +++ b/openerp/addons/base/i18n/es_EC.po @@ -807,7 +807,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5642,7 +5642,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "El código de la provincia de 3 caracteres.\n" #. module: base diff --git a/openerp/addons/base/i18n/et.po b/openerp/addons/base/i18n/et.po index 0ad14eaff39..7552ae0719b 100644 --- a/openerp/addons/base/i18n/et.po +++ b/openerp/addons/base/i18n/et.po @@ -788,7 +788,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5499,7 +5499,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "Maakonna kolmekohaline kood.\n" #. module: base diff --git a/openerp/addons/base/i18n/eu.po b/openerp/addons/base/i18n/eu.po index f63e1b6dc4f..378c973a0eb 100644 --- a/openerp/addons/base/i18n/eu.po +++ b/openerp/addons/base/i18n/eu.po @@ -775,7 +775,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5461,7 +5461,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/fa.po b/openerp/addons/base/i18n/fa.po index 5e55e009c97..a465ce96c3c 100644 --- a/openerp/addons/base/i18n/fa.po +++ b/openerp/addons/base/i18n/fa.po @@ -786,7 +786,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5502,7 +5502,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "کد استان در ۳ نویسه‌ای.\n" #. module: base diff --git a/openerp/addons/base/i18n/fa_AF.po b/openerp/addons/base/i18n/fa_AF.po index 2b467ff72d1..e3d0389fe01 100644 --- a/openerp/addons/base/i18n/fa_AF.po +++ b/openerp/addons/base/i18n/fa_AF.po @@ -775,7 +775,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5461,7 +5461,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/fi.po b/openerp/addons/base/i18n/fi.po index a68401483b1..a6cb99831fb 100644 --- a/openerp/addons/base/i18n/fi.po +++ b/openerp/addons/base/i18n/fi.po @@ -799,7 +799,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5620,7 +5620,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "Osavaltion koodi kolmella kirjaimella.\n" #. module: base diff --git a/openerp/addons/base/i18n/fr.po b/openerp/addons/base/i18n/fr.po index c94296d2cbd..b47d352f885 100644 --- a/openerp/addons/base/i18n/fr.po +++ b/openerp/addons/base/i18n/fr.po @@ -815,7 +815,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5653,7 +5653,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "Le code état en trois caractères.\n" #. module: base @@ -11276,7 +11276,7 @@ msgstr "Séquences" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss msgid "Mss" -msgstr "Mme" +msgstr "Mlle" #. module: base #: model:ir.model,name:base.model_ir_ui_view @@ -11404,7 +11404,7 @@ msgstr "Filtre" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam msgid "Ms." -msgstr "Mlle" +msgstr "Mme" #. module: base #: view:base.module.import:0 diff --git a/openerp/addons/base/i18n/gl.po b/openerp/addons/base/i18n/gl.po index e166e224d57..804c17bad22 100644 --- a/openerp/addons/base/i18n/gl.po +++ b/openerp/addons/base/i18n/gl.po @@ -808,7 +808,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5635,7 +5635,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "O código de estado en tres caracteres.\n" #. module: base diff --git a/openerp/addons/base/i18n/he.po b/openerp/addons/base/i18n/he.po index 191882068f0..49655e7ae5c 100644 --- a/openerp/addons/base/i18n/he.po +++ b/openerp/addons/base/i18n/he.po @@ -785,7 +785,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5487,7 +5487,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "ביטוי הקוד בשלוש תוים.\n" #. module: base diff --git a/openerp/addons/base/i18n/hr.po b/openerp/addons/base/i18n/hr.po index 65fab4e5c30..bead1791bdc 100644 --- a/openerp/addons/base/i18n/hr.po +++ b/openerp/addons/base/i18n/hr.po @@ -840,7 +840,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5646,7 +5646,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "Troznamenkasta šifra države/pokrajine/županije.\n" #. module: base diff --git a/openerp/addons/base/i18n/hu.po b/openerp/addons/base/i18n/hu.po index 6894d272558..d8a699102bf 100644 --- a/openerp/addons/base/i18n/hu.po +++ b/openerp/addons/base/i18n/hu.po @@ -804,7 +804,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5625,7 +5625,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "Az állam kódja három karakterben.\n" #. module: base diff --git a/openerp/addons/base/i18n/hy.po b/openerp/addons/base/i18n/hy.po index 11c3cd40faf..b7e53816cae 100644 --- a/openerp/addons/base/i18n/hy.po +++ b/openerp/addons/base/i18n/hy.po @@ -775,7 +775,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5461,7 +5461,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/id.po b/openerp/addons/base/i18n/id.po index a62ce35ff65..323819ab4a5 100644 --- a/openerp/addons/base/i18n/id.po +++ b/openerp/addons/base/i18n/id.po @@ -779,7 +779,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5465,7 +5465,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/is.po b/openerp/addons/base/i18n/is.po index 87a31071d27..fb292a07512 100644 --- a/openerp/addons/base/i18n/is.po +++ b/openerp/addons/base/i18n/is.po @@ -775,7 +775,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5461,7 +5461,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/it.po b/openerp/addons/base/i18n/it.po index c5928215769..64f7a787c29 100644 --- a/openerp/addons/base/i18n/it.po +++ b/openerp/addons/base/i18n/it.po @@ -808,7 +808,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5645,7 +5645,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "Il codice dello stato in 3 caratteri\n" #. module: base diff --git a/openerp/addons/base/i18n/ja.po b/openerp/addons/base/i18n/ja.po index 84f3f3d2c55..3b727699679 100644 --- a/openerp/addons/base/i18n/ja.po +++ b/openerp/addons/base/i18n/ja.po @@ -818,7 +818,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" "手動:手動起動\n" @@ -6134,7 +6134,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/kk.po b/openerp/addons/base/i18n/kk.po index 0205a66a540..de3a57e6e0f 100644 --- a/openerp/addons/base/i18n/kk.po +++ b/openerp/addons/base/i18n/kk.po @@ -775,7 +775,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5461,7 +5461,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/ko.po b/openerp/addons/base/i18n/ko.po index c5026451183..a4141f5d609 100644 --- a/openerp/addons/base/i18n/ko.po +++ b/openerp/addons/base/i18n/ko.po @@ -784,7 +784,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5518,7 +5518,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "3문자의 상태 코드\n" #. module: base diff --git a/openerp/addons/base/i18n/lt.po b/openerp/addons/base/i18n/lt.po index 66ff76f538c..8e0ae0d384e 100644 --- a/openerp/addons/base/i18n/lt.po +++ b/openerp/addons/base/i18n/lt.po @@ -778,7 +778,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5483,7 +5483,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "Savivaldybės kodas iš trijų simbolių.\n" #. module: base diff --git a/openerp/addons/base/i18n/lt_LT.po b/openerp/addons/base/i18n/lt_LT.po index eb5c33417cd..409e6fe1bb7 100644 --- a/openerp/addons/base/i18n/lt_LT.po +++ b/openerp/addons/base/i18n/lt_LT.po @@ -5407,7 +5407,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." "" msgstr "" diff --git a/openerp/addons/base/i18n/lv.po b/openerp/addons/base/i18n/lv.po index eedaf5de4fb..9f52a9bcaf8 100644 --- a/openerp/addons/base/i18n/lv.po +++ b/openerp/addons/base/i18n/lv.po @@ -786,7 +786,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5514,7 +5514,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "Stāvokļa kods, sastāvošs no trīs burtiem.\n" #. module: base diff --git a/openerp/addons/base/i18n/mk.po b/openerp/addons/base/i18n/mk.po index 0544dbb6017..e5293173930 100644 --- a/openerp/addons/base/i18n/mk.po +++ b/openerp/addons/base/i18n/mk.po @@ -786,7 +786,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5472,7 +5472,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/mn.po b/openerp/addons/base/i18n/mn.po index b3f470baadd..7e7ce75c2ed 100644 --- a/openerp/addons/base/i18n/mn.po +++ b/openerp/addons/base/i18n/mn.po @@ -789,7 +789,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5537,7 +5537,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "Мужийн код гурван тэмдэгтээр.\n" #. module: base diff --git a/openerp/addons/base/i18n/nb.po b/openerp/addons/base/i18n/nb.po index 42f7fd2da30..4d21f12d3c6 100644 --- a/openerp/addons/base/i18n/nb.po +++ b/openerp/addons/base/i18n/nb.po @@ -795,7 +795,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5533,7 +5533,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "Koden til staten med tre karakterer.\n" #. module: base diff --git a/openerp/addons/base/i18n/nl.po b/openerp/addons/base/i18n/nl.po index 2b9799e8fa1..32a85ba06c4 100644 --- a/openerp/addons/base/i18n/nl.po +++ b/openerp/addons/base/i18n/nl.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.0\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-02-08 00:44+0000\n" -"PO-Revision-Date: 2012-02-12 19:08+0000\n" +"PO-Revision-Date: 2012-02-11 08:55+0000\n" "Last-Translator: Mario Gielissen \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-13 04:49+0000\n" -"X-Generator: Launchpad (build 14781)\n" +"X-Launchpad-Export-Date: 2012-02-12 04:41+0000\n" +"X-Generator: Launchpad (build 14771)\n" #. module: base #: model:res.country,name:base.sh @@ -275,7 +275,7 @@ msgstr "Inuktitut / ᐃᓄᒃᑎᑐᑦ" #: model:ir.module.category,name:base.module_category_sales_management #: model:ir.module.module,shortdesc:base.module_sale msgid "Sales Management" -msgstr "Verkoopbeheer" +msgstr "" #. module: base #: view:res.partner:0 @@ -371,7 +371,7 @@ msgstr "Naam assistent" #. module: base #: model:res.groups,name:base.group_partner_manager msgid "Partner Manager" -msgstr "Partner beheer" +msgstr "" #. module: base #: model:ir.module.category,name:base.module_category_customer_relationship_management @@ -392,7 +392,7 @@ msgstr "Ongeldige group_by" #. module: base #: field:ir.module.category,child_ids:0 msgid "Child Applications" -msgstr "Child applicaties" +msgstr "" #. module: base #: field:res.partner,credit_limit:0 @@ -402,7 +402,7 @@ msgstr "Kredietlimiet" #. module: base #: model:ir.module.module,description:base.module_web_graph msgid "Openerp web graph view" -msgstr "Openerp web grafiek view" +msgstr "" #. module: base #: field:ir.model.data,date_update:0 @@ -412,7 +412,7 @@ msgstr "Wijzigingsdatum" #. module: base #: model:ir.module.module,shortdesc:base.module_base_action_rule msgid "Automated Action Rules" -msgstr "Automatische aktie regels" +msgstr "" #. module: base #: view:ir.attachment:0 @@ -573,7 +573,7 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_sale_layout msgid "Sales Orders Print Layout" -msgstr "Verkooporder Afdruk Layout" +msgstr "" #. module: base #: selection:base.language.install,lang:0 @@ -752,7 +752,7 @@ msgstr "Eritrea" #. module: base #: sql_constraint:res.company:0 msgid "The company name must be unique !" -msgstr "De naam van het bedrijf moet uniek zijn!" +msgstr "" #. module: base #: view:res.config:0 @@ -790,7 +790,7 @@ msgstr "" #. module: base #: view:ir.mail_server:0 msgid "Security and Authentication" -msgstr "Beveiliging en Authenticatie" +msgstr "" #. module: base #: view:base.language.export:0 @@ -808,7 +808,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -881,7 +881,7 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_document_webdav msgid "Shared Repositories (WebDAV)" -msgstr "Gedeelde Repositories (WebDAV)" +msgstr "" #. module: base #: model:ir.module.module,description:base.module_import_google @@ -1105,7 +1105,7 @@ msgstr "" #: code:addons/base/ir/ir_mail_server.py:192 #, python-format msgid "Connection test failed!" -msgstr "Verbindings test mislukt!" +msgstr "" #. module: base #: selection:ir.actions.server,state:0 @@ -1227,12 +1227,12 @@ msgstr "Spaans (GT) / Spanje (GT)" #. module: base #: field:ir.mail_server,smtp_port:0 msgid "SMTP Port" -msgstr "SMTP poort" +msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_import_sugarcrm msgid "SugarCRM Import" -msgstr "SugarCRM Import" +msgstr "" #. module: base #: view:res.lang:0 @@ -1249,12 +1249,12 @@ msgstr "" #: code:addons/base/module/wizard/base_language_install.py:55 #, python-format msgid "Language Pack" -msgstr "Taalpakket" +msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_web_tests msgid "Tests" -msgstr "Testen" +msgstr "" #. module: base #: field:ir.ui.view_sc,res_id:0 @@ -1315,7 +1315,7 @@ msgstr "" #. module: base #: field:ir.module.category,parent_id:0 msgid "Parent Application" -msgstr "Parent applicatie" +msgstr "" #. module: base #: code:addons/base/res/res_users.py:222 @@ -1332,7 +1332,7 @@ msgstr "Om een taal te exporteren, geen taal kiezen." #: model:ir.module.module,shortdesc:base.module_document #: model:ir.module.module,shortdesc:base.module_knowledge msgid "Document Management System" -msgstr "Document Beheer Systeem" +msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_crm_claim @@ -1596,7 +1596,7 @@ msgstr "Drijvende comma" #: model:ir.module.category,name:base.module_category_warehouse_management #: model:ir.module.module,shortdesc:base.module_stock msgid "Warehouse Management" -msgstr "Magazijnbeheer" +msgstr "" #. module: base #: model:ir.model,name:base.model_res_request_link @@ -1769,8 +1769,6 @@ msgid "" "simplified payment mode encoding, automatic picking lists generation and " "more." msgstr "" -"Helpt u het meeste te halen uit uw kassa's met snelle codering, eenvoudige " -"betaalmethode codering, automatische piklijst generatie en meer." #. module: base #: model:res.country,name:base.mv @@ -1806,28 +1804,27 @@ msgstr "Dagen" #. module: base #: model:ir.module.module,shortdesc:base.module_web_rpc msgid "OpenERP Web web" -msgstr "OpenERP Web" +msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_html_view msgid "Html View" -msgstr "Html weergave" +msgstr "" #. module: base #: field:res.currency,position:0 msgid "Symbol position" -msgstr "Symbool positie" +msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_process msgid "Enterprise Process" -msgstr "Bedrijfsprocessen" +msgstr "" #. module: base #: help:ir.cron,function:0 msgid "Name of the method to be called when this job is processed." msgstr "" -"Naam van de methode die wordt aangeroepen als deze taak wordt uitgevoerd." #. module: base #: model:ir.module.module,shortdesc:base.module_hr_evaluation @@ -1849,7 +1846,7 @@ msgstr " (kopie)" #. module: base #: field:res.company,rml_footer1:0 msgid "General Information Footer" -msgstr "Algemene Info Voettekst" +msgstr "" #. module: base #: view:res.lang:0 @@ -1956,7 +1953,7 @@ msgstr "%s (kopie)" #. module: base #: model:ir.module.module,shortdesc:base.module_account_chart msgid "Template of Charts of Accounts" -msgstr "Grootboekschema template" +msgstr "" #. module: base #: field:res.partner.address,type:0 @@ -2043,12 +2040,12 @@ msgstr "Finland" #: code:addons/base/res/res_company.py:156 #, python-format msgid "Website: " -msgstr "Website: " +msgstr "" #. module: base #: model:ir.ui.menu,name:base.menu_administration msgid "Settings" -msgstr "Voorkeuren" +msgstr "" #. module: base #: selection:ir.actions.act_window,view_type:0 @@ -2080,8 +2077,6 @@ msgid "" "Display this bank account on the footer of printed documents like invoices " "and sales orders." msgstr "" -"Laat dit bankrekeningnummer zien in de voettekst van ieder afgedrukte " -"document zoals facturen en verkooporders." #. module: base #: view:base.language.import:0 @@ -2190,7 +2185,7 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_subscription msgid "Recurring Documents" -msgstr "Herhalende documenten" +msgstr "" #. module: base #: model:res.country,name:base.bs @@ -2229,7 +2224,7 @@ msgstr "Aantal bijgewerkte modules" #. module: base #: field:ir.cron,function:0 msgid "Method" -msgstr "Methode" +msgstr "" #. module: base #: view:res.partner.event:0 @@ -2253,7 +2248,7 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_base_setup msgid "Initial Setup Tools" -msgstr "Initiële Installatie Tools" +msgstr "" #. module: base #: field:ir.actions.act_window,groups_id:0 @@ -2315,7 +2310,7 @@ msgstr "Beginpagina componenten beheer" #. module: base #: field:res.company,rml_header1:0 msgid "Report Header / Company Slogan" -msgstr "Rapporthoofd / Bedrijfs slogan" +msgstr "" #. module: base #: model:res.country,name:base.pl @@ -2368,7 +2363,7 @@ msgstr "" #. module: base #: field:ir.mail_server,smtp_debug:0 msgid "Debugging" -msgstr "Fouten opsporen" +msgstr "" #. module: base #: model:ir.module.module,description:base.module_crm_helpdesk @@ -2478,12 +2473,12 @@ msgstr "Huidige koers" #. module: base #: model:ir.module.module,shortdesc:base.module_idea msgid "Ideas" -msgstr "Ideeën" +msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_sale_crm msgid "Opportunity to Quotation" -msgstr "Verkoopkans naar offerte" +msgstr "" #. module: base #: model:ir.module.module,description:base.module_sale_analytic_plans @@ -2510,7 +2505,7 @@ msgstr "" #. module: base #: model:ir.actions.report.xml,name:base.report_ir_model_overview msgid "Model Overview" -msgstr "Model Overzicht" +msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_product_margin @@ -2520,7 +2515,7 @@ msgstr "" #. module: base #: model:ir.ui.menu,name:base.menu_invoiced msgid "Invoicing" -msgstr "Facturering" +msgstr "" #. module: base #: field:ir.ui.view_sc,name:0 @@ -2561,7 +2556,7 @@ msgstr "" #: field:ir.model.data,res_id:0 #: field:ir.values,res_id:0 msgid "Record ID" -msgstr "Record-id" +msgstr "" #. module: base #: field:ir.actions.server,email:0 @@ -2645,7 +2640,7 @@ msgstr "Fout tijdens communicatie met de uitgevers garantie server." #: model:res.groups,name:base.group_sale_manager #: model:res.groups,name:base.group_tool_manager msgid "Manager" -msgstr "Beheer" +msgstr "" #. module: base #: model:ir.ui.menu,name:base.menu_custom @@ -2682,7 +2677,7 @@ msgstr "IDs opschonen" #. module: base #: view:res.groups:0 msgid "Inherited" -msgstr "Overgeërfd" +msgstr "" #. module: base #: field:ir.model.fields,serialization_field_id:0 @@ -2705,7 +2700,7 @@ msgstr "%y - Jaar zonder eeuw [00,99]." #: code:addons/base/res/res_company.py:155 #, python-format msgid "Fax: " -msgstr "Fax: " +msgstr "" #. module: base #: model:res.country,name:base.si @@ -5644,7 +5639,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "De provinciecode in drie karakters.\n" #. module: base diff --git a/openerp/addons/base/i18n/nl_BE.po b/openerp/addons/base/i18n/nl_BE.po index 526625a6597..7b720f4511d 100644 --- a/openerp/addons/base/i18n/nl_BE.po +++ b/openerp/addons/base/i18n/nl_BE.po @@ -790,7 +790,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5476,7 +5476,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/nl_NL.po b/openerp/addons/base/i18n/nl_NL.po index 216dc70bd16..061a453645b 100644 --- a/openerp/addons/base/i18n/nl_NL.po +++ b/openerp/addons/base/i18n/nl_NL.po @@ -5598,7 +5598,7 @@ msgstr "STOCK_MEDIA_PAUSE" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "De provinciecode in drie karakters.\n" #. module: base diff --git a/openerp/addons/base/i18n/pl.po b/openerp/addons/base/i18n/pl.po index f78e5733b36..e7bd3ec9b14 100644 --- a/openerp/addons/base/i18n/pl.po +++ b/openerp/addons/base/i18n/pl.po @@ -793,7 +793,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5578,7 +5578,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "Trzyliterowy kod regionu\n" #. module: base diff --git a/openerp/addons/base/i18n/pt.po b/openerp/addons/base/i18n/pt.po index edec4cffb17..fe6b53693cb 100644 --- a/openerp/addons/base/i18n/pt.po +++ b/openerp/addons/base/i18n/pt.po @@ -802,7 +802,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5567,7 +5567,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "O código do estado com três caracteres\n" #. module: base diff --git a/openerp/addons/base/i18n/pt_BR.po b/openerp/addons/base/i18n/pt_BR.po index 6f1dc01c7da..8eec70f77b6 100644 --- a/openerp/addons/base/i18n/pt_BR.po +++ b/openerp/addons/base/i18n/pt_BR.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-13 04:49+0000\n" -"X-Generator: Launchpad (build 14781)\n" +"X-Launchpad-Export-Date: 2012-02-12 04:42+0000\n" +"X-Generator: Launchpad (build 14771)\n" #. module: base #: model:res.country,name:base.sh @@ -840,7 +840,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" "Manual: Iniciado manualmente\n" @@ -5850,7 +5850,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "O código de situação com 3 caracteres.\n" #. module: base diff --git a/openerp/addons/base/i18n/ro.po b/openerp/addons/base/i18n/ro.po index 3e947cbbfc9..27ff3506cea 100644 --- a/openerp/addons/base/i18n/ro.po +++ b/openerp/addons/base/i18n/ro.po @@ -811,7 +811,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5649,7 +5649,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "Codul statului, din trei caractere.\n" #. module: base diff --git a/openerp/addons/base/i18n/ru.po b/openerp/addons/base/i18n/ru.po index 62c4e6698cd..835efe3fa58 100644 --- a/openerp/addons/base/i18n/ru.po +++ b/openerp/addons/base/i18n/ru.po @@ -806,7 +806,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5628,7 +5628,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "Код области из трёх букв.\n" #. module: base diff --git a/openerp/addons/base/i18n/sk.po b/openerp/addons/base/i18n/sk.po index 46f537ae09e..c4fb21e7f70 100644 --- a/openerp/addons/base/i18n/sk.po +++ b/openerp/addons/base/i18n/sk.po @@ -792,7 +792,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5574,7 +5574,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "Kód štátu na 3 znaky.\n" #. module: base diff --git a/openerp/addons/base/i18n/sl.po b/openerp/addons/base/i18n/sl.po index a344ffba70b..0de03559923 100644 --- a/openerp/addons/base/i18n/sl.po +++ b/openerp/addons/base/i18n/sl.po @@ -801,7 +801,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5617,7 +5617,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "Koda zvezne države v treh znakih.\n" #. module: base diff --git a/openerp/addons/base/i18n/sq.po b/openerp/addons/base/i18n/sq.po index 38896cd6a56..297d3f37ea9 100644 --- a/openerp/addons/base/i18n/sq.po +++ b/openerp/addons/base/i18n/sq.po @@ -774,7 +774,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5460,7 +5460,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/sr.po b/openerp/addons/base/i18n/sr.po index ad02d9eec00..65f02a38fce 100644 --- a/openerp/addons/base/i18n/sr.po +++ b/openerp/addons/base/i18n/sr.po @@ -795,7 +795,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5561,7 +5561,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "Šifra države u ti karaktera.\n" #. module: base diff --git a/openerp/addons/base/i18n/sr@latin.po b/openerp/addons/base/i18n/sr@latin.po index 6435154a90a..92ba916bf1a 100644 --- a/openerp/addons/base/i18n/sr@latin.po +++ b/openerp/addons/base/i18n/sr@latin.po @@ -837,7 +837,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" "Ručno: Pokrenuto ručno.\n" @@ -5644,7 +5644,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/sv.po b/openerp/addons/base/i18n/sv.po index ddb985cb2a8..c9d0a27b8c9 100644 --- a/openerp/addons/base/i18n/sv.po +++ b/openerp/addons/base/i18n/sv.po @@ -797,7 +797,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5583,7 +5583,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "Landskod, tre tecken\n" #. module: base diff --git a/openerp/addons/base/i18n/th.po b/openerp/addons/base/i18n/th.po index 5dc4e9d0386..0951f766fca 100644 --- a/openerp/addons/base/i18n/th.po +++ b/openerp/addons/base/i18n/th.po @@ -775,7 +775,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5461,7 +5461,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/tlh.po b/openerp/addons/base/i18n/tlh.po index b2500e94c1e..1c087b508eb 100644 --- a/openerp/addons/base/i18n/tlh.po +++ b/openerp/addons/base/i18n/tlh.po @@ -774,7 +774,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5460,7 +5460,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/tr.po b/openerp/addons/base/i18n/tr.po index 49dea1a9448..b9d1bb2a7c5 100644 --- a/openerp/addons/base/i18n/tr.po +++ b/openerp/addons/base/i18n/tr.po @@ -806,7 +806,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5662,7 +5662,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "Üç karakterden oluşan eyalet kodu.\n" #. module: base diff --git a/openerp/addons/base/i18n/uk.po b/openerp/addons/base/i18n/uk.po index 8a22baa55ba..1ded396d476 100644 --- a/openerp/addons/base/i18n/uk.po +++ b/openerp/addons/base/i18n/uk.po @@ -796,7 +796,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5507,7 +5507,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "Код області довжиною в три букви.\n" #. module: base diff --git a/openerp/addons/base/i18n/uk_UA.po b/openerp/addons/base/i18n/uk_UA.po index a33cdf8b473..87fbfe76e2b 100644 --- a/openerp/addons/base/i18n/uk_UA.po +++ b/openerp/addons/base/i18n/uk_UA.po @@ -5424,7 +5424,7 @@ msgstr "STOCK_MEDIA_PAUSE" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." "" msgstr "" diff --git a/openerp/addons/base/i18n/ur.po b/openerp/addons/base/i18n/ur.po index b9467f4518a..a45da1f2dad 100644 --- a/openerp/addons/base/i18n/ur.po +++ b/openerp/addons/base/i18n/ur.po @@ -775,7 +775,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5461,7 +5461,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/vi.po b/openerp/addons/base/i18n/vi.po index d12ece2051f..d8e03b80386 100644 --- a/openerp/addons/base/i18n/vi.po +++ b/openerp/addons/base/i18n/vi.po @@ -799,7 +799,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5490,7 +5490,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/zh_CN.po b/openerp/addons/base/i18n/zh_CN.po index fe7a5cc0aaa..7b618b1e0e5 100644 --- a/openerp/addons/base/i18n/zh_CN.po +++ b/openerp/addons/base/i18n/zh_CN.po @@ -821,7 +821,7 @@ msgstr "OpenERP的翻译在Launchpad.net网站上进行,OpenERP项目本身也 msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" "手动:手动执行\n" @@ -5895,7 +5895,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "三个字符的省/州代码\n" #. module: base diff --git a/openerp/addons/base/i18n/zh_HK.po b/openerp/addons/base/i18n/zh_HK.po index 30dc4956d39..06a099c2196 100644 --- a/openerp/addons/base/i18n/zh_HK.po +++ b/openerp/addons/base/i18n/zh_HK.po @@ -775,7 +775,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5461,7 +5461,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/zh_TW.po b/openerp/addons/base/i18n/zh_TW.po index cacb85a6f34..5b6c6c37767 100644 --- a/openerp/addons/base/i18n/zh_TW.po +++ b/openerp/addons/base/i18n/zh_TW.po @@ -779,7 +779,7 @@ msgstr "" msgid "" "Manual: Launched manually.\n" "Automatic: Runs whenever the system is reconfigured.\n" -"Launch Manually Once: after hacing been launched manually, it sets " +"Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" @@ -5470,7 +5470,7 @@ msgstr "" #. module: base #: help:res.country.state,code:0 -msgid "The state code in three chars.\n" +msgid "The state code in max. three chars." msgstr "三個字元之省或州代碼\n" #. module: base diff --git a/openerp/addons/base/ir/ir_actions.py b/openerp/addons/base/ir/ir_actions.py index 236c6af7119..0a282503570 100644 --- a/openerp/addons/base/ir/ir_actions.py +++ b/openerp/addons/base/ir/ir_actions.py @@ -619,7 +619,7 @@ class actions_server(osv.osv): # ids : original ids # id : current id of the object # OUT: - # False : Finnished correctly + # False : Finished correctly # ACTION_ID : Action to launch # FIXME: refactor all the eval() calls in run()! @@ -831,7 +831,7 @@ class ir_actions_todo(osv.osv): 'type': fields.selection(TODO_TYPES, 'Type', required=True, help="""Manual: Launched manually. Automatic: Runs whenever the system is reconfigured. -Launch Manually Once: after hacing been launched manually, it sets automatically to Done."""), +Launch Manually Once: after having been launched manually, it sets automatically to Done."""), 'groups_id': fields.many2many('res.groups', 'res_groups_action_rel', 'uid', 'gid', 'Groups'), 'note': fields.text('Text', translate=True), 'category_id': fields.many2one('ir.actions.todo.category','Category'), diff --git a/openerp/addons/base/res/res_country.py b/openerp/addons/base/res/res_country.py index f240784dc47..d0269dd4df1 100644 --- a/openerp/addons/base/res/res_country.py +++ b/openerp/addons/base/res/res_country.py @@ -86,9 +86,10 @@ class CountryState(osv.osv): _columns = { 'country_id': fields.many2one('res.country', 'Country', required=True), - 'name': fields.char('State Name', size=64, required=True), + 'name': fields.char('State Name', size=64, required=True, + help='Administrative divisions of a country. E.g. Fed. State, Departement, Canton'), 'code': fields.char('State Code', size=3, - help='The state code in three chars.\n', required=True), + help='The state code in max. three chars.', required=True), } def name_search(self, cr, user, name='', args=None, operator='ilike', context=None, limit=100): diff --git a/openerp/release.py b/openerp/release.py index bd3935713b9..1f573c54814 100644 --- a/openerp/release.py +++ b/openerp/release.py @@ -1,4 +1,4 @@ -# -*- encoding: utf-8 -*- +# -*- coding: utf-8 -*- ############################################################################## # # OpenERP, Open Source Management Solution diff --git a/openerp/service/http_server.py b/openerp/service/http_server.py index 07e31ea9c7d..5fb46b42ffc 100644 --- a/openerp/service/http_server.py +++ b/openerp/service/http_server.py @@ -5,10 +5,10 @@ # # # WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential +# programmers who take the whole responsibility of assessing all potential # consequences resulting from its eventual inadequacies and bugs # End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software +# guarantees and support are strongly advised to contract a Free Software # Service Company # # This program is Free Software; you can redistribute it and/or diff --git a/openerp/service/websrv_lib.py b/openerp/service/websrv_lib.py index 4da6536ed51..d9f654f4edb 100644 --- a/openerp/service/websrv_lib.py +++ b/openerp/service/websrv_lib.py @@ -3,10 +3,10 @@ # Copyright P. Christeas 2008-2010 # # WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential +# programmers who take the whole responsibility of assessing all potential # consequences resulting from its eventual inadequacies and bugs # End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software +# guarantees and support are strongly advised to contract a Free Software # Service Company # # This program is Free Software; you can redistribute it and/or diff --git a/openerp/tools/yaml_import.py b/openerp/tools/yaml_import.py index c36376ba1b7..1c676e3a1c6 100644 --- a/openerp/tools/yaml_import.py +++ b/openerp/tools/yaml_import.py @@ -1,4 +1,4 @@ -# -*- encoding: utf-8 -*- +# -*- coding: utf-8 -*- import threading import types import time # used to eval time.strftime expressions From 0ea407eb5ab51e604ad5550d8d0672bd659a3a73 Mon Sep 17 00:00:00 2001 From: Bogdan Stanciu Date: Sun, 12 Feb 2012 12:48:12 +0100 Subject: [PATCH 017/325] [IMP] added two address formats (CH and RO) bzr revid: bogdanovidiu.stanciu@gmail.com-20120212114812-dbt4jy0jxisn55x8 --- openerp/addons/base/base_data.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openerp/addons/base/base_data.xml b/openerp/addons/base/base_data.xml index 03e62dd6ba6..1c4e7fc639b 100644 --- a/openerp/addons/base/base_data.xml +++ b/openerp/addons/base/base_data.xml @@ -197,6 +197,7 @@ Switzerland ch + Ivory Coast (Cote D'Ivoire) @@ -767,6 +768,7 @@ Romania ro + Russian Federation From 434af1f37af3267797a08b65b4c39ce132bbad4e Mon Sep 17 00:00:00 2001 From: Bogdan Stanciu Date: Sun, 12 Feb 2012 13:25:57 +0100 Subject: [PATCH 018/325] [IMP] corrected a few titles vs. "shortcuts" and added three titles to res.partner.title bzr revid: bogdanovidiu.stanciu@gmail.com-20120212122557-6od8yipxs6bp31ht --- openerp/addons/base/i18n/af.po | 6 ++-- openerp/addons/base/i18n/am.po | 6 ++-- openerp/addons/base/i18n/ar.po | 6 ++-- openerp/addons/base/i18n/base.pot | 35 ++++++++++++++++++-- openerp/addons/base/i18n/bg.po | 8 ++--- openerp/addons/base/i18n/bs.po | 6 ++-- openerp/addons/base/i18n/ca.po | 6 ++-- openerp/addons/base/i18n/cs.po | 8 ++--- openerp/addons/base/i18n/da.po | 6 ++-- openerp/addons/base/i18n/de.po | 6 ++-- openerp/addons/base/i18n/el.po | 6 ++-- openerp/addons/base/i18n/en_GB.po | 12 +++---- openerp/addons/base/i18n/es.po | 6 ++-- openerp/addons/base/i18n/es_CL.po | 6 ++-- openerp/addons/base/i18n/es_CR.po | 6 ++-- openerp/addons/base/i18n/es_EC.po | 10 +++--- openerp/addons/base/i18n/et.po | 6 ++-- openerp/addons/base/i18n/eu.po | 6 ++-- openerp/addons/base/i18n/fa.po | 6 ++-- openerp/addons/base/i18n/fa_AF.po | 6 ++-- openerp/addons/base/i18n/fi.po | 8 ++--- openerp/addons/base/i18n/fr.po | 6 ++-- openerp/addons/base/i18n/gl.po | 10 +++--- openerp/addons/base/i18n/he.po | 6 ++-- openerp/addons/base/i18n/hr.po | 6 ++-- openerp/addons/base/i18n/hu.po | 10 +++--- openerp/addons/base/i18n/hy.po | 6 ++-- openerp/addons/base/i18n/id.po | 6 ++-- openerp/addons/base/i18n/is.po | 6 ++-- openerp/addons/base/i18n/it.po | 10 +++--- openerp/addons/base/i18n/ja.po | 6 ++-- openerp/addons/base/i18n/kk.po | 6 ++-- openerp/addons/base/i18n/ko.po | 6 ++-- openerp/addons/base/i18n/lt.po | 6 ++-- openerp/addons/base/i18n/lv.po | 6 ++-- openerp/addons/base/i18n/mk.po | 6 ++-- openerp/addons/base/i18n/mn.po | 8 ++--- openerp/addons/base/i18n/nb.po | 8 ++--- openerp/addons/base/i18n/nl.po | 6 ++-- openerp/addons/base/i18n/nl_BE.po | 6 ++-- openerp/addons/base/i18n/pl.po | 6 ++-- openerp/addons/base/i18n/pt.po | 6 ++-- openerp/addons/base/i18n/pt_BR.po | 8 ++--- openerp/addons/base/i18n/ro.po | 6 ++-- openerp/addons/base/i18n/ru.po | 6 ++-- openerp/addons/base/i18n/sk.po | 6 ++-- openerp/addons/base/i18n/sl.po | 6 ++-- openerp/addons/base/i18n/sq.po | 6 ++-- openerp/addons/base/i18n/sr.po | 12 +++---- openerp/addons/base/i18n/sr@latin.po | 6 ++-- openerp/addons/base/i18n/sv.po | 8 ++--- openerp/addons/base/i18n/th.po | 6 ++-- openerp/addons/base/i18n/tlh.po | 6 ++-- openerp/addons/base/i18n/tr.po | 8 ++--- openerp/addons/base/i18n/uk.po | 6 ++-- openerp/addons/base/i18n/ur.po | 6 ++-- openerp/addons/base/i18n/vi.po | 6 ++-- openerp/addons/base/i18n/zh_CN.po | 8 ++--- openerp/addons/base/i18n/zh_HK.po | 6 ++-- openerp/addons/base/i18n/zh_TW.po | 6 ++-- openerp/addons/base/res/res_partner_data.xml | 21 ++++++++++-- 61 files changed, 250 insertions(+), 206 deletions(-) diff --git a/openerp/addons/base/i18n/af.po b/openerp/addons/base/i18n/af.po index 10b7c035815..5b00d0558af 100644 --- a/openerp/addons/base/i18n/af.po +++ b/openerp/addons/base/i18n/af.po @@ -3682,7 +3682,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "" #. module: base @@ -10995,7 +10995,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11115,7 +11115,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/am.po b/openerp/addons/base/i18n/am.po index 3214ddec3a7..b1e142e769b 100644 --- a/openerp/addons/base/i18n/am.po +++ b/openerp/addons/base/i18n/am.po @@ -3682,7 +3682,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "" #. module: base @@ -10995,7 +10995,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11115,7 +11115,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/ar.po b/openerp/addons/base/i18n/ar.po index 5912643d3c0..98baaf19bf1 100644 --- a/openerp/addons/base/i18n/ar.po +++ b/openerp/addons/base/i18n/ar.po @@ -3745,7 +3745,7 @@ msgstr "GPL-2 أو إصدار أحدث" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "" #. module: base @@ -11110,7 +11110,7 @@ msgstr "المتواليات" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11233,7 +11233,7 @@ msgstr "مرشح الفرز" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "السيدة" #. module: base diff --git a/openerp/addons/base/i18n/base.pot b/openerp/addons/base/i18n/base.pot index c1ca9862e96..0a97521219b 100644 --- a/openerp/addons/base/i18n/base.pot +++ b/openerp/addons/base/i18n/base.pot @@ -3430,7 +3430,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Sir" msgstr "" #. module: base @@ -10134,7 +10134,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -10249,7 +10249,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "" #. module: base @@ -11306,6 +11306,35 @@ msgstr "" msgid "Madam" msgstr "" +#. module: base +#: model:res.partner.title,name:base.res_partner_title_mister +msgid "Mister" +msgstr "" +#. module: base +#: model:res.partner.title,name:base.res_partner_title_doctor +msgid "Doctor" +msgstr "" +#. module: base +#: model:res.partner.title,name:base.res_partner_title_prof +msgid "Professor" +msgstr "" + +#. module: base +#: model:res.partner.title,shortcut:base.res_partner_title_mister +msgid "Mr." +msgstr "" + +#. module: base +#: model:res.partner.title,shortcut:base.res_partner_title_doctor +msgid "Dr." +msgstr "" + +#. module: base +#: model:res.partner.title,shortcut:base.res_partner_title_prof +msgid "Prof." +msgstr "" + + #. module: base #: model:res.country,name:base.ee msgid "Estonia" diff --git a/openerp/addons/base/i18n/bg.po b/openerp/addons/base/i18n/bg.po index 5f070859688..327c1e65c8a 100644 --- a/openerp/addons/base/i18n/bg.po +++ b/openerp/addons/base/i18n/bg.po @@ -3751,8 +3751,8 @@ msgstr "GPL версия 2 или по-нова" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." -msgstr "M." +msgid "Mr." +msgstr "Mr." #. module: base #: code:addons/base/module/module.py:519 @@ -11115,7 +11115,7 @@ msgstr "Последователност" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11235,7 +11235,7 @@ msgstr "Филтър" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "Г-жа" #. module: base diff --git a/openerp/addons/base/i18n/bs.po b/openerp/addons/base/i18n/bs.po index f4a109a9f86..bdf09238918 100644 --- a/openerp/addons/base/i18n/bs.po +++ b/openerp/addons/base/i18n/bs.po @@ -3690,7 +3690,7 @@ msgstr "GPL-2 ili novija verzija" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "" #. module: base @@ -11003,7 +11003,7 @@ msgstr "Sekvence" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11123,7 +11123,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/ca.po b/openerp/addons/base/i18n/ca.po index dbcc9dd3c31..f4d57a65484 100644 --- a/openerp/addons/base/i18n/ca.po +++ b/openerp/addons/base/i18n/ca.po @@ -3805,7 +3805,7 @@ msgstr "GPL-2 o versió posterior" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "Sr." #. module: base @@ -11259,7 +11259,7 @@ msgstr "Seqüències" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "Sra." #. module: base @@ -11385,7 +11385,7 @@ msgstr "Filtre" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "Sra." #. module: base diff --git a/openerp/addons/base/i18n/cs.po b/openerp/addons/base/i18n/cs.po index 08924e330d5..a72e16f34dc 100644 --- a/openerp/addons/base/i18n/cs.po +++ b/openerp/addons/base/i18n/cs.po @@ -3822,8 +3822,8 @@ msgstr "GPL-2 nebo pozdější verze" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." -msgstr "M." +msgid "Mr." +msgstr "Mr." #. module: base #: code:addons/base/module/module.py:519 @@ -11233,7 +11233,7 @@ msgstr "Posloupnosti" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "Paní" #. module: base @@ -11355,7 +11355,7 @@ msgstr "Filtr" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "Pan" #. module: base diff --git a/openerp/addons/base/i18n/da.po b/openerp/addons/base/i18n/da.po index d4fdbe01cc4..53663056459 100644 --- a/openerp/addons/base/i18n/da.po +++ b/openerp/addons/base/i18n/da.po @@ -3682,7 +3682,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "" #. module: base @@ -10995,7 +10995,7 @@ msgstr "Sekvenser" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11115,7 +11115,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/de.po b/openerp/addons/base/i18n/de.po index 13f9e6f19da..40bcd5b9b72 100644 --- a/openerp/addons/base/i18n/de.po +++ b/openerp/addons/base/i18n/de.po @@ -3835,7 +3835,7 @@ msgstr "GPL-2 oder höher" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "Hr." #. module: base @@ -11360,7 +11360,7 @@ msgstr "Sequenzen" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "Frau" #. module: base @@ -11485,7 +11485,7 @@ msgstr "Filter" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "Frau" #. module: base diff --git a/openerp/addons/base/i18n/el.po b/openerp/addons/base/i18n/el.po index 9f1dc8937e1..22febb8de85 100644 --- a/openerp/addons/base/i18n/el.po +++ b/openerp/addons/base/i18n/el.po @@ -3776,7 +3776,7 @@ msgstr "GPL-2 ή μεταγενέστερη έκδοση" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "" #. module: base @@ -11159,7 +11159,7 @@ msgstr "Ιεραρχήσεις" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11281,7 +11281,7 @@ msgstr "Φίλτρο" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "Κα/Δς" #. module: base diff --git a/openerp/addons/base/i18n/en_GB.po b/openerp/addons/base/i18n/en_GB.po index 2c9d775d610..bc509103502 100644 --- a/openerp/addons/base/i18n/en_GB.po +++ b/openerp/addons/base/i18n/en_GB.po @@ -3790,8 +3790,8 @@ msgstr "GPL-2 or later version" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." -msgstr "M." +msgid "Mr." +msgstr "Mr." #. module: base #: code:addons/base/module/module.py:519 @@ -11221,8 +11221,8 @@ msgstr "Sequences" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" -msgstr "Mss" +msgid "Miss" +msgstr "Miss" #. module: base #: model:ir.model,name:base.model_ir_ui_view @@ -11346,8 +11346,8 @@ msgstr "Filter" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." -msgstr "Ms." +msgid "Mrs." +msgstr "Mrs." #. module: base #: view:base.module.import:0 diff --git a/openerp/addons/base/i18n/es.po b/openerp/addons/base/i18n/es.po index 4548e2692b8..5ebd7d1a0dc 100644 --- a/openerp/addons/base/i18n/es.po +++ b/openerp/addons/base/i18n/es.po @@ -3887,7 +3887,7 @@ msgstr "GPL-2 o versión posterior" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "Sr." #. module: base @@ -11344,7 +11344,7 @@ msgstr "Secuencias" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "Sra." #. module: base @@ -11471,7 +11471,7 @@ msgstr "Filtro" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "Sra." #. module: base diff --git a/openerp/addons/base/i18n/es_CL.po b/openerp/addons/base/i18n/es_CL.po index e3ff1de6ef3..c87eb21ac41 100644 --- a/openerp/addons/base/i18n/es_CL.po +++ b/openerp/addons/base/i18n/es_CL.po @@ -3813,7 +3813,7 @@ msgstr "GPL-2 o versión posterior" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "Sr." #. module: base @@ -11270,7 +11270,7 @@ msgstr "Secuencias" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "Sra." #. module: base @@ -11397,7 +11397,7 @@ msgstr "Filtro" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "Sra." #. module: base diff --git a/openerp/addons/base/i18n/es_CR.po b/openerp/addons/base/i18n/es_CR.po index a4d9a8129d5..913775326c7 100644 --- a/openerp/addons/base/i18n/es_CR.po +++ b/openerp/addons/base/i18n/es_CR.po @@ -4442,7 +4442,7 @@ msgstr "GPL-2 o versión posterior" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "Sr." #. module: base @@ -13818,7 +13818,7 @@ msgstr "Secuencias" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "Sra." #. module: base @@ -13945,7 +13945,7 @@ msgstr "Filtro" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "Sra." #. module: base diff --git a/openerp/addons/base/i18n/es_EC.po b/openerp/addons/base/i18n/es_EC.po index dadcd9c0e46..e81781da452 100644 --- a/openerp/addons/base/i18n/es_EC.po +++ b/openerp/addons/base/i18n/es_EC.po @@ -3805,8 +3805,8 @@ msgstr "GPL-2 o versión posterior" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." -msgstr "M." +msgid "Mr." +msgstr "Mr." #. module: base #: code:addons/base/module/module.py:519 @@ -11264,8 +11264,8 @@ msgstr "Secuencias" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" -msgstr "Mss" +msgid "Miss" +msgstr "Miss" #. module: base #: model:ir.model,name:base.model_ir_ui_view @@ -11391,7 +11391,7 @@ msgstr "Filtro" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "Sra." #. module: base diff --git a/openerp/addons/base/i18n/et.po b/openerp/addons/base/i18n/et.po index 7552ae0719b..f2457c654a4 100644 --- a/openerp/addons/base/i18n/et.po +++ b/openerp/addons/base/i18n/et.po @@ -3713,7 +3713,7 @@ msgstr "GPL-2 või hilisem versioon" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "" #. module: base @@ -11043,7 +11043,7 @@ msgstr "Jadad" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11163,7 +11163,7 @@ msgstr "Filter" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/eu.po b/openerp/addons/base/i18n/eu.po index 378c973a0eb..92667018edb 100644 --- a/openerp/addons/base/i18n/eu.po +++ b/openerp/addons/base/i18n/eu.po @@ -3682,7 +3682,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "" #. module: base @@ -10995,7 +10995,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11115,7 +11115,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/fa.po b/openerp/addons/base/i18n/fa.po index a465ce96c3c..c1a94fc9ce1 100644 --- a/openerp/addons/base/i18n/fa.po +++ b/openerp/addons/base/i18n/fa.po @@ -3715,7 +3715,7 @@ msgstr "مجوز GPL-2 یا نگارش بالاتر" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "" #. module: base @@ -11048,7 +11048,7 @@ msgstr "دنباله‌ها" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11168,7 +11168,7 @@ msgstr "پالایه" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/fa_AF.po b/openerp/addons/base/i18n/fa_AF.po index e3d0389fe01..27e99d07a6c 100644 --- a/openerp/addons/base/i18n/fa_AF.po +++ b/openerp/addons/base/i18n/fa_AF.po @@ -3682,7 +3682,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "" #. module: base @@ -10995,7 +10995,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11115,7 +11115,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/fi.po b/openerp/addons/base/i18n/fi.po index a6cb99831fb..3b27c52ae46 100644 --- a/openerp/addons/base/i18n/fi.po +++ b/openerp/addons/base/i18n/fi.po @@ -3793,7 +3793,7 @@ msgstr "GPL-2 tai myöhäisempi versio" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "" #. module: base @@ -11226,7 +11226,7 @@ msgstr "Jaksot" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11352,8 +11352,8 @@ msgstr "Suodin" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." -msgstr "Ms." +msgid "Mrs." +msgstr "Mrs." #. module: base #: view:base.module.import:0 diff --git a/openerp/addons/base/i18n/fr.po b/openerp/addons/base/i18n/fr.po index b47d352f885..975b97a543f 100644 --- a/openerp/addons/base/i18n/fr.po +++ b/openerp/addons/base/i18n/fr.po @@ -3817,7 +3817,7 @@ msgstr "GPL-2 ou version supérieure" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "M." #. module: base @@ -11275,7 +11275,7 @@ msgstr "Séquences" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "Mlle" #. module: base @@ -11403,7 +11403,7 @@ msgstr "Filtre" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "Mme" #. module: base diff --git a/openerp/addons/base/i18n/gl.po b/openerp/addons/base/i18n/gl.po index 804c17bad22..66b56a02246 100644 --- a/openerp/addons/base/i18n/gl.po +++ b/openerp/addons/base/i18n/gl.po @@ -3805,8 +3805,8 @@ msgstr "GPL-2 ou versión posterior" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." -msgstr "M." +msgid "Mr." +msgstr "Mr." #. module: base #: code:addons/base/module/module.py:519 @@ -11245,8 +11245,8 @@ msgstr "Secuencias" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" -msgstr "MSS" +msgid "Miss" +msgstr "Miss" #. module: base #: model:ir.model,name:base.model_ir_ui_view @@ -11372,7 +11372,7 @@ msgstr "Filtro" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "Ms" #. module: base diff --git a/openerp/addons/base/i18n/he.po b/openerp/addons/base/i18n/he.po index 49655e7ae5c..6d1a3501066 100644 --- a/openerp/addons/base/i18n/he.po +++ b/openerp/addons/base/i18n/he.po @@ -3702,7 +3702,7 @@ msgstr "גרסא GPL-2 או מאוחרת יותר." #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "" #. module: base @@ -11030,7 +11030,7 @@ msgstr "רציפות" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11150,7 +11150,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/hr.po b/openerp/addons/base/i18n/hr.po index bead1791bdc..4460921847e 100644 --- a/openerp/addons/base/i18n/hr.po +++ b/openerp/addons/base/i18n/hr.po @@ -3835,7 +3835,7 @@ msgstr "GPL-2 ili novija verzija" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "g." #. module: base @@ -11218,7 +11218,7 @@ msgstr "Sekvence" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "gđica" #. module: base @@ -11344,7 +11344,7 @@ msgstr "Filter" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "gđa." #. module: base diff --git a/openerp/addons/base/i18n/hu.po b/openerp/addons/base/i18n/hu.po index d8a699102bf..5d20eb6f771 100644 --- a/openerp/addons/base/i18n/hu.po +++ b/openerp/addons/base/i18n/hu.po @@ -3792,7 +3792,7 @@ msgstr "GPL-2 vagy korábbi verzió" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "Úr" #. module: base @@ -11243,8 +11243,8 @@ msgstr "Sorszámok" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" -msgstr "Mss" +msgid "Miss" +msgstr "Miss" #. module: base #: model:ir.model,name:base.model_ir_ui_view @@ -11372,8 +11372,8 @@ msgstr "Szűrő" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." -msgstr "Ms." +msgid "Mrs." +msgstr "Mrs." #. module: base #: view:base.module.import:0 diff --git a/openerp/addons/base/i18n/hy.po b/openerp/addons/base/i18n/hy.po index b7e53816cae..9984f2c03f4 100644 --- a/openerp/addons/base/i18n/hy.po +++ b/openerp/addons/base/i18n/hy.po @@ -3682,7 +3682,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "" #. module: base @@ -10995,7 +10995,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11115,7 +11115,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/id.po b/openerp/addons/base/i18n/id.po index 323819ab4a5..cc5113f856f 100644 --- a/openerp/addons/base/i18n/id.po +++ b/openerp/addons/base/i18n/id.po @@ -3686,7 +3686,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "" #. module: base @@ -10999,7 +10999,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11119,7 +11119,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/is.po b/openerp/addons/base/i18n/is.po index fb292a07512..425ea2516db 100644 --- a/openerp/addons/base/i18n/is.po +++ b/openerp/addons/base/i18n/is.po @@ -3682,7 +3682,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "" #. module: base @@ -10995,7 +10995,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11115,7 +11115,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/it.po b/openerp/addons/base/i18n/it.po index 64f7a787c29..40f6a45e2ff 100644 --- a/openerp/addons/base/i18n/it.po +++ b/openerp/addons/base/i18n/it.po @@ -3810,8 +3810,8 @@ msgstr "GPL-2 o successiva" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." -msgstr "M." +msgid "Mr." +msgstr "Mr." #. module: base #: code:addons/base/module/module.py:519 @@ -11265,8 +11265,8 @@ msgstr "Sequenze" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" -msgstr "Mss" +msgid "Miss" +msgstr "Miss" #. module: base #: model:ir.model,name:base.model_ir_ui_view @@ -11392,7 +11392,7 @@ msgstr "Filtro" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "Sig.ra" #. module: base diff --git a/openerp/addons/base/i18n/ja.po b/openerp/addons/base/i18n/ja.po index 3b727699679..00064377974 100644 --- a/openerp/addons/base/i18n/ja.po +++ b/openerp/addons/base/i18n/ja.po @@ -4096,7 +4096,7 @@ msgstr "GPL-2 またはそれ以降のバージョン" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "" #. module: base @@ -11674,7 +11674,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11794,7 +11794,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/kk.po b/openerp/addons/base/i18n/kk.po index de3a57e6e0f..70c941b9aa6 100644 --- a/openerp/addons/base/i18n/kk.po +++ b/openerp/addons/base/i18n/kk.po @@ -3682,7 +3682,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "" #. module: base @@ -10995,7 +10995,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11115,7 +11115,7 @@ msgstr "Сүзгі" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "миссис" #. module: base diff --git a/openerp/addons/base/i18n/ko.po b/openerp/addons/base/i18n/ko.po index a4141f5d609..8fd9331052c 100644 --- a/openerp/addons/base/i18n/ko.po +++ b/openerp/addons/base/i18n/ko.po @@ -3729,7 +3729,7 @@ msgstr "GPL-2 또는 이후 버젼" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "" #. module: base @@ -11056,7 +11056,7 @@ msgstr "시퀀스" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11176,7 +11176,7 @@ msgstr "필터" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/lt.po b/openerp/addons/base/i18n/lt.po index 8e0ae0d384e..821b0705ff5 100644 --- a/openerp/addons/base/i18n/lt.po +++ b/openerp/addons/base/i18n/lt.po @@ -3694,7 +3694,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "" #. module: base @@ -11029,7 +11029,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11149,7 +11149,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "Ponia" #. module: base diff --git a/openerp/addons/base/i18n/lv.po b/openerp/addons/base/i18n/lv.po index 9f52a9bcaf8..1402da79c00 100644 --- a/openerp/addons/base/i18n/lv.po +++ b/openerp/addons/base/i18n/lv.po @@ -3717,7 +3717,7 @@ msgstr "GPL-2 vai vēlāka versija" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "" #. module: base @@ -11063,7 +11063,7 @@ msgstr "Sērijas" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11183,7 +11183,7 @@ msgstr "Filtrs" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/mk.po b/openerp/addons/base/i18n/mk.po index e5293173930..83994f31964 100644 --- a/openerp/addons/base/i18n/mk.po +++ b/openerp/addons/base/i18n/mk.po @@ -3693,7 +3693,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "" #. module: base @@ -11006,7 +11006,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11126,7 +11126,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/mn.po b/openerp/addons/base/i18n/mn.po index 7e7ce75c2ed..1f58def2e90 100644 --- a/openerp/addons/base/i18n/mn.po +++ b/openerp/addons/base/i18n/mn.po @@ -3746,8 +3746,8 @@ msgstr "GPL-2 болон дараагийн хувилбар" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." -msgstr "M." +msgid "Mr." +msgstr "Mr." #. module: base #: code:addons/base/module/module.py:519 @@ -11086,7 +11086,7 @@ msgstr "Дараалал" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "Хатагтай" #. module: base @@ -11207,7 +11207,7 @@ msgstr "Шүүлт" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "Хатагтай." #. module: base diff --git a/openerp/addons/base/i18n/nb.po b/openerp/addons/base/i18n/nb.po index 4d21f12d3c6..91fa3298775 100644 --- a/openerp/addons/base/i18n/nb.po +++ b/openerp/addons/base/i18n/nb.po @@ -3734,8 +3734,8 @@ msgstr "GPL-2 eller senere versjon" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." -msgstr "M." +msgid "Mr." +msgstr "Mr." #. module: base #: code:addons/base/module/module.py:519 @@ -11081,7 +11081,7 @@ msgstr "Sekvenser" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11201,7 +11201,7 @@ msgstr "Filter" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/nl.po b/openerp/addons/base/i18n/nl.po index 32a85ba06c4..311d04e0a54 100644 --- a/openerp/addons/base/i18n/nl.po +++ b/openerp/addons/base/i18n/nl.po @@ -3800,7 +3800,7 @@ msgstr "GPL-2 of latere versie" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "Hr." #. module: base @@ -11252,7 +11252,7 @@ msgstr "Reeksen" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "Mej." #. module: base @@ -11379,7 +11379,7 @@ msgstr "Filter" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "Mw." #. module: base diff --git a/openerp/addons/base/i18n/nl_BE.po b/openerp/addons/base/i18n/nl_BE.po index 7b720f4511d..d9fcfaa86af 100644 --- a/openerp/addons/base/i18n/nl_BE.po +++ b/openerp/addons/base/i18n/nl_BE.po @@ -3697,7 +3697,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "" #. module: base @@ -11010,7 +11010,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11130,7 +11130,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/pl.po b/openerp/addons/base/i18n/pl.po index e7bd3ec9b14..5e6569da9d7 100644 --- a/openerp/addons/base/i18n/pl.po +++ b/openerp/addons/base/i18n/pl.po @@ -3761,7 +3761,7 @@ msgstr "GPL-2 lub wersja późniejsza" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "" #. module: base @@ -11159,7 +11159,7 @@ msgstr "Numeracje" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11281,7 +11281,7 @@ msgstr "Filtr" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "Pani" #. module: base diff --git a/openerp/addons/base/i18n/pt.po b/openerp/addons/base/i18n/pt.po index fe6b53693cb..92315dee4ef 100644 --- a/openerp/addons/base/i18n/pt.po +++ b/openerp/addons/base/i18n/pt.po @@ -3757,7 +3757,7 @@ msgstr "GPL-2 ou version anterior" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "" #. module: base @@ -11162,7 +11162,7 @@ msgstr "Sequências" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11284,7 +11284,7 @@ msgstr "Filtro" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "Srª." #. module: base diff --git a/openerp/addons/base/i18n/pt_BR.po b/openerp/addons/base/i18n/pt_BR.po index 8eec70f77b6..51e34a6e9be 100644 --- a/openerp/addons/base/i18n/pt_BR.po +++ b/openerp/addons/base/i18n/pt_BR.po @@ -3975,8 +3975,8 @@ msgstr "GPL-2 ou versão superior" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." -msgstr "M." +msgid "Mr." +msgstr "Mr." #. module: base #: code:addons/base/module/module.py:519 @@ -11709,7 +11709,7 @@ msgstr "Seqüências" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "Sra" #. module: base @@ -11836,7 +11836,7 @@ msgstr "Filtro" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "Sra." #. module: base diff --git a/openerp/addons/base/i18n/ro.po b/openerp/addons/base/i18n/ro.po index 27ff3506cea..2cbc45fb22d 100644 --- a/openerp/addons/base/i18n/ro.po +++ b/openerp/addons/base/i18n/ro.po @@ -3812,7 +3812,7 @@ msgstr "GPL-2 sau versiune mai nouă" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "Dl." #. module: base @@ -11271,7 +11271,7 @@ msgstr "Secvențe" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "D-ra" #. module: base @@ -11399,7 +11399,7 @@ msgstr "Filtru" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "Dna." #. module: base diff --git a/openerp/addons/base/i18n/ru.po b/openerp/addons/base/i18n/ru.po index 835efe3fa58..57ac744865d 100644 --- a/openerp/addons/base/i18n/ru.po +++ b/openerp/addons/base/i18n/ru.po @@ -3794,7 +3794,7 @@ msgstr "GPL версии 2 или более поздней" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "Г-н" #. module: base @@ -11243,7 +11243,7 @@ msgstr "Нумерация" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "Г-жа" #. module: base @@ -11369,7 +11369,7 @@ msgstr "Фильтр" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "Г-жа" #. module: base diff --git a/openerp/addons/base/i18n/sk.po b/openerp/addons/base/i18n/sk.po index c4fb21e7f70..c8f621a6ed8 100644 --- a/openerp/addons/base/i18n/sk.po +++ b/openerp/addons/base/i18n/sk.po @@ -3760,7 +3760,7 @@ msgstr "GPL-2 alebo novšia verzia" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "pán" #. module: base @@ -11163,7 +11163,7 @@ msgstr "Postupnosti" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "slečna" #. module: base @@ -11290,7 +11290,7 @@ msgstr "Filter" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "pani" #. module: base diff --git a/openerp/addons/base/i18n/sl.po b/openerp/addons/base/i18n/sl.po index 0de03559923..45d82a64cd1 100644 --- a/openerp/addons/base/i18n/sl.po +++ b/openerp/addons/base/i18n/sl.po @@ -3789,7 +3789,7 @@ msgstr "GPL-2 ali naslednja verzija" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "G." #. module: base @@ -11220,7 +11220,7 @@ msgstr "Zaporedja" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "Gospodična" #. module: base @@ -11348,7 +11348,7 @@ msgstr "Filter" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "Ga." #. module: base diff --git a/openerp/addons/base/i18n/sq.po b/openerp/addons/base/i18n/sq.po index 297d3f37ea9..6637361df72 100644 --- a/openerp/addons/base/i18n/sq.po +++ b/openerp/addons/base/i18n/sq.po @@ -3681,7 +3681,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "" #. module: base @@ -10994,7 +10994,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11114,7 +11114,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/sr.po b/openerp/addons/base/i18n/sr.po index 65f02a38fce..61d5fa09aff 100644 --- a/openerp/addons/base/i18n/sr.po +++ b/openerp/addons/base/i18n/sr.po @@ -3758,8 +3758,8 @@ msgstr "GPL-2 ili novija verzija" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." -msgstr "M." +msgid "Mr." +msgstr "Mr." #. module: base #: code:addons/base/module/module.py:519 @@ -11139,8 +11139,8 @@ msgstr "Sekvence" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" -msgstr "Mss" +msgid "Miss" +msgstr "Miss" #. module: base #: model:ir.model,name:base.model_ir_ui_view @@ -11259,8 +11259,8 @@ msgstr "Filter" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." -msgstr "Ms." +msgid "Mrs." +msgstr "Mrs." #. module: base #: view:base.module.import:0 diff --git a/openerp/addons/base/i18n/sr@latin.po b/openerp/addons/base/i18n/sr@latin.po index 92ba916bf1a..114337effd1 100644 --- a/openerp/addons/base/i18n/sr@latin.po +++ b/openerp/addons/base/i18n/sr@latin.po @@ -3865,7 +3865,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "" #. module: base @@ -11178,7 +11178,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11298,7 +11298,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/sv.po b/openerp/addons/base/i18n/sv.po index c9d0a27b8c9..352e6ba4513 100644 --- a/openerp/addons/base/i18n/sv.po +++ b/openerp/addons/base/i18n/sv.po @@ -3768,8 +3768,8 @@ msgstr "GPL-2 eller senare version" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." -msgstr "M." +msgid "Mr." +msgstr "Mr." #. module: base #: code:addons/base/module/module.py:519 @@ -11176,7 +11176,7 @@ msgstr "Nummerserier" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "Fru" #. module: base @@ -11300,7 +11300,7 @@ msgstr "Filtrera" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "Frk." #. module: base diff --git a/openerp/addons/base/i18n/th.po b/openerp/addons/base/i18n/th.po index 0951f766fca..d91bddb206b 100644 --- a/openerp/addons/base/i18n/th.po +++ b/openerp/addons/base/i18n/th.po @@ -3682,7 +3682,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "" #. module: base @@ -10995,7 +10995,7 @@ msgstr "ลำดับ" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11115,7 +11115,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/tlh.po b/openerp/addons/base/i18n/tlh.po index 1c087b508eb..60cf53c393f 100644 --- a/openerp/addons/base/i18n/tlh.po +++ b/openerp/addons/base/i18n/tlh.po @@ -3681,7 +3681,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "" #. module: base @@ -10994,7 +10994,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11114,7 +11114,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/tr.po b/openerp/addons/base/i18n/tr.po index b9d1bb2a7c5..9ec92ff00cd 100644 --- a/openerp/addons/base/i18n/tr.po +++ b/openerp/addons/base/i18n/tr.po @@ -3824,8 +3824,8 @@ msgstr "GPL-2 veya sonraki sürümü" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." -msgstr "M." +msgid "Mr." +msgstr "Mr." #. module: base #: code:addons/base/module/module.py:519 @@ -11280,7 +11280,7 @@ msgstr "Silsileler" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "Bayan" #. module: base @@ -11404,7 +11404,7 @@ msgstr "Süzgeç" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "Bayan" #. module: base diff --git a/openerp/addons/base/i18n/uk.po b/openerp/addons/base/i18n/uk.po index 1ded396d476..f42d5e2d0e1 100644 --- a/openerp/addons/base/i18n/uk.po +++ b/openerp/addons/base/i18n/uk.po @@ -3717,7 +3717,7 @@ msgstr "GPL-2 або пізніша версія" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "" #. module: base @@ -11046,7 +11046,7 @@ msgstr "Послідовності" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11166,7 +11166,7 @@ msgstr "Фільтр" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/ur.po b/openerp/addons/base/i18n/ur.po index a45da1f2dad..582ee6bd2c5 100644 --- a/openerp/addons/base/i18n/ur.po +++ b/openerp/addons/base/i18n/ur.po @@ -3682,7 +3682,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "" #. module: base @@ -10995,7 +10995,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11115,7 +11115,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/vi.po b/openerp/addons/base/i18n/vi.po index d8e03b80386..35e1c2cc32f 100644 --- a/openerp/addons/base/i18n/vi.po +++ b/openerp/addons/base/i18n/vi.po @@ -3709,7 +3709,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "" #. module: base @@ -11028,7 +11028,7 @@ msgstr "Sequences" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11150,7 +11150,7 @@ msgstr "Bộ lọc" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/zh_CN.po b/openerp/addons/base/i18n/zh_CN.po index 7b618b1e0e5..8a1ffd6136a 100644 --- a/openerp/addons/base/i18n/zh_CN.po +++ b/openerp/addons/base/i18n/zh_CN.po @@ -4081,7 +4081,7 @@ msgstr "GPL-2 或更新版本" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "先生" #. module: base @@ -11468,8 +11468,8 @@ msgstr "序列" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" -msgstr "Mss" +msgid "Miss" +msgstr "Miss" #. module: base #: model:ir.model,name:base.model_ir_ui_view @@ -11588,7 +11588,7 @@ msgstr "过滤" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "女士" #. module: base diff --git a/openerp/addons/base/i18n/zh_HK.po b/openerp/addons/base/i18n/zh_HK.po index 06a099c2196..78232e87ecf 100644 --- a/openerp/addons/base/i18n/zh_HK.po +++ b/openerp/addons/base/i18n/zh_HK.po @@ -3682,7 +3682,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "" #. module: base @@ -10995,7 +10995,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11115,7 +11115,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "" #. module: base diff --git a/openerp/addons/base/i18n/zh_TW.po b/openerp/addons/base/i18n/zh_TW.po index 5b6c6c37767..116eca54d8d 100644 --- a/openerp/addons/base/i18n/zh_TW.po +++ b/openerp/addons/base/i18n/zh_TW.po @@ -3687,7 +3687,7 @@ msgstr "GPL-2 或更新版本" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_sir -msgid "M." +msgid "Mr." msgstr "" #. module: base @@ -11013,7 +11013,7 @@ msgstr "序列" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_miss -msgid "Mss" +msgid "Miss" msgstr "" #. module: base @@ -11133,7 +11133,7 @@ msgstr "過濾器" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam -msgid "Ms." +msgid "Mrs." msgstr "女士" #. module: base diff --git a/openerp/addons/base/res/res_partner_data.xml b/openerp/addons/base/res/res_partner_data.xml index 138e44176f0..5bcb65a0461 100644 --- a/openerp/addons/base/res/res_partner_data.xml +++ b/openerp/addons/base/res/res_partner_data.xml @@ -20,17 +20,32 @@ contact Madam - Ms. + Mrs. contact Miss - Mss + Miss contact Sir - M. + Sir + + + contact + Mister + Mr. + + + contact + Doctor + Dr. + + + contact + Professor + Prof. From 2332c23c30c05fb68c025a9a55522a382a394b0d Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 23 Feb 2012 11:30:45 +0100 Subject: [PATCH 019/325] [IMP] replaces tools.misc.get_languages by the static dictionary it returns, rename that dict to ALL_LANGUAGES for clarity bzr revid: xmo@openerp.com-20120223103045-a44cl5kdkrnehc66 --- openerp/addons/base/res/res_lang.py | 2 +- openerp/tools/misc.py | 168 ++++++++++++++-------------- 2 files changed, 83 insertions(+), 87 deletions(-) diff --git a/openerp/addons/base/res/res_lang.py b/openerp/addons/base/res/res_lang.py index 13acf109b04..261f401f6be 100644 --- a/openerp/addons/base/res/res_lang.py +++ b/openerp/addons/base/res/res_lang.py @@ -80,7 +80,7 @@ class lang(osv.osv): _logger.warning(msg, lang, lc) if not lang_name: - lang_name = tools.get_languages().get(lang, lang) + lang_name = tools.ALL_LANGUAGES.get(lang, lang) def fix_xa0(s): diff --git a/openerp/tools/misc.py b/openerp/tools/misc.py index a5c72900fc7..89cd8695078 100644 --- a/openerp/tools/misc.py +++ b/openerp/tools/misc.py @@ -550,95 +550,91 @@ def get_iso_codes(lang): lang = lang.split('_')[0] return lang -def get_languages(): - # The codes below are those from Launchpad's Rosetta, with the exception - # of some trivial codes where the Launchpad code is xx and we have xx_XX. - languages={ - 'ab_RU': u'Abkhazian / аҧсуа', - 'ar_AR': u'Arabic / الْعَرَبيّة', - 'bg_BG': u'Bulgarian / български език', - 'bs_BS': u'Bosnian / bosanski jezik', - 'ca_ES': u'Catalan / Català', - 'cs_CZ': u'Czech / Čeština', - 'da_DK': u'Danish / Dansk', - 'de_DE': u'German / Deutsch', - 'el_GR': u'Greek / Ελληνικά', - 'en_CA': u'English (CA)', - 'en_GB': u'English (UK)', - 'en_US': u'English (US)', - 'es_AR': u'Spanish (AR) / Español (AR)', - 'es_BO': u'Spanish (BO) / Español (BO)', - 'es_CL': u'Spanish (CL) / Español (CL)', - 'es_CO': u'Spanish (CO) / Español (CO)', - 'es_CR': u'Spanish (CR) / Español (CR)', - 'es_DO': u'Spanish (DO) / Español (DO)', - 'es_EC': u'Spanish (EC) / Español (EC)', - 'es_ES': u'Spanish / Español', - 'es_GT': u'Spanish (GT) / Español (GT)', - 'es_HN': u'Spanish (HN) / Español (HN)', - 'es_MX': u'Spanish (MX) / Español (MX)', - 'es_NI': u'Spanish (NI) / Español (NI)', - 'es_PA': u'Spanish (PA) / Español (PA)', - 'es_PE': u'Spanish (PE) / Español (PE)', - 'es_PR': u'Spanish (PR) / Español (PR)', - 'es_PY': u'Spanish (PY) / Español (PY)', - 'es_SV': u'Spanish (SV) / Español (SV)', - 'es_UY': u'Spanish (UY) / Español (UY)', - 'es_VE': u'Spanish (VE) / Español (VE)', - 'et_EE': u'Estonian / Eesti keel', - 'fa_IR': u'Persian / فارس', - 'fi_FI': u'Finnish / Suomi', - 'fr_BE': u'French (BE) / Français (BE)', - 'fr_CH': u'French (CH) / Français (CH)', - 'fr_FR': u'French / Français', - 'gl_ES': u'Galician / Galego', - 'gu_IN': u'Gujarati / ગુજરાતી', - 'he_IL': u'Hebrew / עִבְרִי', - 'hi_IN': u'Hindi / हिंदी', - 'hr_HR': u'Croatian / hrvatski jezik', - 'hu_HU': u'Hungarian / Magyar', - 'id_ID': u'Indonesian / Bahasa Indonesia', - 'it_IT': u'Italian / Italiano', - 'iu_CA': u'Inuktitut / ᐃᓄᒃᑎᑐᑦ', - 'ja_JP': u'Japanese / 日本語', - 'ko_KP': u'Korean (KP) / 한국어 (KP)', - 'ko_KR': u'Korean (KR) / 한국어 (KR)', - 'lt_LT': u'Lithuanian / Lietuvių kalba', - 'lv_LV': u'Latvian / latviešu valoda', - 'ml_IN': u'Malayalam / മലയാളം', - 'mn_MN': u'Mongolian / монгол', - 'nb_NO': u'Norwegian Bokmål / Norsk bokmål', - 'nl_NL': u'Dutch / Nederlands', - 'nl_BE': u'Flemish (BE) / Vlaams (BE)', - 'oc_FR': u'Occitan (FR, post 1500) / Occitan', - 'pl_PL': u'Polish / Język polski', - 'pt_BR': u'Portugese (BR) / Português (BR)', - 'pt_PT': u'Portugese / Português', - 'ro_RO': u'Romanian / română', - 'ru_RU': u'Russian / русский язык', - 'si_LK': u'Sinhalese / සිංහල', - 'sl_SI': u'Slovenian / slovenščina', - 'sk_SK': u'Slovak / Slovenský jazyk', - 'sq_AL': u'Albanian / Shqip', - 'sr_RS': u'Serbian (Cyrillic) / српски', - 'sr@latin': u'Serbian (Latin) / srpski', - 'sv_SE': u'Swedish / svenska', - 'te_IN': u'Telugu / తెలుగు', - 'tr_TR': u'Turkish / Türkçe', - 'vi_VN': u'Vietnamese / Tiếng Việt', - 'uk_UA': u'Ukrainian / українська', - 'ur_PK': u'Urdu / اردو', - 'zh_CN': u'Chinese (CN) / 简体中文', - 'zh_HK': u'Chinese (HK)', - 'zh_TW': u'Chinese (TW) / 正體字', - 'th_TH': u'Thai / ภาษาไทย', - 'tlh_TLH': u'Klingon', - } - return languages +ALL_LANGUAGES = { + 'ab_RU': u'Abkhazian / аҧсуа', + 'ar_AR': u'Arabic / الْعَرَبيّة', + 'bg_BG': u'Bulgarian / български език', + 'bs_BS': u'Bosnian / bosanski jezik', + 'ca_ES': u'Catalan / Català', + 'cs_CZ': u'Czech / Čeština', + 'da_DK': u'Danish / Dansk', + 'de_DE': u'German / Deutsch', + 'el_GR': u'Greek / Ελληνικά', + 'en_CA': u'English (CA)', + 'en_GB': u'English (UK)', + 'en_US': u'English (US)', + 'es_AR': u'Spanish (AR) / Español (AR)', + 'es_BO': u'Spanish (BO) / Español (BO)', + 'es_CL': u'Spanish (CL) / Español (CL)', + 'es_CO': u'Spanish (CO) / Español (CO)', + 'es_CR': u'Spanish (CR) / Español (CR)', + 'es_DO': u'Spanish (DO) / Español (DO)', + 'es_EC': u'Spanish (EC) / Español (EC)', + 'es_ES': u'Spanish / Español', + 'es_GT': u'Spanish (GT) / Español (GT)', + 'es_HN': u'Spanish (HN) / Español (HN)', + 'es_MX': u'Spanish (MX) / Español (MX)', + 'es_NI': u'Spanish (NI) / Español (NI)', + 'es_PA': u'Spanish (PA) / Español (PA)', + 'es_PE': u'Spanish (PE) / Español (PE)', + 'es_PR': u'Spanish (PR) / Español (PR)', + 'es_PY': u'Spanish (PY) / Español (PY)', + 'es_SV': u'Spanish (SV) / Español (SV)', + 'es_UY': u'Spanish (UY) / Español (UY)', + 'es_VE': u'Spanish (VE) / Español (VE)', + 'et_EE': u'Estonian / Eesti keel', + 'fa_IR': u'Persian / فارس', + 'fi_FI': u'Finnish / Suomi', + 'fr_BE': u'French (BE) / Français (BE)', + 'fr_CH': u'French (CH) / Français (CH)', + 'fr_FR': u'French / Français', + 'gl_ES': u'Galician / Galego', + 'gu_IN': u'Gujarati / ગુજરાતી', + 'he_IL': u'Hebrew / עִבְרִי', + 'hi_IN': u'Hindi / हिंदी', + 'hr_HR': u'Croatian / hrvatski jezik', + 'hu_HU': u'Hungarian / Magyar', + 'id_ID': u'Indonesian / Bahasa Indonesia', + 'it_IT': u'Italian / Italiano', + 'iu_CA': u'Inuktitut / ᐃᓄᒃᑎᑐᑦ', + 'ja_JP': u'Japanese / 日本語', + 'ko_KP': u'Korean (KP) / 한국어 (KP)', + 'ko_KR': u'Korean (KR) / 한국어 (KR)', + 'lt_LT': u'Lithuanian / Lietuvių kalba', + 'lv_LV': u'Latvian / latviešu valoda', + 'ml_IN': u'Malayalam / മലയാളം', + 'mn_MN': u'Mongolian / монгол', + 'nb_NO': u'Norwegian Bokmål / Norsk bokmål', + 'nl_NL': u'Dutch / Nederlands', + 'nl_BE': u'Flemish (BE) / Vlaams (BE)', + 'oc_FR': u'Occitan (FR, post 1500) / Occitan', + 'pl_PL': u'Polish / Język polski', + 'pt_BR': u'Portugese (BR) / Português (BR)', + 'pt_PT': u'Portugese / Português', + 'ro_RO': u'Romanian / română', + 'ru_RU': u'Russian / русский язык', + 'si_LK': u'Sinhalese / සිංහල', + 'sl_SI': u'Slovenian / slovenščina', + 'sk_SK': u'Slovak / Slovenský jazyk', + 'sq_AL': u'Albanian / Shqip', + 'sr_RS': u'Serbian (Cyrillic) / српски', + 'sr@latin': u'Serbian (Latin) / srpski', + 'sv_SE': u'Swedish / svenska', + 'te_IN': u'Telugu / తెలుగు', + 'tr_TR': u'Turkish / Türkçe', + 'vi_VN': u'Vietnamese / Tiếng Việt', + 'uk_UA': u'Ukrainian / українська', + 'ur_PK': u'Urdu / اردو', + 'zh_CN': u'Chinese (CN) / 简体中文', + 'zh_HK': u'Chinese (HK)', + 'zh_TW': u'Chinese (TW) / 正體字', + 'th_TH': u'Thai / ภาษาไทย', + 'tlh_TLH': u'Klingon', +} def scan_languages(): # Now it will take all languages from get languages function without filter it with base module languages - lang_dict = get_languages() + lang_dict = ALL_LANGUAGES ret = [(lang, lang_dict.get(lang, lang)) for lang in list(lang_dict)] ret.sort(key=lambda k:k[1]) return ret From 18d38fb5eebeb52ad88678a7017a4230c7783727 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 23 Feb 2012 11:32:07 +0100 Subject: [PATCH 020/325] [IMP] document tools.misc.scan_languages, make its implementation less retarded bzr revid: xmo@openerp.com-20120223103207-ra1a0dzcyoe745cx --- openerp/tools/misc.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/openerp/tools/misc.py b/openerp/tools/misc.py index 89cd8695078..06105fbdb56 100644 --- a/openerp/tools/misc.py +++ b/openerp/tools/misc.py @@ -633,12 +633,12 @@ ALL_LANGUAGES = { } def scan_languages(): - # Now it will take all languages from get languages function without filter it with base module languages - lang_dict = ALL_LANGUAGES - ret = [(lang, lang_dict.get(lang, lang)) for lang in list(lang_dict)] - ret.sort(key=lambda k:k[1]) - return ret + """ Returns all languages supported by OpenERP for translation + :returns: a list of (lang_code, lang_name) pairs + :rtype: [(str, unicode)] + """ + return sorted(ALL_LANGUAGES.iteritems(), key=lambda k: k[1]) def get_user_companies(cr, user): def _get_company_children(cr, ids): From 25e699d72dc1d3e61af94402ad3e66b23cd24303 Mon Sep 17 00:00:00 2001 From: Samus Aran Date: Fri, 23 Mar 2012 16:08:50 +0100 Subject: [PATCH 021/325] [IMP] Creating new row in db also update write_date and write_uid bzr revid: cto@openerp.com-20120323150850-26j5ht8eexue86sh --- openerp/osv/orm.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index 32b039f6598..22c1a0bc183 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -4172,9 +4172,9 @@ class BaseModel(object): and vals[field]: self._check_selection_field_value(cr, user, field, vals[field], context=context) if self._log_access: - upd0 += ',create_uid,create_date' - upd1 += ",%s,(now() at time zone 'UTC')" - upd2.append(user) + upd0 += ',create_uid,create_date,write_uid,write_date' + upd1 += ",%s,(now() at time zone 'UTC'),%s,(now() at time zone 'UTC')" + upd2.extend((user, user)) cr.execute('insert into "'+self._table+'" (id'+upd0+") values ("+str(id_new)+upd1+')', tuple(upd2)) self.check_access_rule(cr, user, [id_new], 'create', context=context) upd_todo.sort(lambda x, y: self._columns[x].priority-self._columns[y].priority) From c49f2418c25d508cd74387ca47f9963f55640c4c Mon Sep 17 00:00:00 2001 From: "Turkesh Patel (Open ERP)" Date: Wed, 4 Jul 2012 10:47:48 +0530 Subject: [PATCH 022/325] [FIX] Typo in Portuguese official language names. bzr revid: tpa@tinyerp.com-20120704051748-y41la206dwk67klv --- openerp/addons/base/i18n/base.pot | 4 ++-- openerp/tools/misc.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/openerp/addons/base/i18n/base.pot b/openerp/addons/base/i18n/base.pot index b4d28052ba8..ae6825bfe8c 100644 --- a/openerp/addons/base/i18n/base.pot +++ b/openerp/addons/base/i18n/base.pot @@ -2155,7 +2155,7 @@ msgstr "" #. module: base #: selection:base.language.install,lang:0 -msgid "Portugese (BR) / Português (BR)" +msgid "Portuguese (BR) / Português (BR)" msgstr "" #. module: base @@ -3002,7 +3002,7 @@ msgstr "" #. module: base #: selection:base.language.install,lang:0 -msgid "Portugese / Português" +msgid "Portuguese / Português" msgstr "" #. module: base diff --git a/openerp/tools/misc.py b/openerp/tools/misc.py index 3aad91fb7b8..a81e1e1f647 100644 --- a/openerp/tools/misc.py +++ b/openerp/tools/misc.py @@ -612,8 +612,8 @@ def get_languages(): 'nl_BE': u'Flemish (BE) / Vlaams (BE)', 'oc_FR': u'Occitan (FR, post 1500) / Occitan', 'pl_PL': u'Polish / Język polski', - 'pt_BR': u'Portugese (BR) / Português (BR)', - 'pt_PT': u'Portugese / Português', + 'pt_BR': u'Portuguese (BR) / Português (BR)', + 'pt_PT': u'Portuguese / Português', 'ro_RO': u'Romanian / română', 'ru_RU': u'Russian / русский язык', 'si_LK': u'Sinhalese / සිංහල', From 6e6ef1ed0f7408639ff43434917fc4110ecbf850 Mon Sep 17 00:00:00 2001 From: "Turkesh Patel (Open ERP)" Date: Thu, 5 Jul 2012 18:24:11 +0530 Subject: [PATCH 023/325] [IMP] remove res.payterm which is not in any part of code of server or addons. bzr revid: tpa@tinyerp.com-20120705125411-fd1eazoofe5mpbvf --- openerp/addons/base/i18n/base.pot | 10 ---------- openerp/addons/base/res/res_partner.py | 8 -------- openerp/addons/base/res/res_partner_view.xml | 19 ------------------- 3 files changed, 37 deletions(-) diff --git a/openerp/addons/base/i18n/base.pot b/openerp/addons/base/i18n/base.pot index b4d28052ba8..6b97092d430 100644 --- a/openerp/addons/base/i18n/base.pot +++ b/openerp/addons/base/i18n/base.pot @@ -1317,11 +1317,6 @@ msgstr "" msgid "Create _Menu" msgstr "" -#. module: base -#: field:res.payterm,name:0 -msgid "Payment Term (short name)" -msgstr "" - #. module: base #: model:ir.model,name:base.model_res_bank #: view:res.bank:0 @@ -3206,11 +3201,6 @@ msgstr "" msgid "Error ! You cannot create recursive associated members." msgstr "" -#. module: base -#: view:res.payterm:0 -msgid "Payment Term" -msgstr "" - #. module: base #: selection:res.lang,direction:0 msgid "Right-to-Left" diff --git a/openerp/addons/base/res/res_partner.py b/openerp/addons/base/res/res_partner.py index 2165c8ad16d..66c5dea1b11 100644 --- a/openerp/addons/base/res/res_partner.py +++ b/openerp/addons/base/res/res_partner.py @@ -27,14 +27,6 @@ from tools.translate import _ import logging import pooler -class res_payterm(osv.osv): - _description = 'Payment term' - _name = 'res.payterm' - _order = 'name' - _columns = { - 'name': fields.char('Payment Term (short name)', size=64), - } - class res_partner_category(osv.osv): def name_get(self, cr, uid, ids, context=None): diff --git a/openerp/addons/base/res/res_partner_view.xml b/openerp/addons/base/res/res_partner_view.xml index 5159a7075cc..a6a4ad77c90 100644 --- a/openerp/addons/base/res/res_partner_view.xml +++ b/openerp/addons/base/res/res_partner_view.xml @@ -401,25 +401,6 @@ - - res.payterm - res.payterm - form - -
- - - -
-
-
- - Payment term - ir.actions.act_window - res.payterm - form - - + + + + + + + + + From aec461651e2671dd6bb1caf7ee21430c861c109f Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Tue, 14 Aug 2012 14:31:12 +0200 Subject: [PATCH 037/325] [FIX] NUL byte in a file leads csv.reader to raise csv.Error bzr revid: xmo@openerp.com-20120814123112-p4iio7fl561ronln --- addons/base_import/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/base_import/models.py b/addons/base_import/models.py index 07a3439419d..722a9bf848e 100644 --- a/addons/base_import/models.py +++ b/addons/base_import/models.py @@ -225,7 +225,7 @@ class ir_import(orm.TransientModel): 'headers': headers or False, 'preview': list(preview), } - except (TypeError, UnicodeDecodeError), e: + except (csv.Error, TypeError, UnicodeDecodeError), e: # Due to lazy generators, UnicodeDecodeError (for # instance) may only be raised when serializing the # preview to a list in the return. From 323b979146d6e0ba428a3e15e98f112cf9f80d43 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Tue, 14 Aug 2012 14:48:35 +0200 Subject: [PATCH 038/325] [ADD] error reporting to user during preview bzr revid: xmo@openerp.com-20120814124835-9nkqni98ie2eyt5r --- addons/base_import/__openerp__.py | 1 + addons/base_import/models.py | 2 +- addons/base_import/static/src/js/import.js | 12 ++++++++++-- addons/base_import/static/src/xml/import.xml | 8 +++++++- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/addons/base_import/__openerp__.py b/addons/base_import/__openerp__.py index 230c514efc8..ab97e237909 100644 --- a/addons/base_import/__openerp__.py +++ b/addons/base_import/__openerp__.py @@ -27,6 +27,7 @@ Re-implement openerp's file import system: 'depends': ['base'], 'installable': True, 'auto_install': False, # set to true and allow uninstall? + 'css': ['static/src/css/import.css'], 'js': ['static/src/js/import.js'], 'qweb': ['static/src/xml/import.xml'], } diff --git a/addons/base_import/models.py b/addons/base_import/models.py index 722a9bf848e..560a28f9067 100644 --- a/addons/base_import/models.py +++ b/addons/base_import/models.py @@ -231,7 +231,7 @@ class ir_import(orm.TransientModel): # preview to a list in the return. _logger.debug("Error during CSV parsing preview", exc_info=True) return { - 'error': _("Failed to parse CSV file: %s") % e, + 'error': str(e), # iso-8859-1 ensures decoding will always succeed, # even if it yields non-printable characters. This is # in case of UnicodeDecodeError (or csv.Error diff --git a/addons/base_import/static/src/js/import.js b/addons/base_import/static/src/js/import.js index 5bb81d23cbb..559d74734e8 100644 --- a/addons/base_import/static/src/js/import.js +++ b/addons/base_import/static/src/js/import.js @@ -61,7 +61,7 @@ openerp.base_import = function (instance) { file_update: function (e) { if (!this.$('input.oe_import_file').val()) { return; } - // TODO: hide preview before calling set_file + this.$element.removeClass('oe_import_preview oe_import_error'); jsonp(this.$element, { url: '/base_import/set_file' }, this.proxy('file_updated')); @@ -76,7 +76,15 @@ openerp.base_import = function (instance) { }]).then(this.proxy('preview')); }, preview: function (result) { - this.$('table').html(QWeb.render('ImportView.preview', result)); + if (result.error) { + this.$element.addClass('oe_import_error'); + this.$('.oe_import_error_report').html( + QWeb.render('ImportView.error', result)); + } else { + this.$element.addClass('oe_import_preview'); + this.$('table').html( + QWeb.render('ImportView.preview', result)); + } }, }); }; diff --git a/addons/base_import/static/src/xml/import.xml b/addons/base_import/static/src/xml/import.xml index d2a3ec4f66d..7cf04c55292 100644 --- a/addons/base_import/static/src/xml/import.xml +++ b/addons/base_import/static/src/xml/import.xml @@ -1,6 +1,6 @@ -
+ @@ -9,6 +9,7 @@
+
@@ -22,4 +23,9 @@ > + +

Import preview failed due to:

+

Here is the start of the file we could not import:

+
+
From 8fa23a95186edd2f5bf6f223337d34f3a4e55e70 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Tue, 14 Aug 2012 16:14:56 +0200 Subject: [PATCH 039/325] [ADD] actual importing, no fields matching yet also no error pinpointing because API does not allow for it currently bzr revid: xmo@openerp.com-20120814141456-zh9kdbjy8wj1sxys --- addons/base_import/models.py | 29 ++++++++-- addons/base_import/static/src/js/import.js | 58 +++++++++++++++++--- addons/base_import/static/src/xml/import.xml | 17 +++++- 3 files changed, 89 insertions(+), 15 deletions(-) diff --git a/addons/base_import/models.py b/addons/base_import/models.py index 560a28f9067..a464649758d 100644 --- a/addons/base_import/models.py +++ b/addons/base_import/models.py @@ -11,6 +11,8 @@ try: except ImportError: from StringIO import StringIO +import psycopg2 + from openerp.osv import orm, fields from openerp.tools.translate import _ @@ -300,24 +302,39 @@ class ir_import(orm.TransientModel): record, fields, options, context=context) try: + _logger.info('importing %d rows...', len(data)) (code, record, message, _wat) = self.pool[record.res_model].import_data( cr, uid, import_fields, data, context=context) + _logger.info('done') + except Exception, e: + _logger.exception("Import failed") # TODO: remove when exceptions stop being an "expected" - # behavior of import_data on some invalid input. + # behavior of import_data on some (most) invalid + # input. code, record, message = -1, None, str(e) - if dryrun: - cr.execute('ROLLBACK TO SAVEPOINT import') - else: - cr.execute('RELEASE SAVEPOINT import') + # If transaction aborted, RELEASE SAVEPOINT is going to raise + # an InternalError (ROLLBACK should work, maybe). Ignore that. + # TODO: to handle multiple errors, create savepoint around + # write and release it in case of write error (after + # adding error to errors array) => can keep on trying to + # import stuff, and rollback at the end if there is any + # error in the results. + try: + if dryrun: + cr.execute('ROLLBACK TO SAVEPOINT import') + else: + cr.execute('RELEASE SAVEPOINT import') + except psycopg2.InternalError: + pass if code != -1: return [] # TODO: add key for error location? # TODO: error not within normal preview, how to display? Re-preview - # with higher count? + # with higher ``count``? return [{ 'type': 'error', 'message': message, diff --git a/addons/base_import/static/src/js/import.js b/addons/base_import/static/src/js/import.js index 559d74734e8..037a9662b02 100644 --- a/addons/base_import/static/src/js/import.js +++ b/addons/base_import/static/src/js/import.js @@ -1,5 +1,6 @@ openerp.base_import = function (instance) { var QWeb = instance.web.qweb; + var _t = instance.web._t; var _lt = instance.web._lt; /** @@ -41,7 +42,14 @@ openerp.base_import = function (instance) { 'change input.oe_import_file': 'file_update' }, init: function (parent, dataset) { - this._super(parent, {}); + var self = this; + this._super(parent, { + buttons: [ + {text: _t("Import File"), click: function () { + self.do_import(); + }, 'class': 'oe_import_dialog_button'} + ] + }); this.res_model = parent.model; // import object id this.id = null; @@ -57,6 +65,15 @@ openerp.base_import = function (instance) { }); }, + import_options: function () { + return { + // TODO: customizable gangnam style + quote: '"', + separator: ',', + headers: true, + }; + }, + //- File change section file_update: function (e) { if (!this.$('input.oe_import_file').val()) { return; } @@ -69,22 +86,49 @@ openerp.base_import = function (instance) { file_updated: function () { // immediately trigger preview... // TODO: test that write // succeeded? - this.Import.call('parse_preview', [this.id, { - quote: '"', - separator: ',', - headers: true, - }]).then(this.proxy('preview')); + this.Import.call( + 'parse_preview', [this.id, this.import_options()]) + .then(this.proxy('preview')); }, preview: function (result) { if (result.error) { this.$element.addClass('oe_import_error'); this.$('.oe_import_error_report').html( - QWeb.render('ImportView.error', result)); + QWeb.render('ImportView.preview.error', result)); } else { this.$element.addClass('oe_import_preview'); this.$('table').html( QWeb.render('ImportView.preview', result)); } }, + + //- import itself + do_import: function () { + var fields = this.$('.oe_import_fields input').map(function (index, el) { + return el.value || false; + }).get(); + this.Import.call( + 'do', [this.id, fields, this.import_options()], { + // maybe could do a dryrun after successful + // preview or something (note: don't go to + // this.result if dryrun=true) + dryrun: false + }) + .then(this.proxy('result')); + }, + result: function (errors) { + if (!errors.length) { + if (this.getParent().reload_content) { + this.getParent().reload_content(); + } + this.close(); + return; + } + // import failed (or maybe just warnings, if we ever get + // warnings?) + this.$element.addClass('oe_import_error'); + this.$('.oe_import_error_report').html( + QWeb.render('ImportView.error', {errors: errors})); + }, }); }; diff --git a/addons/base_import/static/src/xml/import.xml b/addons/base_import/static/src/xml/import.xml index 7cf04c55292..483c9a4a3cb 100644 --- a/addons/base_import/static/src/xml/import.xml +++ b/addons/base_import/static/src/xml/import.xml @@ -7,9 +7,9 @@ +
-
@@ -18,14 +18,27 @@ + + + + + + - +

Import preview failed due to:

Here is the start of the file we could not import:

+
    +
  • + + +
  • +
From 34f9664377ae837a7080b88a24c87b6ed88f88d0 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Tue, 14 Aug 2012 16:29:33 +0200 Subject: [PATCH 040/325] [FIX] no field selected for import by the user bzr revid: xmo@openerp.com-20120814142933-myng67f2cily6vfg --- addons/base_import/models.py | 14 +++++++++-- addons/base_import/tests/test_cases.py | 32 ++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/addons/base_import/models.py b/addons/base_import/models.py index a464649758d..2e44c686fd7 100644 --- a/addons/base_import/models.py +++ b/addons/base_import/models.py @@ -252,9 +252,12 @@ class ir_import(orm.TransientModel): :param list(str|bool): fields :returns: (data, fields) :rtype: (list(list(str)), list(str)) + :raises ValueError: in case the import data could not be converted """ # Get indices for non-empty fields indices = [index for index, field in enumerate(fields) if field] + if not indices: + raise ValueError(_("You must configure at least one field to import")) # If only one index, itemgetter will return an atom rather # than a 1-tuple if len(indices) == 1: mapper = lambda row: [row[indices[0]]] @@ -298,8 +301,15 @@ class ir_import(orm.TransientModel): cr.execute('SAVEPOINT import') (record,) = self.browse(cr, uid, [id], context=context) - data, import_fields = self._convert_import_data( - record, fields, options, context=context) + try: + data, import_fields = self._convert_import_data( + record, fields, options, context=context) + except ValueError, e: + return [{ + 'type': 'error', + 'message': str(e), + 'record': False, + }] try: _logger.info('importing %d rows...', len(data)) diff --git a/addons/base_import/tests/test_cases.py b/addons/base_import/tests/test_cases.py index 00230f9a3c0..e2b61c1928b 100644 --- a/addons/base_import/tests/test_cases.py +++ b/addons/base_import/tests/test_cases.py @@ -311,3 +311,35 @@ class test_convert_import_data(TransactionCase): ('foo', '2'), ('', '6'), ]) + + def test_nofield(self): + Import = self.registry('base_import.import') + + id = Import.create(self.cr, self.uid, { + 'res_model': 'base_import.tests.models.preview', + 'file': base64.b64encode('name,Some Value,Counter\n' + 'foo,1,2\n') + }) + + record = Import.browse(self.cr, self.uid, id) + self.assertRaises( + ValueError, + Import._convert_import_data, + record, [], + {'quote': '"', 'separator': ',', 'headers': True,}) + + def test_falsefields(self): + Import = self.registry('base_import.import') + + id = Import.create(self.cr, self.uid, { + 'res_model': 'base_import.tests.models.preview', + 'file': base64.b64encode('name,Some Value,Counter\n' + 'foo,1,2\n') + }) + + record = Import.browse(self.cr, self.uid, id) + self.assertRaises( + ValueError, + Import._convert_import_data, + record, [False, False, False], + {'quote': '"', 'separator': ',', 'headers': True,}) From 7f319f5a374842a2731e7fbacb468452be784c69 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Tue, 14 Aug 2012 19:23:22 +0200 Subject: [PATCH 041/325] [ADD] blahblahblahblah also basic CSS effects bzr revid: xmo@openerp.com-20120814172322-1hx09qqh90umjdcq --- addons/base_import/static/src/css/import.css | 27 ++++++++++++ addons/base_import/static/src/js/import.js | 27 +++++++++--- addons/base_import/static/src/xml/import.xml | 46 +++++++++++++++++--- 3 files changed, 89 insertions(+), 11 deletions(-) create mode 100644 addons/base_import/static/src/css/import.css diff --git a/addons/base_import/static/src/css/import.css b/addons/base_import/static/src/css/import.css new file mode 100644 index 00000000000..4bb1fdeaea0 --- /dev/null +++ b/addons/base_import/static/src/css/import.css @@ -0,0 +1,27 @@ +.oe_import dd, +.oe_import .oe_import_grid, +.oe_import .oe_import_error_report, +.oe_import .oe_import_with_file, +.oe_import .oe_import_noheaders { + display: none; +} + +.oe_import.oe_import_preview .oe_import_grid { + display: table; +} +.oe_import.oe_import_error .oe_import_error_report, +.oe_import.oe_import_with_file .oe_import_with_file, +.oe_import.oe_import_noheaders .oe_import_noheaders { + display: block; +} + +.oe_import .oe_import_error_report ul .oe_import_report_error { + background-color: #FFD9DB; +} +.oe_import .oe_import_error_report ul .oe_import_report_warning { + background-color: #FEFFD9; +} + +.oe_import .oe_import_noheaders { + color: #888; +} diff --git a/addons/base_import/static/src/js/import.js b/addons/base_import/static/src/js/import.js index 037a9662b02..3a52ad548ec 100644 --- a/addons/base_import/static/src/js/import.js +++ b/addons/base_import/static/src/js/import.js @@ -39,7 +39,22 @@ openerp.base_import = function (instance) { template: 'ImportView', dialog_title: _lt("Import Data"), events: { - 'change input.oe_import_file': 'file_update' + 'change input.oe_import_file': 'file_update', + 'click input.oe_import_has_header': function (e) { + this.$element.toggleClass( + 'oe_import_noheaders', !e.target.checked); + this.settings_updated(); + }, + 'click a.oe_import_csv': function (e) { + e.preventDefault(); + }, + 'click a.oe_import_export': function (e) { + e.preventDefault(); + }, + 'click dt a': function (e) { + e.preventDefault(); + $(e.target).parent().next().toggle(); + } }, init: function (parent, dataset) { var self = this; @@ -70,21 +85,21 @@ openerp.base_import = function (instance) { // TODO: customizable gangnam style quote: '"', separator: ',', - headers: true, + headers: this.$('input.oe_import_has_header').prop('checked'), }; }, - //- File change section + //- File & settings change section file_update: function (e) { if (!this.$('input.oe_import_file').val()) { return; } this.$element.removeClass('oe_import_preview oe_import_error'); jsonp(this.$element, { url: '/base_import/set_file' - }, this.proxy('file_updated')); + }, this.proxy('settings_updated')); }, - file_updated: function () { - // immediately trigger preview... + settings_updated: function () { + this.$element.addClass('oe_import_with_file'); // TODO: test that write // succeeded? this.Import.call( 'parse_preview', [this.id, this.import_options()]) diff --git a/addons/base_import/static/src/xml/import.xml b/addons/base_import/static/src/xml/import.xml index 483c9a4a3cb..bb4f1d742d5 100644 --- a/addons/base_import/static/src/xml/import.xml +++ b/addons/base_import/static/src/xml/import.xml @@ -4,15 +4,51 @@ - +

Upload your file

+

Select the .CSV + file to import. If you need a sample importable file, you + can use the export + tool to generate one.

+ -
- -
+
+

Map your data to OpenERP

+ + +

If the file contains + the column names, OpenERP can try auto-detecting the + field corresponding to the column. This makes imports + simpler especially when the file has many columns.

+ +
+ + + +

Frequently Asked Questions

+
+
Need to import data from an other application?
+
+

In order to re-create relationships between + different records, you should use the unique + identifier from the original application and + map it to the ID + column in OpenERP. When you + import an other record that links to the first + one, use XXX/ID + to the original unique identifier.

+

The ID + will also be used to update the original + import if you need to re-import modified data + later, it's thus good practice to specify it + whenever possible

+
+
+ -
Date: Tue, 21 Aug 2012 16:25:13 +0530 Subject: [PATCH 042/325] [IMP] required=true on alias_id field and create alias_force_id field. bzr revid: bth@tinyerp.com-20120821105513-lq4am6na04rjqncc --- addons/mail/mail_alias.py | 3 ++- addons/mail/mail_group.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/addons/mail/mail_alias.py b/addons/mail/mail_alias.py index 82b20f39480..ea4c91b2435 100644 --- a/addons/mail/mail_alias.py +++ b/addons/mail/mail_alias.py @@ -54,10 +54,11 @@ class mail_alias(osv.Model): def _get_alias_domain(self, cr, uid, ids, name, args, context=None): ir_config_parameter = self.pool.get("ir.config_parameter") - domain = ir_config_parameter.get_param(cr, uid, "mail.catchall.domain", context=context) + domain = ir_config_parameter.get_param(cr, uid, "mail.catchall.domain", context=context) return dict.fromkeys(ids, domain or "") _columns = { + 'alias_force_id': fields.integer('Alias Force Id'), 'alias_name': fields.char('Alias', required=True, help="The name of the email alias, e.g. 'jobs' " "if you want to catch emails for ",), diff --git a/addons/mail/mail_group.py b/addons/mail/mail_group.py index 6a14fef83aa..39a1707bc8a 100644 --- a/addons/mail/mail_group.py +++ b/addons/mail/mail_group.py @@ -98,7 +98,7 @@ class mail_group(osv.Model): "Use this field anywhere a small image is required."), 'last_month_msg_nbr': fields.function(_get_last_month_msg_nbr, type='integer', string='Messages count for last month'), - 'alias_id': fields.many2one('mail.alias', 'Alias', ondelete="cascade", + 'alias_id': fields.many2one('mail.alias', 'Alias', required=True, ondelete="cascade", help="The email address associated with this group. New emails received will automatically " "create new topics."), } From 10ae5349077fbf938218f3f66eeeb2eccf6a5a24 Mon Sep 17 00:00:00 2001 From: "Bhumi Thakkar (Open ERP)" Date: Tue, 21 Aug 2012 17:11:38 +0530 Subject: [PATCH 043/325] [IMP] Add field section_id. bzr revid: bth@tinyerp.com-20120821114138-qiujc10jud40da6u --- addons/hr_recruitment/hr_recruitment.py | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/hr_recruitment/hr_recruitment.py b/addons/hr_recruitment/hr_recruitment.py index 81a7ae6129e..56110322b1c 100644 --- a/addons/hr_recruitment/hr_recruitment.py +++ b/addons/hr_recruitment/hr_recruitment.py @@ -230,6 +230,7 @@ class hr_applicant(base_stage, osv.Model): 'color': fields.integer('Color Index'), 'emp_id': fields.many2one('hr.employee', 'employee'), 'user_email': fields.related('user_id', 'email', type='char', string='User Email', readonly=True), + 'section_id': fields.integer('Section Id'), } _defaults = { From 44ccdd6a59c0407b5d507f6f170872461a0e8a74 Mon Sep 17 00:00:00 2001 From: "Bhumi Thakkar (Open ERP)" Date: Wed, 22 Aug 2012 15:19:22 +0530 Subject: [PATCH 044/325] [IMP] created field property_ids for procurement.order object. bzr revid: bth@tinyerp.com-20120822094922-u3jad3okwg15688h --- addons/sale/sale.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/addons/sale/sale.py b/addons/sale/sale.py index c525ba04df1..ad066c3d374 100644 --- a/addons/sale/sale.py +++ b/addons/sale/sale.py @@ -1490,4 +1490,10 @@ class mail_message(osv.osv): mail_message() +class procurement_order(osv.osv): + _inherit = "procurement.order" + + _columns = { + 'property_ids': fields.many2many('sale.order', 'sale_order_property_rel', 'procurement_id','order_id', 'Properties'), + } # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From edb6e7e0d32b8b8300a9fa35777baa0279268889 Mon Sep 17 00:00:00 2001 From: "Bhumi Thakkar (Open ERP)" Date: Wed, 22 Aug 2012 16:51:37 +0530 Subject: [PATCH 045/325] [IMP] Replace field name type with message_type. bzr revid: bth@tinyerp.com-20120822112137-u6i2dujnpisk7t1p --- addons/mail/mail_message.py | 16 ++++++++-------- addons/mail/mail_message_view.xml | 18 +++++++++--------- addons/mail/mail_thread.py | 6 +++--- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/addons/mail/mail_message.py b/addons/mail/mail_message.py index 7801a9b42d9..15e9121cee9 100644 --- a/addons/mail/mail_message.py +++ b/addons/mail/mail_message.py @@ -199,9 +199,9 @@ class mail_message(osv.Model): 'nodestroy': True }) return action_data - + _columns = { - 'type': fields.selection([ + 'message_type': fields.selection([ ('email', 'email'), ('comment', 'Comment'), ('notification', 'System notification'), @@ -235,16 +235,16 @@ class mail_message(osv.Model): help="Parent message, used for displaying as threads with hierarchy"), 'child_ids': fields.one2many('mail.message', 'parent_id', 'Child Messages'), } - + _defaults = { - 'type': 'email', + 'message_type': 'email', 'state': 'received', } - + #------------------------------------------------------ # Email api #------------------------------------------------------ - + def init(self, cr): cr.execute("""SELECT indexname FROM pg_indexes WHERE indexname = 'mail_message_model_res_id_idx'""") if not cr.fetchone(): @@ -356,7 +356,7 @@ class mail_message(osv.Model): 'user_id': uid, 'model': model, 'res_id': res_id, - 'type': type, + 'message_type': type, 'body_text': body if content_subtype != 'html' else False, 'body_html': body if content_subtype == 'html' else False, 'email_from': email_from, @@ -414,7 +414,7 @@ class mail_message(osv.Model): if context is None: context = {} if not ids: - filters = ['&', ('state', '=', 'outgoing'), ('type', '=', 'email')] + filters = ['&', ('state', '=', 'outgoing'), ('message_type', '=', 'email')] if 'filters' in context: filters.extend(context['filters']) ids = self.search(cr, uid, filters, context=context) diff --git a/addons/mail/mail_message_view.xml b/addons/mail/mail_message_view.xml index 0aa5261d7e7..614b70820d0 100644 --- a/addons/mail/mail_message_view.xml +++ b/addons/mail/mail_message_view.xml @@ -30,7 +30,7 @@ - + @@ -75,19 +75,19 @@ - + + domain="[('message_type', '=', 'comment')]"/> + domain="[('message_type', '=', 'notification')]"/> + domain="[('message_type', '=', 'email')]"/> - + @@ -205,9 +205,9 @@ - - - + + + diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index 56c7e6b7088..1168a677472 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -440,7 +440,7 @@ class mail_thread(osv.Model): 'body_html': body_html or '', 'parent_id': parent_id, 'date': email_date or fields.datetime.now(), - 'type': type, + 'message_type': type, 'content_subtype': content_subtype, 'state': state, 'message_id': message_id, @@ -491,7 +491,7 @@ class mail_thread(osv.Model): body_text = msg_dict.get('body_text'), body_html= msg_dict.get('body_html'), parent_id = msg_dict.get('parent_id', False), - type = msg_dict.get('type', 'email'), + message_type = msg_dict.get('message_type', 'email'), content_subtype = msg_dict.get('content_subtype'), state = msg_dict.get('state'), partner_ids = msg_dict.get('partner_ids'), @@ -1107,7 +1107,7 @@ class mail_thread(osv.Model): if body_text: body_text += '\n\n----------\nThis email was send automatically by OpenERP, because you have subscribed to a document.' values.update({ - 'type': 'email', + 'message_type': 'email', 'state': 'outgoing', 'email_from': email_from, 'email_to': email_to, From 9eac8aadaf0b2f309f00afa958319428dd6b6064 Mon Sep 17 00:00:00 2001 From: "Bhumi Thakkar (Open ERP)" Date: Wed, 22 Aug 2012 17:00:34 +0530 Subject: [PATCH 046/325] [IMP] Remove property_ids:value from _prepare_order_line_procurement function which is unused and also created field. bzr revid: bth@tinyerp.com-20120822113034-p7rth1ps829bt0qd --- addons/sale/sale.py | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/addons/sale/sale.py b/addons/sale/sale.py index ad066c3d374..d2bb4e145cc 100644 --- a/addons/sale/sale.py +++ b/addons/sale/sale.py @@ -845,8 +845,7 @@ class sale_order(osv.osv): 'procure_method': line.type, 'move_id': move_id, 'company_id': order.company_id.id, - 'note': '\n'.join(line.name.split('\n')[1:]), - 'property_ids': [(6, 0, [x.id for x in line.property_ids])] + 'note': '\n'.join(line.name.split('\n')[1:]) } def _prepare_order_line_move(self, cr, uid, order, line, picking_id, date_planned, context=None): @@ -1490,10 +1489,4 @@ class mail_message(osv.osv): mail_message() -class procurement_order(osv.osv): - _inherit = "procurement.order" - - _columns = { - 'property_ids': fields.many2many('sale.order', 'sale_order_property_rel', 'procurement_id','order_id', 'Properties'), - } # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From ec283ff4ac3abff9ce70f33e11d793024f4d27d1 Mon Sep 17 00:00:00 2001 From: Paramjit Singh Sahota Date: Wed, 22 Aug 2012 18:03:48 +0530 Subject: [PATCH 047/325] [IMP] Given the access rights for the account.journal.cashbox.line in ACCOUNT. bzr revid: psa@tinyerp.com-20120822123348-2gghmwi0k78oopkr --- addons/account/security/ir.model.access.csv | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/account/security/ir.model.access.csv b/addons/account/security/ir.model.access.csv index a5049c0a345..28bedbf65a1 100644 --- a/addons/account/security/ir.model.access.csv +++ b/addons/account/security/ir.model.access.csv @@ -82,6 +82,7 @@ access_account_entries_report_invoice,account.entries.report,model_account_entri access_account_entries_report_employee,account.entries.report employee,model_account_entries_report,base.group_user,1,0,0,0 access_analytic_entries_report_manager,analytic.entries.report,model_analytic_entries_report,account.group_account_manager,1,0,0,0 access_account_cashbox_line,account.cashbox.line,model_account_cashbox_line,account.group_account_user,1,1,1,1 +access_account_journal_cashbox_line,account.journal.cashbox.line,model_account_journal_cashbox_line,account.group_account_user,1,1,1,0 access_account_journal_view_invoice,account.journal.view invoice,model_account_journal_view,account.group_account_invoice,1,1,1,1 access_account_journal_column_invoice,account.journal.column invoice,model_account_journal_column,account.group_account_invoice,1,1,1,1 access_account_invoice_tax_accountant,account.invoice.tax accountant,model_account_invoice_tax,account.group_account_user,1,0,0,0 From 189a5ef346add8487e0ef3738b150bf1148e82c0 Mon Sep 17 00:00:00 2001 From: "Bhumi Thakkar (Open ERP)" Date: Wed, 22 Aug 2012 18:45:49 +0530 Subject: [PATCH 048/325] [IMP] report_type function field is be stored in table. bzr revid: bth@tinyerp.com-20120822131549-hkmnezfia8g03zm3 --- addons/account/account.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/account/account.py b/addons/account/account.py index fa30b20f2ca..7da0753be8f 100644 --- a/addons/account/account.py +++ b/addons/account/account.py @@ -184,7 +184,7 @@ class account_account_type(osv.osv): ('income', _('Profit & Loss (Income account)')), ('expense', _('Profit & Loss (Expense account)')), ('asset', _('Balance Sheet (Asset account)')), - ('liability', _('Balance Sheet (Liability account)'))], help="This field is used to generate legal reports: profit and loss, balance sheet.", required=True), + ('liability', _('Balance Sheet (Liability account)'))], store=True, help="This field is used to generate legal reports: profit and loss, balance sheet.", required=True), 'note': fields.text('Description'), } _defaults = { From d397e599f546329ed659c4355f893e9a240fbee3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20van=20der=20Essen?= Date: Wed, 22 Aug 2012 15:55:46 +0200 Subject: [PATCH 049/325] [BRANCH] locadis: first commit : start of the branch bzr revid: fva@openerp.com-20120822135546-kwbo893th1pv2vbs --- addons/locadis/__init__.py | 25 + addons/locadis/__openerp__.py | 56 ++ addons/locadis/point_of_sale.py | 1303 +++++++++++++++++++++++++ addons/locadis/static/src/css/pos.css | 4 + addons/locadis/static/src/js/hello.js | 12 + addons/locadis/static/src/js/main.js | 24 + addons/locadis/static/src/xml/pos.xml | 15 + 7 files changed, 1439 insertions(+) create mode 100644 addons/locadis/__init__.py create mode 100644 addons/locadis/__openerp__.py create mode 100644 addons/locadis/point_of_sale.py create mode 100644 addons/locadis/static/src/css/pos.css create mode 100644 addons/locadis/static/src/js/hello.js create mode 100644 addons/locadis/static/src/js/main.js create mode 100644 addons/locadis/static/src/xml/pos.xml diff --git a/addons/locadis/__init__.py b/addons/locadis/__init__.py new file mode 100644 index 00000000000..e57b362135b --- /dev/null +++ b/addons/locadis/__init__.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# 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 . +# +############################################################################## + +#import point_of_sale + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + diff --git a/addons/locadis/__openerp__.py b/addons/locadis/__openerp__.py new file mode 100644 index 00000000000..056b8da7fcf --- /dev/null +++ b/addons/locadis/__openerp__.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# 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 . +# +############################################################################## + + +{ + 'name': 'Locadis Point Of Sale', + 'version': '1.0.1', + 'category': 'Point Of Sale', + "sequence": 6, + "summary": "Point of sale extensions for Locadis", + 'description': """ +FIXME: product description + """, + 'author': 'OpenERP SA', + 'images': ['images/cash_registers.jpeg', 'images/pos_analysis.jpeg','images/register_analysis.jpeg','images/sale_order_pos.jpeg','images/product_pos.jpeg'], + 'depends': ['point_of_sale'], + 'init_xml': [], + 'update_xml': [ + ], + 'demo_xml': [ + ], + 'test': [ + ], + 'installable': True, + 'application': True, + # Web client + 'js': [ + 'static/src/js/main.js' + ], + 'css': [ + 'static/src/css/pos.css' + ], + 'qweb': [ + 'static/src/xml/pos.xml' + ], + 'auto_install': False, +} +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/locadis/point_of_sale.py b/addons/locadis/point_of_sale.py new file mode 100644 index 00000000000..f4d32985688 --- /dev/null +++ b/addons/locadis/point_of_sale.py @@ -0,0 +1,1303 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# 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 . +# +############################################################################## + +import pdb +import openerp +import addons +import openerp.addons.product.product + +import time +from datetime import datetime +from dateutil.relativedelta import relativedelta +import logging + +import netsvc +from osv import fields, osv +import tools +from tools.translate import _ +from decimal import Decimal +import decimal_precision as dp + +_logger = logging.getLogger(__name__) + +class pos_config(osv.osv): + _name = 'pos.config' + + POS_CONFIG_STATE = [ + ('active', 'Active'), + ('inactive', 'Inactive'), + ('deprecated', 'Deprecated') + ] + + _columns = { + 'name' : fields.char('Point of Sale Name', size=32, select=1, + required=True, help="An internal identification of the point of sale"), + 'journal_ids' : fields.many2many('account.journal', 'pos_config_journal_rel', + 'pos_config_id', 'journal_id', 'Available Payment Methods', + domain="[('journal_user', '=', True )]",), + 'shop_id' : fields.many2one('sale.shop', 'Shop', + required=True), + 'journal_id' : fields.many2one('account.journal', 'Sale Journal', + domain=[('type', '=', 'sale')], + help="Accounting journal used to post sales entries."), + 'iface_self_checkout' : fields.boolean('Self Checkout Mode', + help="Check this if this point of sale should open by default in a self checkout mode. If unchecked, OpenERP uses the normal cashier mode by default."), + 'iface_cashdrawer' : fields.boolean('Cashdrawer Interface'), + 'iface_payment_terminal' : fields.boolean('Payment Terminal Interface'), + 'iface_electronic_scale' : fields.boolean('Electronic Scale Interface'), + 'iface_vkeyboard' : fields.boolean('Virtual KeyBoard Interface'), + 'iface_print_via_proxy' : fields.boolean('Print via Proxy'), + + 'state' : fields.selection(POS_CONFIG_STATE, 'State', required=True, readonly=True), + 'sequence_id' : fields.many2one('ir.sequence', 'Order IDs Sequence', readonly=True, + help="This sequence is automatically created by OpenERP but you can change it "\ + "to customize the reference numbers of your orders."), + 'session_ids': fields.one2many('pos.session', 'config_id', 'Sessions'), + 'group_by' : fields.boolean('Group Journal Items', help="Check this if you want to group the Journal Items by Product while closing a Session"), + } + + def name_get(self, cr, uid, ids, context=None): + result = [] + states = { + 'opening_control': _('Opening Control'), + 'opened': _('In Progress'), + 'closing_control': _('Closing Control'), + 'closed': _('Closed & Posted'), + } + for record in self.browse(cr, uid, ids, context=context): + if (not record.session_ids) or (record.session_ids[0].state=='closed'): + result.append((record.id, record.name+' ('+_('not used')+')')) + continue + session = record.session_ids[0] + result.append((record.id, record.name + ' ('+session.user_id.name+')')) #, '+states[session.state]+')')) + return result + + + def _default_payment_journal(self, cr, uid, context=None): + res = self.pool.get('account.journal').search(cr, uid, [('type', 'in', ('bank','cash'))], limit=2) + return res or [] + + def _default_sale_journal(self, cr, uid, context=None): + res = self.pool.get('account.journal').search(cr, uid, [('type', '=', 'sale')], limit=1) + return res and res[0] or False + + def _default_shop(self, cr, uid, context=None): + res = self.pool.get('sale.shop').search(cr, uid, []) + return res and res[0] or False + + _defaults = { + 'state' : POS_CONFIG_STATE[0][0], + 'shop_id': _default_shop, + 'journal_id': _default_sale_journal, + 'journal_ids': _default_payment_journal, + 'group_by' : True, + } + + def set_active(self, cr, uid, ids, context=None): + return self.write(cr, uid, ids, {'state' : 'active'}, context=context) + + def set_inactive(self, cr, uid, ids, context=None): + return self.write(cr, uid, ids, {'state' : 'inactive'}, context=context) + + def set_deprecate(self, cr, uid, ids, context=None): + return self.write(cr, uid, ids, {'state' : 'deprecated'}, context=context) + + def create(self, cr, uid, values, context=None): + proxy = self.pool.get('ir.sequence') + sequence_values = dict( + name='PoS %s' % values['name'], + padding=5, + prefix="%s/" % values['name'], + ) + sequence_id = proxy.create(cr, uid, sequence_values, context=context) + values['sequence_id'] = sequence_id + return super(pos_config, self).create(cr, uid, values, context=context) + + def unlink(self, cr, uid, ids, context=None): + for obj in self.browse(cr, uid, ids, context=context): + if obj.sequence_id: + obj.sequence_id.unlink() + return super(pos_config, self).unlink(cr, uid, ids, context=context) + +class pos_session(osv.osv): + _name = 'pos.session' + _order = 'id desc' + + POS_SESSION_STATE = [ + ('opening_control', 'Opening Control'), # Signal open + ('opened', 'In Progress'), # Signal closing + ('closing_control', 'Closing Control'), # Signal close + ('closed', 'Closed & Posted'), + ] + + def _compute_cash_journal_id(self, cr, uid, ids, fieldnames, args, context=None): + result = dict.fromkeys(ids, False) + for record in self.browse(cr, uid, ids, context=context): + for st in record.statement_ids: + if st.journal_id.type == 'cash': + result[record.id] = st.journal_id.id + break + return result + + def _compute_cash_register_id(self, cr, uid, ids, fieldnames, args, context=None): + result = dict.fromkeys(ids, False) + for record in self.browse(cr, uid, ids, context=context): + for st in record.statement_ids: + if st.journal_id.type == 'cash': + result[record.id] = st.id + break + return result + + def _compute_controls(self, cr, uid, ids, fieldnames, args, context=None): + result = {} + + for record in self.browse(cr, uid, ids, context=context): + has_opening_control = False + has_closing_control = False + + for journal in record.config_id.journal_ids: + if journal.opening_control == True: + has_opening_control = True + if journal.closing_control == True: + has_closing_control = True + + if has_opening_control and has_closing_control: + break + + values = { + 'has_opening_control': has_opening_control, + 'has_closing_control': has_closing_control, + } + result[record.id] = values + + return result + + _columns = { + 'config_id' : fields.many2one('pos.config', 'Point of Sale', + help="The physical point of sale you will use.", + required=True, + select=1, + domain="[('state', '=', 'active')]", + ), + + 'name' : fields.char('Session ID', size=32, required=True, readonly=True), + 'user_id' : fields.many2one('res.users', 'Responsible', + required=True, + select=1, + readonly=True, + states={'opening_control' : [('readonly', False)]} + ), + 'start_at' : fields.datetime('Opening Date', readonly=True), + 'stop_at' : fields.datetime('Closing Date', readonly=True), + + 'state' : fields.selection(POS_SESSION_STATE, 'State', + required=True, readonly=True, + select=1), + + 'cash_journal_id' : fields.function(_compute_cash_journal_id, method=True, + type='many2one', relation='account.journal', + string='Cash Journal', store=True), + 'cash_register_id' : fields.function(_compute_cash_register_id, method=True, + type='many2one', relation='account.bank.statement', + string='Cash Register', store=True), + + 'opening_details_ids' : fields.related('cash_register_id', 'opening_details_ids', + type='one2many', relation='account.cashbox.line', + string='Opening Cash Control'), + 'details_ids' : fields.related('cash_register_id', 'details_ids', + type='one2many', relation='account.cashbox.line', + string='Cash Control'), + + 'cash_register_balance_end_real' : fields.related('cash_register_id', 'balance_end_real', + type='float', + digits_compute=dp.get_precision('Account'), + string="Ending Balance", + help="Computed using the cash control lines", + readonly=True), + 'cash_register_balance_start' : fields.related('cash_register_id', 'balance_start', + type='float', + digits_compute=dp.get_precision('Account'), + string="Starting Balance", + help="Computed using the cash control at the opening.", + readonly=True), + 'cash_register_total_entry_encoding' : fields.related('cash_register_id', 'total_entry_encoding', + string='Total Cash Transaction', + readonly=True), + 'cash_register_balance_end' : fields.related('cash_register_id', 'balance_end', + type='float', + digits_compute=dp.get_precision('Account'), + string="Computed Balance", + help="Computed with the initial cash control and the sum of all payments.", + readonly=True), + 'cash_register_difference' : fields.related('cash_register_id', 'difference', + type='float', + string='Difference', + help="Difference between the counted cash control at the closing and the computed balance.", + readonly=True), + + 'journal_ids' : fields.related('config_id', 'journal_ids', + type='many2many', + readonly=True, + relation='account.journal', + string='Available Payment Methods'), + 'order_ids' : fields.one2many('pos.order', 'session_id', 'Orders'), + + 'statement_ids' : fields.one2many('account.bank.statement', 'pos_session_id', 'Bank Statement', readonly=True), + 'has_opening_control' : fields.function(_compute_controls, string='Has Opening Control', multi='control', type='boolean'), + 'has_closing_control' : fields.function(_compute_controls, string='Has Closing Control', multi='control', type='boolean'), + } + + _defaults = { + 'name' : '/', + 'user_id' : lambda obj, cr, uid, context: uid, + 'state' : 'opening_control', + } + + _sql_constraints = [ + ('uniq_name', 'unique(name)', "The name of this POS Session must be unique !"), + ] + + def _check_unicity(self, cr, uid, ids, context=None): + for session in self.browse(cr, uid, ids, context=None): + # open if there is no session in 'opening_control', 'opened', 'closing_control' for one user + domain = [ + ('state', 'not in', ('closed','closing_control')), + ('user_id', '=', uid) + ] + count = self.search_count(cr, uid, domain, context=context) + if count>1: + return False + return True + + def _check_pos_config(self, cr, uid, ids, context=None): + for session in self.browse(cr, uid, ids, context=None): + domain = [ + ('state', '!=', 'closed'), + ('config_id', '=', session.config_id.id) + ] + count = self.search_count(cr, uid, domain, context=context) + if count>1: + return False + return True + + _constraints = [ + (_check_unicity, "You cannot create two active sessions with the same responsible!", ['user_id', 'state']), + (_check_pos_config, "You cannot create two active sessions related to the same point of sale!", ['config_id']), + ] + + def create(self, cr, uid, values, context=None): + config_id = values.get('config_id', False) or False + if config_id: + # journal_id is not required on the pos_config because it does not + # exists at the installation. If nothing is configured at the + # installation we do the minimal configuration. Impossible to do in + # the .xml files as the CoA is not yet installed. + jobj = self.pool.get('pos.config') + pos_config = jobj.browse(cr, uid, config_id, context=context) + if not pos_config.journal_id: + jid = jobj.default_get(cr, uid, ['journal_id'], context=context)['journal_id'] + if jid: + jobj.write(cr, uid, [pos_config.id], {'journal_id': jid}, context=context) + else: + raise osv.except_osv( _('error!'), + _("Unable to open the session. You have to assign a sale journal to your point of sale.")) + + # define some cash journal if no payment method exists + if not pos_config.journal_ids: + cashids = self.pool.get('account.journal').search(cr, uid, [('journal_user','=',True)], context=context) + if not cashids: + cashids = self.pool.get('account.journal').search(cr, uid, [('type','=','cash')], context=context) + self.pool.get('account.journal').write(cr, uid, cashids, {'journal_user': True}) + jobj.write(cr, uid, [pos_config.id], {'journal_ids': [(6,0, cashids)]}) + + + pos_config = jobj.browse(cr, uid, config_id, context=context) + bank_statement_ids = [] + for journal in pos_config.journal_ids: + bank_values = { + 'journal_id' : journal.id, + 'user_id' : uid, + } + statement_id = self.pool.get('account.bank.statement').create(cr, uid, bank_values, context=context) + bank_statement_ids.append(statement_id) + + values.update({ + 'name' : pos_config.sequence_id._next(), + 'statement_ids' : [(6, 0, bank_statement_ids)], + 'config_id': config_id + }) + + return super(pos_session, self).create(cr, uid, values, context=context) + + def unlink(self, cr, uid, ids, context=None): + for obj in self.browse(cr, uid, ids, context=context): + for statement in obj.statement_ids: + statement.unlink(context=context) + return True + + def wkf_action_open(self, cr, uid, ids, context=None): + # second browse because we need to refetch the data from the DB for cash_register_id + for record in self.browse(cr, uid, ids, context=context): + values = {} + if not record.start_at: + values['start_at'] = time.strftime('%Y-%m-%d %H:%M:%S') + values['state'] = 'opened' + record.write(values, context=context) + for st in record.statement_ids: + st.button_open(context=context) + + return self.open_frontend_cb(cr, uid, ids, context=context) + + def wkf_action_opening_control(self, cr, uid, ids, context=None): + return self.write(cr, uid, ids, {'state' : 'opening_control'}, context=context) + + def wkf_action_closing_control(self, cr, uid, ids, context=None): + for session in self.browse(cr, uid, ids, context=context): + for statement in session.statement_ids: + if statement.id <> session.cash_register_id.id: + if statement.balance_end<>statement.balance_end_real: + self.pool.get('account.bank.statement').write(cr, uid, + [statement.id], {'balance_end_real': statement.balance_end}) + return self.write(cr, uid, ids, {'state' : 'closing_control', 'stop_at' : time.strftime('%Y-%m-%d %H:%M:%S')}, context=context) + + def wkf_action_close(self, cr, uid, ids, context=None): + # Close CashBox + bsl = self.pool.get('account.bank.statement.line') + for record in self.browse(cr, uid, ids, context=context): + for st in record.statement_ids: + if abs(st.difference) > st.journal_id.amount_authorized_diff: + # The pos manager can close statements with maximums. + if not self.pool.get('ir.model.access').check_groups(cr, uid, "point_of_sale.group_pos_manager"): + raise osv.except_osv( _('Error!'), + _("Your ending balance is too different from the theorical cash closing (%.2f), the maximum allowed is: %.2f. You can contact your manager to force it.") % (st.difference, st.journal_id.amount_authorized_diff)) + if st.difference: + if st.difference > 0.0: + name= _('Point of Sale Profit') + account_id = st.journal_id.profit_account_id.id + else: + account_id = st.journal_id.loss_account_id.id + name= _('Point of Sale Loss') + if not account_id: + raise osv.except_osv( _('Error!'), + _("Please set your profit and loss accounts on your payment method '%s'. This will allow OpenERP to post the difference of %.2f in your ending balance. To close this session, you can update the 'Closing Cash Control' to avoid any difference.") % (st.journal_id.name,st.difference)) + bsl.create(cr, uid, { + 'statement_id': st.id, + 'amount': st.difference, + 'ref': record.name, + 'name': name, + 'account_id': account_id + }, context=context) + + getattr(st, 'button_confirm_%s' % st.journal_id.type)(context=context) + self._confirm_orders(cr, uid, ids, context=context) + self.write(cr, uid, ids, {'state' : 'closed'}, context=context) + + obj = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'point_of_sale', 'menu_point_root')[1] + return { + 'type' : 'ir.actions.client', + 'name' : 'Point of Sale Menu', + 'tag' : 'reload', + 'params' : {'menu_id': obj}, + } + + def _confirm_orders(self, cr, uid, ids, context=None): + wf_service = netsvc.LocalService("workflow") + + for session in self.browse(cr, uid, ids, context=context): + order_ids = [order.id for order in session.order_ids if order.state == 'paid'] + + move_id = self.pool.get('account.move').create(cr, uid, {'ref' : session.name, 'journal_id' : session.config_id.journal_id.id, }, context=context) + + self.pool.get('pos.order')._create_account_move_line(cr, uid, order_ids, session, move_id, context=context) + + for order in session.order_ids: + if order.state != 'paid': + raise osv.except_osv( + _('Error!'), + _("You cannot confirm all orders of this session, because they have not the 'paid' status")) + else: + wf_service.trg_validate(uid, 'pos.order', order.id, 'done', cr) + + return True + + def open_frontend_cb(self, cr, uid, ids, context=None): + if not context: + context = {} + if not ids: + return {} + context.update({'session_id' : ids[0]}) + return { + 'type' : 'ir.actions.client', + 'name' : 'Start Point Of Sale', + 'tag' : 'pos.ui', + 'context' : context, + } + +class pos_order(osv.osv): + _name = "pos.order" + _description = "Point of Sale" + _order = "id desc" + + def create_from_ui(self, cr, uid, orders, context=None): + #_logger.info("orders: %r", orders) + order_ids = [] + for tmp_order in orders: + order = tmp_order['data'] + order_id = self.create(cr, uid, { + 'name': order['name'], + 'user_id': order['user_id'] or False, + 'session_id': order['pos_session_id'], + 'lines': order['lines'] + }, context) + + for payments in order['statement_ids']: + payment = payments[2] + self.add_payment(cr, uid, order_id, { + 'amount': payment['amount'] or 0.0, + 'payment_date': payment['name'], + 'payment_name': payment.get('note', False), + 'journal': payment['journal_id'] + }, context=context) + + if order['amount_return']: + session = self.pool.get('pos.session').browse(cr, uid, order['pos_session_id'], context=context) + self.add_payment(cr, uid, order_id, { + 'amount': -order['amount_return'], + 'payment_date': time.strftime('%Y-%m-%d %H:%M:%S'), + 'payment_name': _('return'), + 'journal': session.cash_journal_id.id + }, context=context) + order_ids.append(order_id) + wf_service = netsvc.LocalService("workflow") + wf_service.trg_validate(uid, 'pos.order', order_id, 'paid', cr) + return order_ids + + def unlink(self, cr, uid, ids, context=None): + for rec in self.browse(cr, uid, ids, context=context): + if rec.state not in ('draft','cancel'): + raise osv.except_osv(_('Unable to Delete !'), _('In order to delete a sale, it must be new or cancelled.')) + return super(pos_order, self).unlink(cr, uid, ids, context=context) + + def onchange_partner_id(self, cr, uid, ids, part=False, context=None): + if not part: + return {'value': {}} + pricelist = self.pool.get('res.partner').browse(cr, uid, part, context=context).property_product_pricelist.id + return {'value': {'pricelist_id': pricelist}} + + def _amount_all(self, cr, uid, ids, name, args, context=None): + tax_obj = self.pool.get('account.tax') + cur_obj = self.pool.get('res.currency') + res = {} + for order in self.browse(cr, uid, ids, context=context): + res[order.id] = { + 'amount_paid': 0.0, + 'amount_return':0.0, + 'amount_tax':0.0, + } + val1 = val2 = 0.0 + cur = order.pricelist_id.currency_id + for payment in order.statement_ids: + res[order.id]['amount_paid'] += payment.amount + res[order.id]['amount_return'] += (payment.amount < 0 and payment.amount or 0) + for line in order.lines: + val1 += line.price_subtotal_incl + val2 += line.price_subtotal + res[order.id]['amount_tax'] = cur_obj.round(cr, uid, cur, val1-val2) + res[order.id]['amount_total'] = cur_obj.round(cr, uid, cur, val1) + return res + + def copy(self, cr, uid, id, default=None, context=None): + if not default: + default = {} + d = { + 'state': 'draft', + 'invoice_id': False, + 'account_move': False, + 'picking_id': False, + 'statement_ids': [], + 'nb_print': 0, + 'name': self.pool.get('ir.sequence').get(cr, uid, 'pos.order'), + } + d.update(default) + return super(pos_order, self).copy(cr, uid, id, d, context=context) + + _columns = { + 'name': fields.char('Order Ref', size=64, required=True, readonly=True), + 'company_id':fields.many2one('res.company', 'Company', required=True, readonly=True), + 'shop_id': fields.related('session_id', 'config_id', 'shop_id', relation='sale.shop', type='many2one', string='Shop', store=True, readonly=True), + 'date_order': fields.datetime('Order Date', readonly=True, select=True), + 'user_id': fields.many2one('res.users', 'Salesman', help="Person who uses the the cash register. It can be a reliever, a student or an interim employee."), + 'amount_tax': fields.function(_amount_all, string='Taxes', digits_compute=dp.get_precision('Point Of Sale'), multi='all'), + 'amount_total': fields.function(_amount_all, string='Total', multi='all'), + 'amount_paid': fields.function(_amount_all, string='Paid', states={'draft': [('readonly', False)]}, readonly=True, digits_compute=dp.get_precision('Point Of Sale'), multi='all'), + 'amount_return': fields.function(_amount_all, 'Returned', digits_compute=dp.get_precision('Point Of Sale'), multi='all'), + 'lines': fields.one2many('pos.order.line', 'order_id', 'Order Lines', states={'draft': [('readonly', False)]}, readonly=True), + 'statement_ids': fields.one2many('account.bank.statement.line', 'pos_statement_id', 'Payments', states={'draft': [('readonly', False)]}, readonly=True), + 'pricelist_id': fields.many2one('product.pricelist', 'Pricelist', required=True, states={'draft': [('readonly', False)]}, readonly=True), + 'partner_id': fields.many2one('res.partner', 'Customer', change_default=True, select=1, states={'draft': [('readonly', False)], 'paid': [('readonly', False)]}), + + 'session_id' : fields.many2one('pos.session', 'Session', + #required=True, + select=1, + domain="[('state', '=', 'opened')]", + states={'draft' : [('readonly', False)]}, + readonly=True), + + 'state': fields.selection([('draft', 'New'), + ('cancel', 'Cancelled'), + ('paid', 'Paid'), + ('done', 'Posted'), + ('invoiced', 'Invoiced')], + 'Status', readonly=True), + + 'invoice_id': fields.many2one('account.invoice', 'Invoice'), + 'account_move': fields.many2one('account.move', 'Journal Entry', readonly=True), + 'picking_id': fields.many2one('stock.picking', 'Picking', readonly=True), + 'note': fields.text('Internal Notes'), + 'nb_print': fields.integer('Number of Print', readonly=True), + + 'sale_journal': fields.related('session_id', 'config_id', 'journal_id', relation='account.journal', type='many2one', string='Sale Journal', store=True, readonly=True), + } + + def _default_session(self, cr, uid, context=None): + so = self.pool.get('pos.session') + session_ids = so.search(cr, uid, [('state','=', 'opened'), ('user_id','=',uid)], context=context) + return session_ids and session_ids[0] or False + + def _default_pricelist(self, cr, uid, context=None): + res = self.pool.get('sale.shop').search(cr, uid, [], context=context) + if res: + shop = self.pool.get('sale.shop').browse(cr, uid, res[0], context=context) + return shop.pricelist_id and shop.pricelist_id.id or False + return False + + _defaults = { + 'user_id': lambda self, cr, uid, context: uid, + 'state': 'draft', + 'name': '/', + 'date_order': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'), + 'nb_print': 0, + 'session_id': _default_session, + 'company_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id, + 'pricelist_id': _default_pricelist, + } + + def create(self, cr, uid, values, context=None): + values['name'] = self.pool.get('ir.sequence').get(cr, uid, 'pos.order') + return super(pos_order, self).create(cr, uid, values, context=context) + + def test_paid(self, cr, uid, ids, context=None): + """A Point of Sale is paid when the sum + @return: True + """ + for order in self.browse(cr, uid, ids, context=context): + if order.lines and not order.amount_total: + return True + if (not order.lines) or (not order.statement_ids) or \ + (abs(order.amount_total-order.amount_paid) > 0.00001): + return False + return True + + def create_picking(self, cr, uid, ids, context=None): + """Create a picking for each order and validate it.""" + picking_obj = self.pool.get('stock.picking') + partner_obj = self.pool.get('res.partner') + move_obj = self.pool.get('stock.move') + + for order in self.browse(cr, uid, ids, context=context): + if not order.state=='draft': + continue + addr = order.partner_id and partner_obj.address_get(cr, uid, [order.partner_id.id], ['delivery']) or {} + picking_id = picking_obj.create(cr, uid, { + 'origin': order.name, + 'partner_id': addr.get('delivery',False), + 'type': 'out', + 'company_id': order.company_id.id, + 'move_type': 'direct', + 'note': order.note or "", + 'invoice_state': 'none', + 'auto_picking': True, + }, context=context) + self.write(cr, uid, [order.id], {'picking_id': picking_id}, context=context) + location_id = order.shop_id.warehouse_id.lot_stock_id.id + output_id = order.shop_id.warehouse_id.lot_output_id.id + + for line in order.lines: + if line.product_id and line.product_id.type == 'service': + continue + if line.qty < 0: + location_id, output_id = output_id, location_id + + move_obj.create(cr, uid, { + 'name': line.name, + 'product_uom': line.product_id.uom_id.id, + 'product_uos': line.product_id.uom_id.id, + 'picking_id': picking_id, + 'product_id': line.product_id.id, + 'product_uos_qty': abs(line.qty), + 'product_qty': abs(line.qty), + 'tracking_id': False, + 'state': 'draft', + 'location_id': location_id, + 'location_dest_id': output_id, + }, context=context) + if line.qty < 0: + location_id, output_id = output_id, location_id + + wf_service = netsvc.LocalService("workflow") + wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr) + picking_obj.force_assign(cr, uid, [picking_id], context) + return True + + def cancel_order(self, cr, uid, ids, context=None): + """ Changes order state to cancel + @return: True + """ + stock_picking_obj = self.pool.get('stock.picking') + for order in self.browse(cr, uid, ids, context=context): + wf_service.trg_validate(uid, 'stock.picking', order.picking_id.id, 'button_cancel', cr) + if stock_picking_obj.browse(cr, uid, order.picking_id.id, context=context).state <> 'cancel': + raise osv.except_osv(_('Error!'), _('Unable to cancel the picking.')) + self.write(cr, uid, ids, {'state': 'cancel'}, context=context) + return True + + def add_payment(self, cr, uid, order_id, data, context=None): + """Create a new payment for the order""" + if not context: + context = {} + statement_obj = self.pool.get('account.bank.statement') + statement_line_obj = self.pool.get('account.bank.statement.line') + prod_obj = self.pool.get('product.product') + property_obj = self.pool.get('ir.property') + curr_c = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id + curr_company = curr_c.id + order = self.browse(cr, uid, order_id, context=context) + args = { + 'amount': data['amount'], + } + if 'payment_date' in data: + args['date'] = data['payment_date'] + args['name'] = order.name + if data.get('payment_name', False): + args['name'] = args['name'] + ': ' + data['payment_name'] + account_def = property_obj.get(cr, uid, 'property_account_receivable', 'res.partner', context=context) + args['account_id'] = (order.partner_id and order.partner_id.property_account_receivable \ + and order.partner_id.property_account_receivable.id) or (account_def and account_def.id) or False + args['partner_id'] = order.partner_id and order.partner_id.id or None + + if not args['account_id']: + if not args['partner_id']: + msg = _('There is no receivable account defined to make payment.') + else: + msg = _('There is no receivable account defined to make payment for the partner: "%s" (id:%d).') % (order.partner_id.name, order.partner_id.id,) + raise osv.except_osv(_('Configuration Error!'), msg) + + context.pop('pos_session_id', False) + + try: + journal_id = long(data['journal']) + except Exception: + journal_id = False + + statement_id = False + for statement in order.session_id.statement_ids: + if statement.journal_id.id == journal_id: + statement_id = statement.id + break + + if not statement_id: + raise osv.except_osv(_('Error!'), _('You have to open at least one cashbox.')) + + args.update({ + 'statement_id' : statement_id, + 'pos_statement_id' : order_id, + 'journal_id' : journal_id, + 'type' : 'customer', + 'ref' : order.name, + }) + + statement_line_obj.create(cr, uid, args, context=context) + + wf_service = netsvc.LocalService("workflow") + wf_service.trg_validate(uid, 'pos.order', order_id, 'paid', cr) + wf_service.trg_write(uid, 'pos.order', order_id, cr) + + return statement_id + + def refund(self, cr, uid, ids, context=None): + """Create a copy of order for refund order""" + clone_list = [] + line_obj = self.pool.get('pos.order.line') + for order in self.browse(cr, uid, ids, context=context): + clone_id = self.copy(cr, uid, order.id, { + 'name': order.name + ' REFUND', + }, context=context) + clone_list.append(clone_id) + + for clone in self.browse(cr, uid, clone_list, context=context): + for order_line in clone.lines: + line_obj.write(cr, uid, [order_line.id], { + 'qty': -order_line.qty + }, context=context) + + new_order = ','.join(map(str,clone_list)) + abs = { + #'domain': "[('id', 'in', ["+new_order+"])]", + 'name': _('Return Products'), + 'view_type': 'form', + 'view_mode': 'form', + 'res_model': 'pos.order', + 'res_id':clone_list[0], + 'view_id': False, + 'context':context, + 'type': 'ir.actions.act_window', + 'nodestroy': True, + 'target': 'current', + } + return abs + + def action_invoice_state(self, cr, uid, ids, context=None): + return self.write(cr, uid, ids, {'state':'invoiced'}, context=context) + + def action_invoice(self, cr, uid, ids, context=None): + wf_service = netsvc.LocalService("workflow") + inv_ref = self.pool.get('account.invoice') + inv_line_ref = self.pool.get('account.invoice.line') + product_obj = self.pool.get('product.product') + inv_ids = [] + + for order in self.pool.get('pos.order').browse(cr, uid, ids, context=context): + if order.invoice_id: + inv_ids.append(order.invoice_id.id) + continue + + if not order.partner_id: + raise osv.except_osv(_('Error!'), _('Please provide a partner for the sale.')) + + acc = order.partner_id.property_account_receivable.id + inv = { + 'name': order.name, + 'origin': order.name, + 'account_id': acc, + 'journal_id': order.sale_journal.id or None, + 'type': 'out_invoice', + 'reference': order.name, + 'partner_id': order.partner_id.id, + 'comment': order.note or '', + 'currency_id': order.pricelist_id.currency_id.id, # considering partner's sale pricelist's currency + } + inv.update(inv_ref.onchange_partner_id(cr, uid, [], 'out_invoice', order.partner_id.id)['value']) + if not inv.get('account_id', None): + inv['account_id'] = acc + inv_id = inv_ref.create(cr, uid, inv, context=context) + + self.write(cr, uid, [order.id], {'invoice_id': inv_id, 'state': 'invoiced'}, context=context) + inv_ids.append(inv_id) + for line in order.lines: + inv_line = { + 'invoice_id': inv_id, + 'product_id': line.product_id.id, + 'quantity': line.qty, + } + inv_name = product_obj.name_get(cr, uid, [line.product_id.id], context=context)[0][1] + inv_line.update(inv_line_ref.product_id_change(cr, uid, [], + line.product_id.id, + line.product_id.uom_id.id, + line.qty, partner_id = order.partner_id.id, + fposition_id=order.partner_id.property_account_position.id)['value']) + if line.product_id.description_sale: + inv_line['note'] = line.product_id.description_sale + inv_line['price_unit'] = line.price_unit + inv_line['discount'] = line.discount + inv_line['name'] = inv_name + inv_line['invoice_line_tax_id'] = ('invoice_line_tax_id' in inv_line)\ + and [(6, 0, inv_line['invoice_line_tax_id'])] or [] + inv_line_ref.create(cr, uid, inv_line, context=context) + inv_ref.button_reset_taxes(cr, uid, [inv_id], context=context) + wf_service.trg_validate(uid, 'pos.order', order.id, 'invoice', cr) + + if not inv_ids: return {} + + mod_obj = self.pool.get('ir.model.data') + res = mod_obj.get_object_reference(cr, uid, 'account', 'invoice_form') + res_id = res and res[1] or False + return { + 'name': _('Customer Invoice'), + 'view_type': 'form', + 'view_mode': 'form', + 'view_id': [res_id], + 'res_model': 'account.invoice', + 'context': "{'type':'out_invoice'}", + 'type': 'ir.actions.act_window', + 'nodestroy': True, + 'target': 'current', + 'res_id': inv_ids and inv_ids[0] or False, + } + + def create_account_move(self, cr, uid, ids, context=None): + return self._create_account_move_line(cr, uid, ids, None, None, context=context) + + def _create_account_move_line(self, cr, uid, ids, session=None, move_id=None, context=None): + # Tricky, via the workflow, we only have one id in the ids variable + """Create a account move line of order grouped by products or not.""" + account_move_obj = self.pool.get('account.move') + account_move_line_obj = self.pool.get('account.move.line') + account_period_obj = self.pool.get('account.period') + account_tax_obj = self.pool.get('account.tax') + user_proxy = self.pool.get('res.users') + property_obj = self.pool.get('ir.property') + + period = account_period_obj.find(cr, uid, context=context)[0] + + #session_ids = set(order.session_id for order in self.browse(cr, uid, ids, context=context)) + + if session and not all(session.id == order.session_id.id for order in self.browse(cr, uid, ids, context=context)): + raise osv.except_osv(_('Error!'), _('Selected orders do not have the same session!')) + + current_company = user_proxy.browse(cr, uid, uid, context=context).company_id + + grouped_data = {} + have_to_group_by = session and session.config_id.group_by or False + + def compute_tax(amount, tax, line): + if amount > 0: + tax_code_id = tax['base_code_id'] + tax_amount = line.price_subtotal * tax['base_sign'] + else: + tax_code_id = tax['ref_base_code_id'] + tax_amount = line.price_subtotal * tax['ref_base_sign'] + + return (tax_code_id, tax_amount,) + + for order in self.browse(cr, uid, ids, context=context): + if order.account_move: + continue + if order.state != 'paid': + continue + + user_company = user_proxy.browse(cr, order.user_id.id, order.user_id.id).company_id + + group_tax = {} + account_def = property_obj.get(cr, uid, 'property_account_receivable', 'res.partner', context=context).id + + order_account = order.partner_id and \ + order.partner_id.property_account_receivable and \ + order.partner_id.property_account_receivable.id or account_def or current_company.account_receivable.id + + if move_id is None: + # Create an entry for the sale + move_id = account_move_obj.create(cr, uid, { + 'ref' : order.name, + 'journal_id': order.sale_journal.id, + }, context=context) + + def insert_data(data_type, values): + # if have_to_group_by: + + sale_journal_id = order.sale_journal.id + + # 'quantity': line.qty, + # 'product_id': line.product_id.id, + values.update({ + 'date': order.date_order[:10], + 'ref': order.name, + 'journal_id' : sale_journal_id, + 'period_id' : period, + 'move_id' : move_id, + 'company_id': user_company and user_company.id or False, + }) + + if data_type == 'product': + key = ('product', values['product_id'],) + elif data_type == 'tax': + key = ('tax', values['tax_code_id'],) + elif data_type == 'counter_part': + key = ('counter_part', values['partner_id'], values['account_id']) + else: + return + + grouped_data.setdefault(key, []) + + # if not have_to_group_by or (not grouped_data[key]): + # grouped_data[key].append(values) + # else: + # pass + + if have_to_group_by: + if not grouped_data[key]: + grouped_data[key].append(values) + else: + current_value = grouped_data[key][0] + current_value['quantity'] = current_value.get('quantity', 0.0) + values.get('quantity', 0.0) + current_value['credit'] = current_value.get('credit', 0.0) + values.get('credit', 0.0) + current_value['debit'] = current_value.get('debit', 0.0) + values.get('debit', 0.0) + current_value['tax_amount'] = current_value.get('tax_amount', 0.0) + values.get('tax_amount', 0.0) + else: + grouped_data[key].append(values) + + # Create an move for each order line + + for line in order.lines: + tax_amount = 0 + taxes = [t for t in line.product_id.taxes_id] + computed_taxes = account_tax_obj.compute_all(cr, uid, taxes, line.price_unit * (100.0-line.discount) / 100.0, line.qty)['taxes'] + + for tax in computed_taxes: + tax_amount += round(tax['amount'], 2) + group_key = (tax['tax_code_id'], tax['base_code_id'], tax['account_collected_id'], tax['id']) + + group_tax.setdefault(group_key, 0) + group_tax[group_key] += round(tax['amount'], 2) + + amount = line.price_subtotal + + # Search for the income account + if line.product_id.property_account_income.id: + income_account = line.product_id.property_account_income.id + elif line.product_id.categ_id.property_account_income_categ.id: + income_account = line.product_id.categ_id.property_account_income_categ.id + else: + raise osv.except_osv(_('Error!'), _('Please define income '\ + 'account for this product: "%s" (id:%d).') \ + % (line.product_id.name, line.product_id.id, )) + + # Empty the tax list as long as there is no tax code: + tax_code_id = False + tax_amount = 0 + while computed_taxes: + tax = computed_taxes.pop(0) + tax_code_id, tax_amount = compute_tax(amount, tax, line) + + # If there is one we stop + if tax_code_id: + break + + # Create a move for the line + insert_data('product', { + 'name': line.product_id.name, + 'quantity': line.qty, + 'product_id': line.product_id.id, + 'account_id': income_account, + 'credit': ((amount>0) and amount) or 0.0, + 'debit': ((amount<0) and -amount) or 0.0, + 'tax_code_id': tax_code_id, + 'tax_amount': tax_amount, + 'partner_id': order.partner_id and order.partner_id.id or False + }) + + # For each remaining tax with a code, whe create a move line + for tax in computed_taxes: + tax_code_id, tax_amount = compute_tax(amount, tax, line) + if not tax_code_id: + continue + + insert_data('tax', { + 'name': _('Tax'), + 'product_id':line.product_id.id, + 'quantity': line.qty, + 'account_id': income_account, + 'credit': 0.0, + 'debit': 0.0, + 'tax_code_id': tax_code_id, + 'tax_amount': tax_amount, + }) + + # Create a move for each tax group + (tax_code_pos, base_code_pos, account_pos, tax_id)= (0, 1, 2, 3) + + for key, tax_amount in group_tax.items(): + tax = self.pool.get('account.tax').browse(cr, uid, key[tax_id], context=context) + insert_data('tax', { + 'name': _('Tax') + ' ' + tax.name, + 'quantity': line.qty, + 'product_id': line.product_id.id, + 'account_id': key[account_pos], + 'credit': ((tax_amount>0) and tax_amount) or 0.0, + 'debit': ((tax_amount<0) and -tax_amount) or 0.0, + 'tax_code_id': key[tax_code_pos], + 'tax_amount': tax_amount, + }) + + # counterpart + insert_data('counter_part', { + 'name': _("Trade Receivables"), #order.name, + 'account_id': order_account, + 'credit': ((order.amount_total < 0) and -order.amount_total) or 0.0, + 'debit': ((order.amount_total > 0) and order.amount_total) or 0.0, + 'partner_id': order.partner_id and order.partner_id.id or False + }) + + order.write({'state':'done', 'account_move': move_id}) + + for group_key, group_data in grouped_data.iteritems(): + for value in group_data: + account_move_line_obj.create(cr, uid, value, context=context) + + return True + + def action_payment(self, cr, uid, ids, context=None): + return self.write(cr, uid, ids, {'state': 'payment'}, context=context) + + def action_paid(self, cr, uid, ids, context=None): + self.create_picking(cr, uid, ids, context=context) + self.write(cr, uid, ids, {'state': 'paid'}, context=context) + return True + + def action_cancel(self, cr, uid, ids, context=None): + self.write(cr, uid, ids, {'state': 'cancel'}, context=context) + return True + + def action_done(self, cr, uid, ids, context=None): + self.create_account_move(cr, uid, ids, context=context) + return True + +class account_bank_statement(osv.osv): + _inherit = 'account.bank.statement' + _columns= { + 'user_id': fields.many2one('res.users', 'User', readonly=True), + } + _defaults = { + 'user_id': lambda self,cr,uid,c={}: uid + } +account_bank_statement() + +class account_bank_statement_line(osv.osv): + _inherit = 'account.bank.statement.line' + _columns= { + 'pos_statement_id': fields.many2one('pos.order', ondelete='cascade'), + } +account_bank_statement_line() + +class pos_order_line(osv.osv): + _name = "pos.order.line" + _description = "Lines of Point of Sale" + _rec_name = "product_id" + + def _amount_line_all(self, cr, uid, ids, field_names, arg, context=None): + res = dict([(i, {}) for i in ids]) + account_tax_obj = self.pool.get('account.tax') + cur_obj = self.pool.get('res.currency') + for line in self.browse(cr, uid, ids, context=context): + taxes = line.product_id.taxes_id + price = line.price_unit * (1 - (line.discount or 0.0) / 100.0) + taxes = account_tax_obj.compute_all(cr, uid, line.product_id.taxes_id, price, line.qty, product=line.product_id, partner=line.order_id.partner_id or False) + + cur = line.order_id.pricelist_id.currency_id + res[line.id]['price_subtotal'] = cur_obj.round(cr, uid, cur, taxes['total']) + res[line.id]['price_subtotal_incl'] = cur_obj.round(cr, uid, cur, taxes['total_included']) + return res + + def onchange_product_id(self, cr, uid, ids, pricelist, product_id, qty=0, partner_id=False, context=None): + context = context or {} + if not product_id: + return {} + if not pricelist: + raise osv.except_osv(_('No Pricelist !'), + _('You have to select a pricelist in the sale form !\n' \ + 'Please set one before choosing a product.')) + + price = self.pool.get('product.pricelist').price_get(cr, uid, [pricelist], + product_id, qty or 1.0, partner_id)[pricelist] + + result = self.onchange_qty(cr, uid, ids, product_id, 0.0, qty, price, context=context) + result['value']['price_unit'] = price + return result + + def onchange_qty(self, cr, uid, ids, product, discount, qty, price_unit, context=None): + result = {} + if not product: + return result + account_tax_obj = self.pool.get('account.tax') + cur_obj = self.pool.get('res.currency') + + prod = self.pool.get('product.product').browse(cr, uid, product, context=context) + + taxes = prod.taxes_id + price = price_unit * (1 - (discount or 0.0) / 100.0) + taxes = account_tax_obj.compute_all(cr, uid, prod.taxes_id, price, qty, product=prod, partner=False) + + result['price_subtotal'] = taxes['total'] + result['price_subtotal_incl'] = taxes['total_included'] + return {'value': result} + + _columns = { + 'company_id': fields.many2one('res.company', 'Company', required=True), + 'name': fields.char('Line No', size=32, required=True), + 'notice': fields.char('Discount Notice', size=128), + 'product_id': fields.many2one('product.product', 'Product', domain=[('sale_ok', '=', True)], required=True, change_default=True), + 'price_unit': fields.float(string='Unit Price', digits=(16, 2)), + 'qty': fields.float('Quantity', digits=(16, 2)), + 'price_subtotal': fields.function(_amount_line_all, multi='pos_order_line_amount', string='Subtotal w/o Tax', store=True), + 'price_subtotal_incl': fields.function(_amount_line_all, multi='pos_order_line_amount', string='Subtotal', store=True), + 'discount': fields.float('Discount (%)', digits=(16, 2)), + 'order_id': fields.many2one('pos.order', 'Order Ref', ondelete='cascade'), + 'create_date': fields.datetime('Creation Date', readonly=True), + } + + _defaults = { + 'name': lambda obj, cr, uid, context: obj.pool.get('ir.sequence').get(cr, uid, 'pos.order.line'), + 'qty': lambda *a: 1, + 'discount': lambda *a: 0.0, + 'company_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id, + } + + def copy_data(self, cr, uid, id, default=None, context=None): + if not default: + default = {} + default.update({ + 'name': self.pool.get('ir.sequence').get(cr, uid, 'pos.order.line') + }) + return super(pos_order_line, self).copy_data(cr, uid, id, default, context=context) + +class pos_category(osv.osv): + _name = 'pos.category' + _description = "Point of Sale Category" + _order = "sequence, name" + def _check_recursion(self, cr, uid, ids, context=None): + level = 100 + while len(ids): + cr.execute('select distinct parent_id from pos_category where id IN %s',(tuple(ids),)) + ids = filter(None, map(lambda x:x[0], cr.fetchall())) + if not level: + return False + level -= 1 + return True + + _constraints = [ + (_check_recursion, 'Error ! You cannot create recursive categories.', ['parent_id']) + ] + + def name_get(self, cr, uid, ids, context=None): + if not len(ids): + return [] + reads = self.read(cr, uid, ids, ['name','parent_id'], context=context) + res = [] + for record in reads: + name = record['name'] + if record['parent_id']: + name = record['parent_id'][1]+' / '+name + res.append((record['id'], name)) + return res + + def _name_get_fnc(self, cr, uid, ids, prop, unknow_none, context=None): + res = self.name_get(cr, uid, ids, context=context) + return dict(res) + + def _get_image(self, cr, uid, ids, name, args, context=None): + result = dict.fromkeys(ids, False) + for obj in self.browse(cr, uid, ids, context=context): + result[obj.id] = tools.image_get_resized_images(obj.image) + return result + + def _set_image(self, cr, uid, id, name, value, args, context=None): + return self.write(cr, uid, [id], {'image': tools.image_resize_image_big(value)}, context=context) + + _columns = { + 'name': fields.char('Name', size=64, required=True, translate=True), + 'complete_name': fields.function(_name_get_fnc, type="char", string='Name'), + 'parent_id': fields.many2one('pos.category','Parent Category', select=True), + 'child_id': fields.one2many('pos.category', 'parent_id', string='Children Categories'), + 'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of product categories."), + + # NOTE: there is no 'default image', because by default we don't show thumbnails for categories. However if we have a thumbnail + # for at least one category, then we display a default image on the other, so that the buttons have consistent styling. + # In this case, the default image is set by the js code. + + 'image': fields.binary("Image", + help="This field holds the image used for the category. "\ + "The image is base64 encoded, and PIL-supported. "\ + "It is limited to a 1024x1024 px image."), + 'image_medium': fields.function(_get_image, fnct_inv=_set_image, + string="Medium-sized image", type="binary", multi="_get_image", + store = { + 'pos.category': (lambda self, cr, uid, ids, c={}: ids, ['image'], 10), + }, + help="Medium-sized image of the category. It is automatically "\ + "resized as a 180x180 px image, with aspect ratio preserved. "\ + "Use this field in form views or some kanban views."), + 'image_small': fields.function(_get_image, fnct_inv=_set_image, + string="Smal-sized image", type="binary", multi="_get_image", + store = { + 'pos.category': (lambda self, cr, uid, ids, c={}: ids, ['image'], 10), + }, + help="Small-sized image of the category. It is automatically "\ + "resized as a 50x50 px image, with aspect ratio preserved. "\ + "Use this field anywhere a small image is required."), + } + +import io, StringIO + +class ean_wizard(osv.osv_memory): + _name = 'pos.ean_wizard' + _columns = { + 'ean13_pattern': fields.char('Ean13 Pattern', size=32, required=True, translate=True), + } + def sanitize_ean13(self, cr, uid, ids, context): + for r in self.browse(cr,uid,ids): + ean13 = openerp.addons.product.product.sanitize_ean13(r.ean13_pattern) + m = context.get('active_model') + m_id = context.get('active_id') + self.pool.get(m).write(cr,uid,[m_id],{'ean13':ean13}) + return { 'type' : 'ir.actions.act_window_close' } + +class product_product(osv.osv): + _inherit = 'product.product' + + + #def _get_small_image(self, cr, uid, ids, prop, unknow_none, context=None): + # result = {} + # for obj in self.browse(cr, uid, ids, context=context): + # if not obj.product_image: + # result[obj.id] = False + # continue + + # image_stream = io.BytesIO(obj.product_image.decode('base64')) + # img = Image.open(image_stream) + # img.thumbnail((120, 100), Image.ANTIALIAS) + # img_stream = StringIO.StringIO() + # img.save(img_stream, "JPEG") + # result[obj.id] = img_stream.getvalue().encode('base64') + # return result + + _columns = { + 'income_pdt': fields.boolean('Point of Sale Cash In', help="This is a product you can use to put cash into a statement for the point of sale backend."), + 'expense_pdt': fields.boolean('Point of Sale Cash Out', help="This is a product you can use to take cash from a statement for the point of sale backend, exemple: money lost, transfer to bank, etc."), + 'pos_categ_id': fields.many2one('pos.category','Point of Sale Category', + help="If you want to sell this product through the point of sale, select the category it belongs to."), + 'to_weight' : fields.boolean('To Weight', help="This category contains products that should be weighted, mainly used for the self-checkout interface"), + } + _defaults = { + 'to_weight' : False, + } + + def edit_ean(self, cr, uid, ids, context): + return { + 'name': "Edit Ean", + 'type': 'ir.actions.act_window', + 'view_type': 'form', + 'view_mode': 'form', + 'res_model': 'pos.ean_wizard', + 'target' : 'new', + 'view_id': False, + 'context':context, + } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/locadis/static/src/css/pos.css b/addons/locadis/static/src/css/pos.css new file mode 100644 index 00000000000..d9ec3ba7cee --- /dev/null +++ b/addons/locadis/static/src/css/pos.css @@ -0,0 +1,4 @@ + +.product-list-empty{ + text-align:center; +} diff --git a/addons/locadis/static/src/js/hello.js b/addons/locadis/static/src/js/hello.js new file mode 100644 index 00000000000..7deacfa994c --- /dev/null +++ b/addons/locadis/static/src/js/hello.js @@ -0,0 +1,12 @@ + +openerp.locadis = function(instance){ + console.log('Hello World!:',instance); + instance.point_of_sale.PosWidget = instance.point_of_sale.PosWidget.extend({ + init:function(parent,options){ + console.log('Tadaaam!',parent,options); + this._super(parent,options); + }, + }); + + /* REMOVE PRODUCTS FROM FIRST LEVEL IN SELF CHECKOUT */ +}; diff --git a/addons/locadis/static/src/js/main.js b/addons/locadis/static/src/js/main.js new file mode 100644 index 00000000000..1d0f41d8360 --- /dev/null +++ b/addons/locadis/static/src/js/main.js @@ -0,0 +1,24 @@ +openerp.locadis = function(instance){ + + var module = instance.point_of_sale; + var QWeb = instance.web.qweb; + + module.ProductListWidget = module.ProductListWidget.extend({ + template_empty: 'ProductEmptyListWidget', + get_category: function(){ + return this.getParent().product_categories_widget.category; + }, + renderElement: function(){ + var ss = this.pos_widget.screen_selector; + console.log('ss',ss); + if(this.get_category().name === 'Root' && ss && ss.get_user_mode() === 'cashier'){ + this.replaceElement(_.str.trim(QWeb.render(this.template_empty,{widget:this}))); + }else{ + this._super(); + } + }, + }); +}; + + + diff --git a/addons/locadis/static/src/xml/pos.xml b/addons/locadis/static/src/xml/pos.xml new file mode 100644 index 00000000000..f69c3b788df --- /dev/null +++ b/addons/locadis/static/src/xml/pos.xml @@ -0,0 +1,15 @@ + + + + +
+
+

Please scan an item

+ +
+
+
+
+ + +
From fe359ed90c75f95ed94ce4e66d686434929fad4c Mon Sep 17 00:00:00 2001 From: "Turkesh Patel (Open ERP)" Date: Thu, 23 Aug 2012 10:32:53 +0530 Subject: [PATCH 050/325] [FIX] remove unnecessary code. bzr revid: tpa@tinyerp.com-20120823050253-ng0muqz77h5cgv14 --- openerp/addons/base/res/res_partner_view.xml | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/openerp/addons/base/res/res_partner_view.xml b/openerp/addons/base/res/res_partner_view.xml index 92a264f0089..018be644d75 100644 --- a/openerp/addons/base/res/res_partner_view.xml +++ b/openerp/addons/base/res/res_partner_view.xml @@ -426,25 +426,6 @@ - - res.payterm - res.payterm - -
- - - -
-
-
- - Payment term - ir.actions.act_window - res.payterm - form - - - Partner Categories From 77905719d3b11e5e7b1a0bc11bbdd5c15b546e0f Mon Sep 17 00:00:00 2001 From: "Bhumi Thakkar (Open ERP)" Date: Thu, 23 Aug 2012 13:02:01 +0530 Subject: [PATCH 051/325] [IMP] remove type field from model=ir.ui.view. bzr revid: bth@tinyerp.com-20120823073201-vgtmu5ohmjhfhagu --- addons/sale/res_partner_view.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/sale/res_partner_view.xml b/addons/sale/res_partner_view.xml index f076bfda67c..e524fe4415d 100644 --- a/addons/sale/res_partner_view.xml +++ b/addons/sale/res_partner_view.xml @@ -58,7 +58,6 @@ res.partner.view.address_type res.partner - form From ee8b2cc93467f4b234d161575fafc4fce21591f5 Mon Sep 17 00:00:00 2001 From: "Bhumi Thakkar (Open ERP)" Date: Thu, 23 Aug 2012 13:09:13 +0530 Subject: [PATCH 052/325] [IMP] Remove type field from model=ir.ui.view. bzr revid: bth@tinyerp.com-20120823073913-hqm60kysmk8xwyv8 --- addons/mail/mail_followers_view.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/mail/mail_followers_view.xml b/addons/mail/mail_followers_view.xml index 62e93430675..8b19d51ca2a 100644 --- a/addons/mail/mail_followers_view.xml +++ b/addons/mail/mail_followers_view.xml @@ -6,7 +6,6 @@ mail.followers.tree mail.followers - tree 10 From ec11fa23a86e2a979432e28ce8d0fba546ccbea3 Mon Sep 17 00:00:00 2001 From: Paramjit Singh Sahota Date: Thu, 23 Aug 2012 15:36:40 +0530 Subject: [PATCH 053/325] [IMP] Given the access rights for the account.journal.cashbox.line in ACCOUNT. bzr revid: psa@tinyerp.com-20120823100640-5i00hwtv12wei7re --- addons/account/security/ir.model.access.csv | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/account/security/ir.model.access.csv b/addons/account/security/ir.model.access.csv index a5049c0a345..28bedbf65a1 100644 --- a/addons/account/security/ir.model.access.csv +++ b/addons/account/security/ir.model.access.csv @@ -82,6 +82,7 @@ access_account_entries_report_invoice,account.entries.report,model_account_entri access_account_entries_report_employee,account.entries.report employee,model_account_entries_report,base.group_user,1,0,0,0 access_analytic_entries_report_manager,analytic.entries.report,model_analytic_entries_report,account.group_account_manager,1,0,0,0 access_account_cashbox_line,account.cashbox.line,model_account_cashbox_line,account.group_account_user,1,1,1,1 +access_account_journal_cashbox_line,account.journal.cashbox.line,model_account_journal_cashbox_line,account.group_account_user,1,1,1,0 access_account_journal_view_invoice,account.journal.view invoice,model_account_journal_view,account.group_account_invoice,1,1,1,1 access_account_journal_column_invoice,account.journal.column invoice,model_account_journal_column,account.group_account_invoice,1,1,1,1 access_account_invoice_tax_accountant,account.invoice.tax accountant,model_account_invoice_tax,account.group_account_user,1,0,0,0 From 0d70cdaaf51993a13acbf6964d34e71e601b0525 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20van=20der=20Essen?= Date: Thu, 23 Aug 2012 14:18:35 +0200 Subject: [PATCH 054/325] [IMP] locadis: dont_vidange and extra fields added to products bzr revid: fva@openerp.com-20120823121835-o3119dcmu9s0048t --- addons/locadis/__init__.py | 2 +- addons/locadis/__openerp__.py | 10 +++------- addons/locadis/static/src/css/pos.css | 4 +++- addons/locadis/static/src/xml/pos.xml | 3 +-- 4 files changed, 8 insertions(+), 11 deletions(-) diff --git a/addons/locadis/__init__.py b/addons/locadis/__init__.py index e57b362135b..60ffcac8393 100644 --- a/addons/locadis/__init__.py +++ b/addons/locadis/__init__.py @@ -19,7 +19,7 @@ # ############################################################################## -#import point_of_sale +import locadis # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/locadis/__openerp__.py b/addons/locadis/__openerp__.py index 056b8da7fcf..4ec8527fc7a 100644 --- a/addons/locadis/__openerp__.py +++ b/addons/locadis/__openerp__.py @@ -30,14 +30,10 @@ FIXME: product description """, 'author': 'OpenERP SA', - 'images': ['images/cash_registers.jpeg', 'images/pos_analysis.jpeg','images/register_analysis.jpeg','images/sale_order_pos.jpeg','images/product_pos.jpeg'], + 'images': [], 'depends': ['point_of_sale'], - 'init_xml': [], - 'update_xml': [ - ], - 'demo_xml': [ - ], - 'test': [ + 'data':[ + 'locadis_views.xml', ], 'installable': True, 'application': True, diff --git a/addons/locadis/static/src/css/pos.css b/addons/locadis/static/src/css/pos.css index d9ec3ba7cee..075b4dccc27 100644 --- a/addons/locadis/static/src/css/pos.css +++ b/addons/locadis/static/src/css/pos.css @@ -1,4 +1,6 @@ - +.point-of-sale .screen p{ + font-size: 24px; +} .product-list-empty{ text-align:center; } diff --git a/addons/locadis/static/src/xml/pos.xml b/addons/locadis/static/src/xml/pos.xml index f69c3b788df..5ce23396db8 100644 --- a/addons/locadis/static/src/xml/pos.xml +++ b/addons/locadis/static/src/xml/pos.xml @@ -4,12 +4,11 @@
-

Please scan an item

+

Please scan your products

- From de6d26886ab91e6d5e4aee69a73ae574be39d78b Mon Sep 17 00:00:00 2001 From: "Bhumi Thakkar (Open ERP)" Date: Thu, 23 Aug 2012 18:23:11 +0530 Subject: [PATCH 055/325] [IMP] Remove type field from ir.ui.view model. bzr revid: bth@tinyerp.com-20120823125311-nx4x46ea3g2ercl8 --- addons/point_of_sale/point_of_sale_view.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/addons/point_of_sale/point_of_sale_view.xml b/addons/point_of_sale/point_of_sale_view.xml index 6487eebbe4f..67b1c91e025 100644 --- a/addons/point_of_sale/point_of_sale_view.xml +++ b/addons/point_of_sale/point_of_sale_view.xml @@ -1064,9 +1064,8 @@ pos.ean_wizard pos.ean_wizard - form -
+