From 182b9a7182400fe43ec966f74563a5acfceda49f Mon Sep 17 00:00:00 2001
From: Vo Minh Thu
Date: Tue, 24 Jan 2012 16:34:19 +0100
Subject: [PATCH 001/173] [IMP] document_webdav.webdav_server: remove the so
called `uniform log handling` of the HttpLogHandler class.
bzr revid: vmt@openerp.com-20120124153419-w6oed6z1ui8mouo7
---
addons/document_webdav/webdav_server.py | 37 +++++++++++--------------
1 file changed, 16 insertions(+), 21 deletions(-)
diff --git a/addons/document_webdav/webdav_server.py b/addons/document_webdav/webdav_server.py
index 81435a72137..ac7f87933ef 100644
--- a/addons/document_webdav/webdav_server.py
+++ b/addons/document_webdav/webdav_server.py
@@ -55,6 +55,8 @@ from DAV.propfind import PROPFIND
from xml.dom import minidom
from redirect import RedirectHTTPHandler
+_logger = logging.getLogger(__name__)
+
khtml_re = re.compile(r' KHTML/([0-9\.]+) ')
def OpenDAVConfig(**kw):
@@ -73,7 +75,6 @@ def OpenDAVConfig(**kw):
class DAVHandler(HttpOptions, FixSendError, DAVRequestHandler):
verbose = False
- _logger = logging.getLogger('webdav')
protocol_version = 'HTTP/1.1'
_HTTP_OPTIONS= { 'DAV' : ['1', '2'],
'Allow' : [ 'GET', 'HEAD', 'COPY', 'MOVE', 'POST', 'PUT',
@@ -85,7 +86,7 @@ class DAVHandler(HttpOptions, FixSendError, DAVRequestHandler):
return False
def _log(self, message):
- self._logger.debug(message)
+ _logger.debug(message)
def handle(self):
self._init_buffer()
@@ -106,7 +107,7 @@ class DAVHandler(HttpOptions, FixSendError, DAVRequestHandler):
if hasattr(self.request, 'getsockname'):
addr, port = self.request.getsockname()
except Exception, e:
- self.log_error("Cannot calculate own address: %s" , e)
+ _logger.warning("Cannot calculate own address: %s", e)
# Too early here to use self.headers
self.baseuri = "%s://%s:%d/"% (server_proto, addr, port)
self.IFACE_CLASS = openerp_dav_handler(self, self.verbose)
@@ -126,12 +127,6 @@ class DAVHandler(HttpOptions, FixSendError, DAVRequestHandler):
def get_davpath(self):
return self.davpath
- def log_message(self, format, *args):
- self._logger.log(netsvc.logging.DEBUG_RPC,format % args)
-
- def log_error(self, format, *args):
- self._logger.warning(format % args)
-
def _prep_OPTIONS(self, opts):
ret = opts
dc=self.IFACE_CLASS
@@ -142,7 +137,7 @@ class DAVHandler(HttpOptions, FixSendError, DAVRequestHandler):
except DAV_Error, (ec,dd):
pass
except Exception,e:
- self.log_error("Error at options: %s", str(e))
+ _logger.warning("Error at options: %s", str(e))
raise
return ret
@@ -245,7 +240,7 @@ class DAVHandler(HttpOptions, FixSendError, DAVRequestHandler):
try:
location = dc.put(uri, body, ct)
except DAV_Error, (ec,dd):
- self.log_error("Cannot PUT to %s: %s", uri, dd)
+ _logger.warning("Cannot PUT to %s: %s", uri, dd)
return self.send_status(ec)
headers = {}
@@ -284,7 +279,7 @@ class DAVHandler(HttpOptions, FixSendError, DAVRequestHandler):
""" Unlocks given resource """
dc = self.IFACE_CLASS
- self.log_message('UNLOCKing resource %s' % self.headers)
+ _logger.log(netsvc.logging.DEBUG_RPC, 'UNLOCKing resource %s' % self.headers)
uri = urlparse.urljoin(self.get_baseuri(dc), self.path)
uri = urllib.unquote(uri)
@@ -318,7 +313,7 @@ class DAVHandler(HttpOptions, FixSendError, DAVRequestHandler):
dc = self.IFACE_CLASS
lock_data = {}
- self.log_message('LOCKing resource %s' % self.headers)
+ _logger.log(netsvc.logging.DEBUG_RPC, 'LOCKing resource %s' % self.headers)
body = None
if self.headers.has_key('Content-Length'):
@@ -329,7 +324,7 @@ class DAVHandler(HttpOptions, FixSendError, DAVRequestHandler):
uri = urlparse.urljoin(self.get_baseuri(dc), self.path)
uri = urllib.unquote(uri)
- self.log_message('do_LOCK: uri = %s' % uri)
+ _logger.log(netsvc.logging.DEBUG_RPC, 'do_LOCK: uri = %s' % uri)
ifheader = self.headers.get('If')
@@ -477,7 +472,7 @@ class dummy_dav_interface(object):
uri2 = uri.split('/')
if len(uri2) < 3:
return True
- logging.getLogger('webdav').debug("Requested uri: %s", uri)
+ _logger.debug("Requested uri: %s", uri)
return None # no
def is_collection(self, uri):
@@ -532,7 +527,7 @@ class DAVStaticHandler(http_server.StaticHTTPHandler):
except DAV_Error, (ec,dd):
return self.send_error(ec,dd)
except Exception:
- self.log_exception("Cannot PROPFIND")
+ _logger.exception("Cannot PROPFIND")
raise
# work around MSIE DAV bug for creation and modified date
@@ -573,7 +568,7 @@ try:
conf = OpenDAVConfig(**_dc)
handler._config = conf
reg_http_service(directory, DAVHandler, DAVAuthProvider)
- logging.getLogger('webdav').info("WebDAV service registered at path: %s/ "% directory)
+ _logger.info("WebDAV service registered at path: %s/ ", directory)
if not (config.get_misc('webdav', 'no_root_hack', False)):
# Now, replace the static http handler with the dav-enabled one.
@@ -595,7 +590,7 @@ try:
reg_http_service('/', DAVStaticHandler)
except Exception, e:
- logging.getLogger('webdav').error('Cannot launch webdav: %s' % e)
+ _logger.error('Cannot launch webdav: %s', e)
def init_well_known():
@@ -639,9 +634,9 @@ def init_principals_redirect():
if dbname:
PrincipalsRedirect.redirect_paths[''] = '/webdav/%s/principals' % dbname
reg_http_service('/principals', PrincipalsRedirect)
- logging.getLogger("web-services").info(
- "Registered HTTP redirect handler for /principals to the %s db.",
- dbname)
+ _logger.info(
+ "Registered HTTP redirect handler for /principals to the %s db.",
+ dbname)
init_principals_redirect()
From 85f0ad1ea87f017a375d187d6d92cbdfffba61c7 Mon Sep 17 00:00:00 2001
From: Vo Minh Thu
Date: Tue, 24 Jan 2012 16:57:59 +0100
Subject: [PATCH 002/173] [IMP] document_webdav.webdav_server: remove the so
called `uniform log handling` of the HttpLogHandler class.
bzr revid: vmt@openerp.com-20120124155759-6g40dmhz6ywk9xe9
---
addons/document_webdav/dav_fs.py | 57 +++++++++++++++---------------
addons/document_webdav/redirect.py | 10 +++---
2 files changed, 34 insertions(+), 33 deletions(-)
diff --git a/addons/document_webdav/dav_fs.py b/addons/document_webdav/dav_fs.py
index 772b7600f20..a292019eeab 100644
--- a/addons/document_webdav/dav_fs.py
+++ b/addons/document_webdav/dav_fs.py
@@ -175,7 +175,7 @@ class openerp_dav_handler(dav_interface):
def get_propnames(self, uri):
props = self.PROPS
- self.parent.log_message('get propnames: %s' % uri)
+ _logger.log(netsvc.logging.DEBUG_RPC, 'get propnames: %s' % uri)
cr, uid, pool, dbname, uri2 = self.get_cr(uri)
if not dbname:
if cr: cr.close()
@@ -203,21 +203,21 @@ class openerp_dav_handler(dav_interface):
except NotImplementedError, e:
if cr: cr.close()
import traceback
- self.parent.log_error("Cannot %s: %s", opname, str(e))
- self.parent.log_message("Exc: %s",traceback.format_exc())
+ _logger.warning("Cannot %s: %s", opname, str(e))
+ _logger.log(netsvc.logging.DEBUG_RPC, "Exc: %s" % traceback.format_exc())
# see par 9.3.1 of rfc
raise DAV_Error(403, str(e) or 'Not supported at this path')
except EnvironmentError, err:
if cr: cr.close()
import traceback
- self.parent.log_error("Cannot %s: %s", opname, err.strerror)
- self.parent.log_message("Exc: %s",traceback.format_exc())
+ _logger.warning("Cannot %s: %s", opname, err.strerror)
+ _logger.log(netsvc.logging.DEBUG_RPC, "Exc: %s" % traceback.format_exc())
raise default_exc(err.strerror)
except Exception, e:
import traceback
if cr: cr.close()
- self.parent.log_error("Cannot %s: %s", opname, str(e))
- self.parent.log_message("Exc: %s",traceback.format_exc())
+ _logger.warning("Cannot %s: %s", opname, str(e))
+ _logger.log(netsvc.logging.DEBUG_RPC, "Exc: %s" % traceback.format_exc())
raise default_exc("Operation failed")
def _get_dav_lockdiscovery(self, uri):
@@ -245,7 +245,7 @@ class openerp_dav_handler(dav_interface):
def prep_http_options(self, uri, opts):
"""see HttpOptions._prep_OPTIONS """
- self.parent.log_message('get options: %s' % uri)
+ _logger.log(netsvc.logging.DEBUG_RPC, 'get options: %s' % uri)
cr, uid, pool, dbname, uri2 = self.get_cr(uri, allow_last=True)
if not dbname:
@@ -268,7 +268,7 @@ class openerp_dav_handler(dav_interface):
ret[key] = []
ret[key].extend(val)
- self.parent.log_message('options: %s' % ret)
+ _logger.log(netsvc.logging.DEBUG_RPC, 'options: %s' % ret)
else:
ret = opts
cr.close()
@@ -369,7 +369,7 @@ class openerp_dav_handler(dav_interface):
if res and len(res):
self.db_name_list.append(db_name)
except Exception, e:
- self.parent.log_error("Exception in db list: %s" % e)
+ _logger.warning("Exception in db list: %s", e)
finally:
if cr:
cr.close()
@@ -377,7 +377,7 @@ class openerp_dav_handler(dav_interface):
def get_childs(self,uri, filters=None):
""" return the child objects as self.baseuris for the given URI """
- self.parent.log_message('get children: %s' % uri)
+ _logger.log(netsvc.logging.DEBUG_RPC, 'get children: %s' % uri)
cr, uid, pool, dbname, uri2 = self.get_cr(uri, allow_last=True)
if not dbname:
@@ -394,7 +394,7 @@ class openerp_dav_handler(dav_interface):
fp = node.full_path()
if fp and len(fp):
fp = '/'.join(fp)
- self.parent.log_message('children for: %s' % fp)
+ _logger.log(netsvc.logging.DEBUG_RPC, 'children for: %s' % fp)
else:
fp = None
domain = None
@@ -420,13 +420,13 @@ class openerp_dav_handler(dav_interface):
if turi.startswith(ul):
result.append( turi[len(self.parent.davpath):])
else:
- self.parent.log_error("ignore href %s because it is not under request path %s", turi, ul)
+ _logger.warning("ignore href %s because it is not under request path %s", turi, ul)
return result
# We don't want to continue with the children found below
# Note the exceptions and that 'finally' will close the
# cursor
for d in node.children(cr, domain):
- self.parent.log_message('child: %s' % d.path)
+ _logger.log(netsvc.logging.DEBUG_RPC, 'child: %s' % d.path)
if fp:
result.append( self.urijoin(dbname,fp,d.path) )
else:
@@ -434,7 +434,7 @@ class openerp_dav_handler(dav_interface):
except DAV_Error:
raise
except Exception, e:
- self.parent.log_error("cannot get_children: "+ str(e))
+ _logger.warning("cannot get_children: "+ str(e))
raise
finally:
if cr: cr.close()
@@ -479,7 +479,7 @@ class openerp_dav_handler(dav_interface):
return pool.get('document.directory').get_object(cr, uid, uri, context=context)
def get_data(self,uri, rrange=None):
- self.parent.log_message('GET: %s' % uri)
+ _logger.log(netsvc.logging.DEBUG_RPC, 'GET: %s' % uri)
cr, uid, pool, dbname, uri2 = self.get_cr(uri)
try:
if not dbname:
@@ -499,7 +499,7 @@ class openerp_dav_handler(dav_interface):
start = 0
assert start >= 0
if end and end < start:
- self.parent.log_error("Invalid range for data: %s-%s" %(start, end))
+ _logger.warning("Invalid range for data: %s-%s" %(start, end))
raise DAV_Error(416, "Invalid range for data")
if end:
if end >= res.size():
@@ -514,12 +514,12 @@ class openerp_dav_handler(dav_interface):
# says we'd better just return 200 OK with empty data
return ''
except IndexError,e :
- self.parent.log_error("GET IndexError: %s", str(e))
+ _logger.warning("GET IndexError: %s", str(e))
raise DAV_NotFound2(uri2)
except Exception,e:
import traceback
- self.parent.log_error("GET exception: %s",str(e))
- self.parent.log_message("Exc: %s", traceback.format_exc())
+ _logger.warning("GET exception: %s",str(e))
+ _logger.log(netsvc.logging.DEBUG_RPC, "Exc: %s" % traceback.format_exc())
raise DAV_Error, 409
return res
finally:
@@ -528,7 +528,7 @@ class openerp_dav_handler(dav_interface):
@memoize(CACHE_SIZE)
def _get_dav_resourcetype(self, uri):
""" return type of object """
- self.parent.log_message('get RT: %s' % uri)
+ _logger.log(netsvc.logging.DEBUG_RPC, 'get RT: %s' % uri)
cr, uid, pool, dbname, uri2 = self.get_cr(uri)
try:
if not dbname:
@@ -546,7 +546,7 @@ class openerp_dav_handler(dav_interface):
if cr: cr.close()
def _get_dav_displayname(self,uri):
- self.parent.log_message('get DN: %s' % uri)
+ _logger.log(netsvc.logging.DEBUG_RPC, 'get DN: %s' % uri)
cr, uid, pool, dbname, uri2 = self.get_cr(uri)
if not dbname:
if cr: cr.close()
@@ -565,7 +565,7 @@ class openerp_dav_handler(dav_interface):
@memoize(CACHE_SIZE)
def _get_dav_getcontentlength(self, uri):
""" return the content length of an object """
- self.parent.log_message('get length: %s' % uri)
+ _logger.log(netsvc.logging.DEBUG_RPC, 'get length: %s' % uri)
result = 0
cr, uid, pool, dbname, uri2 = self.get_cr(uri)
if not dbname:
@@ -582,7 +582,7 @@ class openerp_dav_handler(dav_interface):
@memoize(CACHE_SIZE)
def _get_dav_getetag(self,uri):
""" return the ETag of an object """
- self.parent.log_message('get etag: %s' % uri)
+ _logger.log(netsvc.logging.DEBUG_RPC, 'get etag: %s' % uri)
result = 0
cr, uid, pool, dbname, uri2 = self.get_cr(uri)
if not dbname:
@@ -638,7 +638,7 @@ class openerp_dav_handler(dav_interface):
@memoize(CACHE_SIZE)
def _get_dav_getcontenttype(self,uri):
- self.parent.log_message('get contenttype: %s' % uri)
+ _logger.log(netsvc.logging.DEBUG_RPC, 'get contenttype: %s' % uri)
cr, uid, pool, dbname, uri2 = self.get_cr(uri)
if not dbname:
if cr: cr.close()
@@ -657,7 +657,7 @@ class openerp_dav_handler(dav_interface):
""" create a new collection
see par. 9.3 of rfc4918
"""
- self.parent.log_message('MKCOL: %s' % uri)
+ _logger.log(netsvc.logging.DEBUG_RPC, 'MKCOL: %s' % uri)
cr, uid, pool, dbname, uri2 = self.get_cr(uri)
if not uri2[-1]:
if cr: cr.close()
@@ -681,7 +681,8 @@ class openerp_dav_handler(dav_interface):
def put(self, uri, data, content_type=None):
""" put the object into the filesystem """
- self.parent.log_message('Putting %s (%d), %s'%( misc.ustr(uri), data and len(data) or 0, content_type))
+ _logger.log(netsvc.logging.DEBUG_RPC, 'Putting %s (%d), %s' % \
+ (misc.ustr(uri), data and len(data) or 0, content_type))
cr, uid, pool,dbname, uri2 = self.get_cr(uri)
if not dbname:
if cr: cr.close()
@@ -723,7 +724,7 @@ class openerp_dav_handler(dav_interface):
try:
etag = str(newchild.get_etag(cr))
except Exception, e:
- self.parent.log_error("Cannot get etag for node: %s" % e)
+ _logger.warning("Cannot get etag for node: %s", e)
ret = (str(hurl), etag)
else:
self._try_function(node.set_data, (cr, data), "save %s" % objname, cr=cr)
diff --git a/addons/document_webdav/redirect.py b/addons/document_webdav/redirect.py
index 7bc0883f9e8..7d04ffb51f5 100644
--- a/addons/document_webdav/redirect.py
+++ b/addons/document_webdav/redirect.py
@@ -23,10 +23,10 @@
import logging
import urlparse
from service.websrv_lib import FixSendError, HTTPHandler, HttpOptions
-from service.http_server import HttpLogHandler
-class RedirectHTTPHandler(HttpLogHandler, FixSendError, HttpOptions, HTTPHandler):
- _logger = logging.getLogger('httpd.well-known')
+_logger = logging.getLogger(__name__)
+
+class RedirectHTTPHandler(FixSendError, HttpOptions, HTTPHandler):
_HTTP_OPTIONS = { 'Allow': ['OPTIONS', 'GET', 'HEAD', 'PROPFIND'] }
redirect_paths = {}
@@ -62,7 +62,7 @@ class RedirectHTTPHandler(HttpLogHandler, FixSendError, HttpOptions, HTTPHandler
try:
addr, port = self.request.getsockname()
except Exception, e:
- self.log_error("Cannot calculate own address:" , e)
+ _logger.error("Cannot calculate own address:", e)
if self.headers.has_key('Host'):
uparts = list(urlparse.urlparse("%s://%s:%d"% (server_proto, addr,port)))
@@ -80,7 +80,7 @@ class RedirectHTTPHandler(HttpLogHandler, FixSendError, HttpOptions, HTTPHandler
self.send_header("Content-Length", 0)
self.end_headers()
# Do we need a Cache-content: header here?
- self._logger.debug("redirecting %s to %s", self.path, redir_path)
+ _logger.debug("redirecting %s to %s", self.path, redir_path)
return None
def do_PROPFIND(self):
From 7c4e08eb46a20e37ac490e6c2d4b916d56b8f63b Mon Sep 17 00:00:00 2001
From: Vo Minh Thu
Date: Tue, 24 Jan 2012 17:28:50 +0100
Subject: [PATCH 003/173] [IMP] account,document: changed from class __logger
to module _logger.
bzr revid: vmt@openerp.com-20120124162850-qr1or3piq9f91c7u
---
addons/account/installer.py | 5 +++--
addons/document/content_index.py | 16 ++++++++--------
2 files changed, 11 insertions(+), 10 deletions(-)
diff --git a/addons/account/installer.py b/addons/account/installer.py
index d1b19ef4319..a9122adf488 100644
--- a/addons/account/installer.py
+++ b/addons/account/installer.py
@@ -31,10 +31,11 @@ from osv import fields, osv
import netsvc
import tools
+_logger = logging.getLogger(__name__)
+
class account_installer(osv.osv_memory):
_name = 'account.installer'
_inherit = 'res.config.installer'
- __logger = logging.getLogger(_name)
def _get_charts(self, cr, uid, context=None):
modules = self.pool.get('ir.module.module')
@@ -142,7 +143,7 @@ class account_installer(osv.osv_memory):
cr, uid, ids, context=context)
chart = self.read(cr, uid, ids, ['charts'],
context=context)[0]['charts']
- self.__logger.debug('Installing chart of accounts %s', chart)
+ _logger.debug('Installing chart of accounts %s', chart)
return modules | set([chart])
account_installer()
diff --git a/addons/document/content_index.py b/addons/document/content_index.py
index 64b480ee736..3cb408428c9 100644
--- a/addons/document/content_index.py
+++ b/addons/document/content_index.py
@@ -23,10 +23,11 @@ import os
import tempfile
from subprocess import Popen, PIPE
+_logger = logging.getLogger(__name__)
+
class NhException(Exception):
pass
-
class indexer(object):
""" An indexer knows how to parse the content of some file.
@@ -116,7 +117,6 @@ def mime_match(mime, mdict):
return (None, None)
class contentIndex(object):
- __logger = logging.getLogger('addons.document.content_index')
def __init__(self):
self.mimes = {}
self.exts = {}
@@ -132,7 +132,7 @@ class contentIndex(object):
f = True
if f:
- self.__logger.debug('Register content indexer: %r', obj)
+ _logger.debug('Register content indexer: %r', obj)
if not f:
raise Exception("Your indexer should at least suport a mimetype or extension")
@@ -169,22 +169,22 @@ class contentIndex(object):
(result, _) = pop.communicate()
mime2 = result.split(';')[0]
- self.__logger.debug('File gave us: %s', mime2)
+ _logger.debug('File gave us: %s', mime2)
# Note that the temporary file still exists now.
mime,fobj = mime_match(mime2, self.mimes)
if not mime:
mime = mime2
except Exception:
- self.__logger.exception('Cannot determine mime type')
+ _logger.exception('Cannot determine mime type')
try:
if fobj:
res = (mime, fobj.indexContent(content,filename,fname or realfname) )
else:
- self.__logger.debug("Have no object, return (%s, None)", mime)
+ _logger.debug("Have no object, return (%s, None)", mime)
res = (mime, None )
except Exception:
- self.__logger.exception("Could not index file %s (%s)",
+ _logger.exception("Could not index file %s (%s)",
filename, fname or realfname)
res = None
@@ -193,7 +193,7 @@ class contentIndex(object):
try:
os.unlink(fname)
except Exception:
- self.__logger.exception("Could not unlink %s", fname)
+ _logger.exception("Could not unlink %s", fname)
return res
From 57b41aae43f0f2626f08e3e212aad4bab0394d42 Mon Sep 17 00:00:00 2001
From: Vo Minh Thu
Date: Wed, 25 Jan 2012 10:44:51 +0100
Subject: [PATCH 004/173] [IMP] logging: use logging instead of netsvc, use
module __name__ instead of something else.
bzr revid: vmt@openerp.com-20120125094451-a6mejmnaxa2vp1bu
---
addons/account/account.py | 20 +-
.../report/bank_statement_balance_report.py | 4 -
addons/account_coda/account_coda.py | 5 +-
.../wizard/account_coda_import.py | 26 +-
addons/account_payment/account_payment.py | 7 +-
.../wizard/wizard_tech_guide_rst.py | 25 +-
.../base_module_quality.py | 21 +-
addons/document/document.py | 6 +-
addons/document/document_directory.py | 7 +-
addons/document/document_storage.py | 63 ++-
addons/document/nodes.py | 24 +-
addons/document/std_index.py | 7 +-
addons/document_ftp/ftpserver/__init__.py | 10 +-
addons/edi/__init__.py | 2 +-
addons/edi/edi_service.py | 2 +-
addons/edi/models/edi.py | 6 +-
addons/edi/models/res_partner.py | 6 +-
addons/fetchmail/fetchmail.py | 14 +-
addons/import_base/import_framework.py | 15 +-
addons/l10n_be_invoice_bba/invoice.py | 433 +++++++++---------
addons/l10n_be_invoice_bba/partner.py | 5 +-
addons/l10n_multilang/l10n_multilang.py | 13 +-
addons/mail/mail_message.py | 2 +-
addons/mail/mail_thread.py | 3 -
addons/project_messages/project_messages.py | 2 -
addons/report_webkit/webkit_report.py | 11 +-
addons/stock/stock.py | 6 +-
27 files changed, 369 insertions(+), 376 deletions(-)
diff --git a/addons/account/account.py b/addons/account/account.py
index 432a90a653e..2b1834002e7 100644
--- a/addons/account/account.py
+++ b/addons/account/account.py
@@ -19,17 +19,19 @@
#
##############################################################################
-import time
from datetime import datetime
from dateutil.relativedelta import relativedelta
+import logging
from operator import itemgetter
+import time
-import netsvc
-import pooler
-from osv import fields, osv
import decimal_precision as dp
+from osv import fields, osv
+import pooler
from tools.translate import _
+_logger = logging.getLogger(__name__)
+
def check_cycle(self, cr, uid, ids, context=None):
""" climbs the ``self._table.parent_id`` chains for 100 levels or
until it can't find any more parent(s)
@@ -212,7 +214,6 @@ class account_account(osv.osv):
_name = "account.account"
_description = "Account"
_parent_store = True
- logger = netsvc.Logger()
def search(self, cr, uid, args, offset=0, limit=None, order=None,
context=None, count=False):
@@ -295,8 +296,7 @@ class account_account(osv.osv):
if aml_query.strip():
wheres.append(aml_query.strip())
filters = " AND ".join(wheres)
- self.logger.notifyChannel('addons.'+self._name, netsvc.LOG_DEBUG,
- 'Filters: %s'%filters)
+ _logger.debug('Filters: %s', filters)
# IN might not work ideally in case there are too many
# children_and_consolidated, in that case join on a
# values() e.g.:
@@ -312,8 +312,7 @@ class account_account(osv.osv):
" GROUP BY l.account_id")
params = (tuple(children_and_consolidated),) + query_params
cr.execute(request, params)
- self.logger.notifyChannel('addons.'+self._name, netsvc.LOG_DEBUG,
- 'Status: %s'%cr.statusmessage)
+ _logger.debug('Status: %s', cr.statusmessage)
for res in cr.dictfetchall():
accounts[res['id']] = res
@@ -2083,8 +2082,7 @@ class account_tax(osv.osv):
}
def compute(self, cr, uid, taxes, price_unit, quantity, address_id=None, product=None, partner=None):
- logger = netsvc.Logger()
- logger.notifyChannel("warning", netsvc.LOG_WARNING,
+ _logger.warning(
"Deprecated, use compute_all(...)['taxes'] instead of compute(...) to manage prices with tax included")
return self._compute(cr, uid, taxes, price_unit, quantity, address_id, product, partner)
diff --git a/addons/account_bank_statement_extensions/report/bank_statement_balance_report.py b/addons/account_bank_statement_extensions/report/bank_statement_balance_report.py
index 8e1e4b09e47..50b5bcd8d36 100644
--- a/addons/account_bank_statement_extensions/report/bank_statement_balance_report.py
+++ b/addons/account_bank_statement_extensions/report/bank_statement_balance_report.py
@@ -22,14 +22,10 @@
import time
from report import report_sxw
-import pooler
-import netsvc
-logger=netsvc.Logger()
class bank_statement_balance_report(report_sxw.rml_parse):
def set_context(self, objects, data, ids, report_type=None):
- #logger.notifyChannel('addons.'+__name__, netsvc.LOG_WARNING, 'set_context, objects = %s, data = %s, ids = %s' % (objects, data, ids))
cr = self.cr
uid = self.uid
context = self.context
diff --git a/addons/account_coda/account_coda.py b/addons/account_coda/account_coda.py
index f967669b98e..b4723794578 100644
--- a/addons/account_coda/account_coda.py
+++ b/addons/account_coda/account_coda.py
@@ -21,11 +21,10 @@
##############################################################################
import time
-from osv import osv, fields
+
import decimal_precision as dp
-import netsvc
+from osv import osv, fields
from tools.translate import _
-logger=netsvc.Logger()
class coda_bank_account(osv.osv):
_name= 'coda.bank.account'
diff --git a/addons/account_coda/wizard/account_coda_import.py b/addons/account_coda/wizard/account_coda_import.py
index 02e72bc3562..ac9a623e2fc 100644
--- a/addons/account_coda/wizard/account_coda_import.py
+++ b/addons/account_coda/wizard/account_coda_import.py
@@ -20,15 +20,16 @@
#
##############################################################################
-import time
import base64
+import re
+from sys import exc_info
+import time
+from traceback import format_exception
+
from osv import fields,osv
from tools.translate import _
-import netsvc
-import re
-from traceback import format_exception
-from sys import exc_info
-logger=netsvc.Logger()
+
+_logger = logging.getLogger(__name__)
class account_coda_import(osv.osv_memory):
_name = 'account.coda.import'
@@ -816,7 +817,6 @@ class account_coda_import(osv.osv_memory):
ttype = line['type'] == 'supplier' and 'payment' or 'receipt',
date = line['val_date'],
context = context)
- #logger.notifyChannel('addons.'+self._name, netsvc.LOG_WARNING, 'voucher_dict = %s' % voucher_dict)
voucher_line_vals = False
if voucher_dict['value']['line_ids']:
for line_dict in voucher_dict['value']['line_ids']:
@@ -889,22 +889,22 @@ class account_coda_import(osv.osv_memory):
nb_err += 1
err_string += _('\nError ! ') + str(e)
tb = ''.join(format_exception(*exc_info()))
- logger.notifyChannel('addons.'+self._name, netsvc.LOG_ERROR,
- 'Application Error while processing Statement %s\n%s' % (statement.get('name', '/'),tb))
+ _logger.error('Application Error while processing Statement %s\n%s',
+ statement.get('name', '/'), tb)
except Exception, e:
cr.rollback()
nb_err += 1
err_string += _('\nSystem Error : ') + str(e)
tb = ''.join(format_exception(*exc_info()))
- logger.notifyChannel('addons.'+self._name, netsvc.LOG_ERROR,
- 'System Error while processing Statement %s\n%s' % (statement.get('name', '/'),tb))
+ _logger.error('System Error while processing Statement %s\n%s',
+ statement.get('name', '/'), tb)
except :
cr.rollback()
nb_err += 1
err_string = _('\nUnknown Error : ') + str(e)
tb = ''.join(format_exception(*exc_info()))
- logger.notifyChannel('addons.'+self._name, netsvc.LOG_ERROR,
- 'Unknown Error while processing Statement %s\n%s' % (statement.get('name', '/'),tb))
+ _logger.error('Unknown Error while processing Statement %s\n%s',
+ statement.get('name', '/'), tb)
# end 'for statement in coda_statements'
diff --git a/addons/account_payment/account_payment.py b/addons/account_payment/account_payment.py
index 1de715dc777..11d4f98af8f 100644
--- a/addons/account_payment/account_payment.py
+++ b/addons/account_payment/account_payment.py
@@ -19,11 +19,14 @@
#
##############################################################################
+import logging
import time
from osv import osv, fields
import netsvc
+_logger = logging.getLogger(__name__)
+
class payment_mode(osv.osv):
_name= 'payment.mode'
_description= 'Payment Mode'
@@ -70,9 +73,7 @@ class payment_order(osv.osv):
#dead code
def get_wizard(self, type):
- logger = netsvc.Logger()
- logger.notifyChannel("warning", netsvc.LOG_WARNING,
- "No wizard found for the payment type '%s'." % type)
+ _logger.warning("No wizard found for the payment type '%s'.", type)
return None
def _total(self, cursor, user, ids, name, args, context=None):
diff --git a/addons/base_module_doc_rst/wizard/wizard_tech_guide_rst.py b/addons/base_module_doc_rst/wizard/wizard_tech_guide_rst.py
index 39933c39a3e..9f4c75918b9 100644
--- a/addons/base_module_doc_rst/wizard/wizard_tech_guide_rst.py
+++ b/addons/base_module_doc_rst/wizard/wizard_tech_guide_rst.py
@@ -18,17 +18,18 @@
# along with this program. If not, see .
#
##############################################################################
-from os.path import join
import base64
-import tempfile
-import tarfile
import httplib
+import logging
+import os
+from os.path import join
+import tarfile
+import tempfile
-import netsvc
import wizard
import pooler
-import os
-import tools
+
+_logger = logging.getLogger(__name__)
choose_file_form = '''
-
+
-
+
diff --git a/addons/hr_timesheet_sheet/wizard/hr_timesheet_current.py b/addons/hr_timesheet_sheet/wizard/hr_timesheet_current.py
index 2af8792472e..652d5139288 100644
--- a/addons/hr_timesheet_sheet/wizard/hr_timesheet_current.py
+++ b/addons/hr_timesheet_sheet/wizard/hr_timesheet_current.py
@@ -36,7 +36,7 @@ class hr_timesheet_current_open(osv.osv_memory):
user_ids = self.pool.get('hr.employee').search(cr, uid, [('user_id','=',uid)], context=context)
if not len(user_ids):
raise osv.except_osv(_('Error!'), _('Please create an employee and associate it with this user.'))
- ids = ts.search(cr, uid, [('user_id','=',uid),('state','=','draft'),('date_from','<=',time.strftime('%Y-%m-%d')), ('date_to','>=',time.strftime('%Y-%m-%d'))], context=context)
+ ids = ts.search(cr, uid, [('user_id','=',uid),('state','in',('draft','new')),('date_from','<=',time.strftime('%Y-%m-%d')), ('date_to','>=',time.strftime('%Y-%m-%d'))], context=context)
if len(ids) > 1:
view_type = 'tree,form'
From 0537147d95a1f7b795e6043c7dbdc774dd8dd1b2 Mon Sep 17 00:00:00 2001
From: Vo Minh Thu
Date: Fri, 26 Oct 2012 12:08:19 +0200
Subject: [PATCH 134/173] [IMP] expression.py: added tests for the in/not in
operators involving a many2many.
bzr revid: vmt@openerp.com-20121026100819-b2o4q9a082um6p2m
---
openerp/addons/base/tests/__init__.py | 6 +-
openerp/addons/base/tests/test_expression.py | 58 ++++++++++++++++++++
2 files changed, 62 insertions(+), 2 deletions(-)
create mode 100644 openerp/addons/base/tests/test_expression.py
diff --git a/openerp/addons/base/tests/__init__.py b/openerp/addons/base/tests/__init__.py
index 42fef2eb39d..409f9928c6f 100644
--- a/openerp/addons/base/tests/__init__.py
+++ b/openerp/addons/base/tests/__init__.py
@@ -1,5 +1,7 @@
-import test_ir_values, test_base
+import test_base, test_expression, test_ir_values
checks = [
- test_ir_values, test_base
+ test_base,
+ test_expression,
+ test_ir_values,
]
diff --git a/openerp/addons/base/tests/test_expression.py b/openerp/addons/base/tests/test_expression.py
new file mode 100644
index 00000000000..0bdd4180c0b
--- /dev/null
+++ b/openerp/addons/base/tests/test_expression.py
@@ -0,0 +1,58 @@
+import unittest2
+
+import openerp.tests.common as common
+
+class test_expression(common.TransactionCase):
+
+ def test_00(self):
+
+ registry, cr, uid = self.registry, self.cr, self.uid
+
+ categories = registry('res.partner.category')
+ cat_a = categories.create(cr, uid, {'name': 'test_expression_category_A'})
+ cat_b = categories.create(cr, uid, {'name': 'test_expression_category_B'})
+
+ partners = registry('res.partner')
+ a = partners.create(cr, uid, {'name': 'test_expression_partner_A', 'category_id': [(6, 0, [cat_a])]})
+ b = partners.create(cr, uid, {'name': 'test_expression_partner_B', 'category_id': [(6, 0, [cat_b])]})
+ ab = partners.create(cr, uid, {'name': 'test_expression_partner_AB', 'category_id': [(6, 0, [cat_a, cat_b])]})
+ c = partners.create(cr, uid, {'name': 'test_expression_partner_C'})
+
+ with_a = partners.search(cr, uid, [('category_id', 'in', [cat_a])])
+ self.assertEqual(set([a, ab]), set(with_a), "Search for category_id in cat_a failed.")
+
+ with_b = partners.search(cr, uid, [('category_id', 'in', [cat_b])])
+ self.assertEqual(set([ab, b]), set(with_b), "Search for category_id in cat_b failed.")
+
+ with_a_or_b = partners.search(cr, uid, [('category_id', 'in', [cat_a, cat_b])])
+ self.assertEqual(set([ab, a, b]), set(with_a_or_b), "Search for category_id contains cat_a or cat_b failed.")
+
+ with_a_and_b = partners.search(cr, uid, [('category_id', 'in', [cat_a]), ('category_id', 'in', [cat_b])])
+ self.assertEqual(set([ab]), set(with_a_and_b), "Search for category_id contains cat_a and cat_b failed.")
+
+ # Note it is the same as with_a_or_b above.
+ with_a_or_with_b = partners.search(cr, uid, ['|', ('category_id', 'in', [cat_a]), ('category_id', 'in', [cat_b])])
+ self.assertEqual(set([ab, a, b]), set(with_a_or_with_b), "Search for category_id contains cat_a or contains cat_b failed.")
+
+ without_a_or_b = partners.search(cr, uid, [('category_id', 'not in', [cat_a, cat_b])])
+ self.assertTrue(all(i not in without_a_or_b for i in [a, b, ab]), "Search for category_id doesn't contain cat_a or cat_b failed (1).")
+ self.assertTrue(c in without_a_or_b, "Search for category_id doesn't contain cat_a or cat_b failed (2).")
+
+ without_a_and_without_b = partners.search(cr, uid, [('category_id', 'not in', [cat_a]), ('category_id', 'not in', [cat_b])])
+ self.assertTrue(all(i not in without_a_and_without_b for i in [a, b, ab]), "Search for category_id doesn't contain cat_a and cat_b failed (1).")
+ self.assertTrue(c in without_a_and_without_b, "Search for category_id doesn't contain cat_a and cat_b failed (2).")
+
+ without_a = partners.search(cr, uid, [('category_id', 'not in', [cat_a])])
+ self.assertTrue(a not in without_a, "Search for category_id doesn't contain cat_a failed (1).")
+ self.assertTrue(ab not in without_a, "Search for category_id doesn't contain cat_a failed (2).")
+ self.assertTrue(set([b, c]).issubset(set(without_a)), "Search for category_id doesn't contain cat_a failed (3).")
+
+ without_b = partners.search(cr, uid, [('category_id', 'not in', [cat_b])])
+ self.assertTrue(b not in without_b, "Search for category_id doesn't contain cat_b failed (1).")
+ self.assertTrue(ab not in without_b, "Search for category_id doesn't contain cat_b failed (2).")
+ self.assertTrue(set([a, c]).issubset(set(without_b)), "Search for category_id doesn't contain cat_b failed (3).")
+
+ # We can't express the following.
+ # with_any_other_than_a = ...
+ # self.assertTrue(ab in with_any_other_than_a, "Search for category_id with any other than cat_a failed.")
+
From 458f6de18480d7af72700752aea54f29da39b312 Mon Sep 17 00:00:00 2001
From: Fabien Pinckaers
Date: Fri, 26 Oct 2012 12:12:41 +0200
Subject: [PATCH 135/173] [IMP] typo
bzr revid: fp@tinyerp.com-20121026101241-d7j0vaujc73go3bf
---
.../hr_timesheet_sheet/static/src/xml/timesheet.xml | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/addons/hr_timesheet_sheet/static/src/xml/timesheet.xml b/addons/hr_timesheet_sheet/static/src/xml/timesheet.xml
index 667c7af23be..4390c7c6ed1 100644
--- a/addons/hr_timesheet_sheet/static/src/xml/timesheet.xml
+++ b/addons/hr_timesheet_sheet/static/src/xml/timesheet.xml
@@ -54,12 +54,16 @@
- Click to add a project you worked on.
+ Click to add projects/analytic accounts you worked on.
You will be able to register your working hours and
- activities on these projects. You can also click on a
- selected project/analytic account to setup the
- invoicing options.
+ activities.
+
+ By default, you record timesheets on analytic accounts.
+ But if an analytic account represents a customer
+ contract, you can change the type of the analytic
+ account to 'Contract or Project' to setup the invoicing
+ options.
From 56c1a398a08cb74b8bf4e02e4f2894777a313516 Mon Sep 17 00:00:00 2001
From: Vo Minh Thu
Date: Fri, 26 Oct 2012 13:01:09 +0200
Subject: [PATCH 136/173] [IMP] expression.py: added comments to the in/not in
many2many tests.
bzr revid: vmt@openerp.com-20121026110109-l212flw0p5cklc6p
---
openerp/addons/base/tests/test_expression.py | 28 +++++++++++++++-----
1 file changed, 21 insertions(+), 7 deletions(-)
diff --git a/openerp/addons/base/tests/test_expression.py b/openerp/addons/base/tests/test_expression.py
index 0bdd4180c0b..5690cff443a 100644
--- a/openerp/addons/base/tests/test_expression.py
+++ b/openerp/addons/base/tests/test_expression.py
@@ -4,10 +4,12 @@ import openerp.tests.common as common
class test_expression(common.TransactionCase):
- def test_00(self):
+ def test_in_not_in_m2m(self):
registry, cr, uid = self.registry, self.cr, self.uid
+ # Create 4 partners with no category, or one or two categories (out of two categories).
+
categories = registry('res.partner.category')
cat_a = categories.create(cr, uid, {'name': 'test_expression_category_A'})
cat_b = categories.create(cr, uid, {'name': 'test_expression_category_B'})
@@ -18,41 +20,53 @@ class test_expression(common.TransactionCase):
ab = partners.create(cr, uid, {'name': 'test_expression_partner_AB', 'category_id': [(6, 0, [cat_a, cat_b])]})
c = partners.create(cr, uid, {'name': 'test_expression_partner_C'})
+ # The tests.
+
+ # On a one2many or many2many field, `in` should be read `contains` (and
+ # `not in` should be read `doesn't contain`.
+
with_a = partners.search(cr, uid, [('category_id', 'in', [cat_a])])
self.assertEqual(set([a, ab]), set(with_a), "Search for category_id in cat_a failed.")
with_b = partners.search(cr, uid, [('category_id', 'in', [cat_b])])
self.assertEqual(set([ab, b]), set(with_b), "Search for category_id in cat_b failed.")
+ # Partners with the category A or the category B.
with_a_or_b = partners.search(cr, uid, [('category_id', 'in', [cat_a, cat_b])])
self.assertEqual(set([ab, a, b]), set(with_a_or_b), "Search for category_id contains cat_a or cat_b failed.")
- with_a_and_b = partners.search(cr, uid, [('category_id', 'in', [cat_a]), ('category_id', 'in', [cat_b])])
- self.assertEqual(set([ab]), set(with_a_and_b), "Search for category_id contains cat_a and cat_b failed.")
-
- # Note it is the same as with_a_or_b above.
+ # Show that `contains list` is really `contains element or contains element`.
with_a_or_with_b = partners.search(cr, uid, ['|', ('category_id', 'in', [cat_a]), ('category_id', 'in', [cat_b])])
self.assertEqual(set([ab, a, b]), set(with_a_or_with_b), "Search for category_id contains cat_a or contains cat_b failed.")
+ # If we change the OR in AND...
+ with_a_and_b = partners.search(cr, uid, [('category_id', 'in', [cat_a]), ('category_id', 'in', [cat_b])])
+ self.assertEqual(set([ab]), set(with_a_and_b), "Search for category_id contains cat_a and cat_b failed.")
+
+ # Partners without category A and without category B.
without_a_or_b = partners.search(cr, uid, [('category_id', 'not in', [cat_a, cat_b])])
self.assertTrue(all(i not in without_a_or_b for i in [a, b, ab]), "Search for category_id doesn't contain cat_a or cat_b failed (1).")
self.assertTrue(c in without_a_or_b, "Search for category_id doesn't contain cat_a or cat_b failed (2).")
+ # Show that `doesn't contain list` is really `doesn't contain element and doesn't contain element`.
without_a_and_without_b = partners.search(cr, uid, [('category_id', 'not in', [cat_a]), ('category_id', 'not in', [cat_b])])
self.assertTrue(all(i not in without_a_and_without_b for i in [a, b, ab]), "Search for category_id doesn't contain cat_a and cat_b failed (1).")
self.assertTrue(c in without_a_and_without_b, "Search for category_id doesn't contain cat_a and cat_b failed (2).")
+ # We can exclude any partner containing the category A.
without_a = partners.search(cr, uid, [('category_id', 'not in', [cat_a])])
self.assertTrue(a not in without_a, "Search for category_id doesn't contain cat_a failed (1).")
self.assertTrue(ab not in without_a, "Search for category_id doesn't contain cat_a failed (2).")
self.assertTrue(set([b, c]).issubset(set(without_a)), "Search for category_id doesn't contain cat_a failed (3).")
+ # (Obviously we can do the same for cateory B.)
without_b = partners.search(cr, uid, [('category_id', 'not in', [cat_b])])
self.assertTrue(b not in without_b, "Search for category_id doesn't contain cat_b failed (1).")
self.assertTrue(ab not in without_b, "Search for category_id doesn't contain cat_b failed (2).")
self.assertTrue(set([a, c]).issubset(set(without_b)), "Search for category_id doesn't contain cat_b failed (3).")
- # We can't express the following.
+ # We can't express the following: Partners with a category different than A.
# with_any_other_than_a = ...
- # self.assertTrue(ab in with_any_other_than_a, "Search for category_id with any other than cat_a failed.")
+ # self.assertTrue(a not in with_any_other_than_a, "Search for category_id with any other than cat_a failed (1).")
+ # self.assertTrue(ab in with_any_other_than_a, "Search for category_id with any other than cat_a failed (2).")
From daeccb5ab2e98b9f9a12a4ccf10626a81a2afab8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?=
Date: Fri, 26 Oct 2012 13:33:36 +0200
Subject: [PATCH 137/173] [IMP] mail: added a quote context to email
notifications. This is a first basic implementation with a dummy template
that will have to be improved. Updated tests. TOFIX: some of the tests will
have to be cleaned a bit.
bzr revid: tde@openerp.com-20121026113336-s18129kmn2df4lhs
---
addons/mail/mail_followers.py | 5 ++
addons/mail/mail_message.py | 94 ++++++++++++++++++++++++++++++----
addons/mail/tests/test_mail.py | 39 ++++++++++----
3 files changed, 119 insertions(+), 19 deletions(-)
diff --git a/addons/mail/mail_followers.py b/addons/mail/mail_followers.py
index 07ccfeec9cc..2d9661871cc 100644
--- a/addons/mail/mail_followers.py
+++ b/addons/mail/mail_followers.py
@@ -142,9 +142,14 @@ class mail_notification(osv.Model):
if not notify_partner_ids:
return True
+ # add the context in the email
+ quote_context = self.pool.get('mail.message').message_quote_context(cr, uid, msg_id, context=context)
+
# add signature
mail_mail = self.pool.get('mail.mail')
body_html = msg.body
+ if quote_context:
+ body_html = tools.append_content_to_html(body_html, quote_context, plaintext=False)
signature = msg.author_id and msg.author_id.user_ids[0].signature or ''
if signature:
body_html = tools.append_content_to_html(body_html, signature)
diff --git a/addons/mail/mail_message.py b/addons/mail/mail_message.py
index 2e46162c3f6..3d8dee9a4b2 100644
--- a/addons/mail/mail_message.py
+++ b/addons/mail/mail_message.py
@@ -24,11 +24,17 @@ import tools
from email.header import decode_header
from openerp import SUPERUSER_ID
-from osv import osv, orm, fields
-from tools.translate import _
+from openerp.osv import osv, orm, fields
+from openerp.tools.translate import _
_logger = logging.getLogger(__name__)
+try:
+ from mako.template import Template as MakoTemplate
+except ImportError:
+ _logger.warning("payment_acquirer: mako templates not available, payment acquirer will not work!")
+
+
""" Some tools for parsing / creating email fields """
def decode(text):
"""Returns unicode() string conversion of the the given encoded smtp header text"""
@@ -618,10 +624,87 @@ class mail_message(osv.Model):
self.pool.get('ir.attachment').unlink(cr, uid, attachments_to_delete, context=context)
return super(mail_message, self).unlink(cr, uid, ids, context=context)
+ def copy(self, cr, uid, id, default=None, context=None):
+ """ Overridden to avoid duplicating fields that are unique to each email """
+ if default is None:
+ default = {}
+ default.update(message_id=False, headers=False)
+ return super(mail_message, self).copy(cr, uid, id, default=default, context=context)
+
#------------------------------------------------------
# Messaging API
#------------------------------------------------------
+ MAIL_TEMPLATE = """
+ % if message:
+ ${display_message(message)}
+ % endif
+ % for ctx_msg in context_messages:
+ ${display_message(ctx_msg)}
+ % endfor
+ % if add_expandable:
+ ${display_expandable()}
+ % endif
+ ${display_message(header_message)}
+
+ Use notes to organize personnal tasks or notes. All
+ notes are private; no one else will be able to see them. But
+ you can share some notes to other people by inviting followers
+ on the note. (very usefull for meeting minutes, especially if
+ you activate the pad feature for collaborative writings).
+
+ You can customize how you process your notes/tasks by adding,
+ removing or modifying columns.
+
- Click to add a personnal note.
+ Click to add a personal note.
- Use notes to organize personnal tasks or notes. All
- notes are private; no one else will be able to see them. But
- you can share some notes to other people by inviting followers
- on the note. (very usefull for meeting minutes, especially if
+ Use notes to organize personal tasks or notes. All
+ notes are private; no one else will be able to see them. However
+ you can share some notes with other people by inviting followers
+ on the note. (Useful for meeting minutes, especially if
you activate the pad feature for collaborative writings).
You can customize how you process your notes/tasks by adding,
From ff918d5b2f9a6cf6fecf48523e24b67ceecc1d6b Mon Sep 17 00:00:00 2001
From: Fabien Pinckaers
Date: Fri, 26 Oct 2012 22:13:32 +0200
Subject: [PATCH 154/173] fix
bzr revid: fp@openerp.com-20121026201332-jiujrnnxkomm58zs
---
addons/crm/crm_demo.xml | 7 -------
1 file changed, 7 deletions(-)
diff --git a/addons/crm/crm_demo.xml b/addons/crm/crm_demo.xml
index dde3e63cc4a..203193dc3bc 100644
--- a/addons/crm/crm_demo.xml
+++ b/addons/crm/crm_demo.xml
@@ -6,13 +6,6 @@
-
- Meetings
- ir.ui.menu
-
-
-
-
Sales Marketing DepartmentSMD
From 80fb0f7f8174493bcdad627f2449bbbde46c4781 Mon Sep 17 00:00:00 2001
From: Launchpad Translations on behalf of openerp <>
Date: Sat, 27 Oct 2012 05:15:46 +0000
Subject: [PATCH 155/173] Launchpad automatic translations update.
bzr revid: launchpad_translations_on_behalf_of_openerp-20121027045930-uze98btnynog2b5r
bzr revid: launchpad_translations_on_behalf_of_openerp-20121027051546-nvi5ltrk3o8s6j4z
---
addons/account/i18n/ru.po | 478 ++++++++++++++++++++---------------
addons/board/i18n/ru.po | 14 +-
addons/mail/i18n/hu.po | 63 +++--
addons/mail/i18n/ru.po | 154 ++++++-----
addons/web/i18n/hu.po | 8 +-
addons/web_kanban/i18n/ru.po | 16 +-
6 files changed, 422 insertions(+), 311 deletions(-)
diff --git a/addons/account/i18n/ru.po b/addons/account/i18n/ru.po
index c194906a978..82c89ea48a1 100644
--- a/addons/account/i18n/ru.po
+++ b/addons/account/i18n/ru.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:35+0000\n"
-"PO-Revision-Date: 2012-08-17 11:07+0000\n"
+"PO-Revision-Date: 2012-10-26 09:03+0000\n"
"Last-Translator: Chertykov Denis \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-08-28 06:12+0000\n"
-"X-Generator: Launchpad (build 15864)\n"
+"X-Launchpad-Export-Date: 2012-10-27 04:59+0000\n"
+"X-Generator: Launchpad (build 16194)\n"
#. module: account
#: view:account.invoice.report:0
@@ -38,6 +38,8 @@ msgid ""
"Determine the display order in the report 'Accounting \\ Reporting \\ "
"Generic Reporting \\ Taxes \\ Taxes Report'"
msgstr ""
+"Определяет порядок вывода в отчёте 'Учет \\ Отчётность \\ Общая отчётность \\"
+" Налоги \\ Отчёт по налогам'"
#. module: account
#: view:account.move.reconcile:0
@@ -81,7 +83,7 @@ msgstr "Определение наследников"
#: code:addons/account/account_bank_statement.py:302
#, python-format
msgid "Journal item \"%s\" is not valid."
-msgstr ""
+msgstr "Недопустимый элемент журнала \"%s\""
#. module: account
#: model:ir.model,name:account.model_report_aged_receivable
@@ -118,6 +120,8 @@ msgid ""
"Configuration error! The currency chosen should be shared by the default "
"accounts too."
msgstr ""
+"Ошибка настройки! Выбранная валюта должна соответствовать валюте счетов по "
+"умолчанию."
#. module: account
#: report:account.invoice:0
@@ -141,6 +145,7 @@ msgstr "Сверить"
#: field:account.move,ref:0
#: field:account.move.line,ref:0
#: field:account.subscription,ref:0
+#: xsl:account.transfer:0
msgid "Reference"
msgstr "Ссылка"
@@ -159,16 +164,16 @@ msgstr ""
"не удаляя его."
#. module: account
-#: code:addons/account/account_invoice.py:1428
+#: code:addons/account/account_invoice.py:1430
#, python-format
msgid "Warning!"
msgstr "Предупреждение!"
#. module: account
-#: code:addons/account/account.py:3112
+#: code:addons/account/account.py:3129
#, python-format
msgid "Miscellaneous Journal"
-msgstr ""
+msgstr "Смешанный журнал"
#. module: account
#: field:account.fiscal.position.account,account_src_id:0
@@ -229,7 +234,7 @@ msgstr ""
"налога появился в счетах-фактурах"
#. module: account
-#: code:addons/account/account_invoice.py:1241
+#: code:addons/account/account_invoice.py:1254
#, python-format
msgid "Invoice '%s' is paid partially: %s%s of %s%s (%s%s remaining)"
msgstr "Счет '%s' оплачивается частично: %s%s из %s%s (%s%s остаток)"
@@ -245,7 +250,7 @@ msgid "Belgian Reports"
msgstr "Бельгийские отчеты"
#. module: account
-#: code:addons/account/account_move_line.py:1200
+#: code:addons/account/account_move_line.py:1215
#, python-format
msgid "You can not add/modify entries in a closed journal."
msgstr "В не можете добавить/исправить проводки в закрытом журнале"
@@ -293,10 +298,11 @@ msgid "St."
msgstr "ул."
#. module: account
-#: code:addons/account/account_invoice.py:551
+#: code:addons/account/account_invoice.py:560
#, python-format
msgid "Invoice line account company does not match with invoice company."
msgstr ""
+"Позиция счёта-фактуры счёта компании не соответствует компании счёта-фактуры."
#. module: account
#: field:account.journal.column,field:0
@@ -344,6 +350,9 @@ msgid ""
"leave the automatic formatting, it will be computed based on the financial "
"reports hierarchy (auto-computed field 'level')."
msgstr ""
+"Здесь вы можете задать формат для вывода этой записи. Если вы оставите "
+"автоформатирование, оно будет вычислено на основе иерархии финансовых "
+"отчётов (автоподсчитанное поле 'уровень')."
#. module: account
#: view:account.installer:0
@@ -373,7 +382,7 @@ msgstr ""
#. module: account
#: constraint:account.move.line:0
msgid "You can not create journal items on an account of type view."
-msgstr ""
+msgstr "Нельзя создать элемент журнала по счету с типом вид."
#. module: account
#: model:ir.model,name:account.model_account_tax_template
@@ -547,7 +556,7 @@ msgstr "Название компании должно быть уникальн
#. module: account
#: model:ir.model,name:account.model_account_invoice_refund
msgid "Invoice Refund"
-msgstr ""
+msgstr "Возмещение по счёту-фактуре"
#. module: account
#: report:account.overdue:0
@@ -584,8 +593,10 @@ msgid "The accountant confirms the statement."
msgstr "Бухгалтер подтверждает документ."
#. module: account
+#: report:account.account.balance:0
#: selection:account.balance.report,display_account:0
#: selection:account.common.account.report,display_account:0
+#: report:account.general.ledger_landscape:0
#: selection:account.report.general.ledger,display_account:0
#: selection:account.tax,type_tax_use:0
#: selection:account.tax.template,type_tax_use:0
@@ -625,7 +636,7 @@ msgstr "Последовательности"
#: field:account.financial.report,account_report_id:0
#: selection:account.financial.report,type:0
msgid "Report Value"
-msgstr ""
+msgstr "Значение отчёта"
#. module: account
#: view:account.fiscal.position.template:0
@@ -643,10 +654,10 @@ msgid "Main Sequence must be different from current !"
msgstr "Основная нумерация должна отличаться от текущей!"
#. module: account
-#: code:addons/account/account_move_line.py:1251
+#: code:addons/account/account_move_line.py:1266
#, python-format
msgid "No period found or more than one period found for the given date."
-msgstr ""
+msgstr "Для заданной даты период не найден или найдено более одного периода."
#. module: account
#: field:account.invoice.tax,tax_amount:0
@@ -654,7 +665,7 @@ msgid "Tax Code Amount"
msgstr "Объем по коду налога"
#. module: account
-#: code:addons/account/account.py:3116
+#: code:addons/account/account.py:3133
#, python-format
msgid "SAJ"
msgstr "КнП"
@@ -681,8 +692,8 @@ msgid "Journal Period"
msgstr "Период журнала"
#. module: account
-#: code:addons/account/account_move_line.py:750
-#: code:addons/account/account_move_line.py:803
+#: code:addons/account/account_move_line.py:766
+#: code:addons/account/account_move_line.py:819
#, python-format
msgid "To reconcile the entries company should be the same for all entries"
msgstr ""
@@ -694,6 +705,8 @@ msgid ""
"The date of your Journal Entry is not in the defined period! You should "
"change the date or remove this constraint from the journal."
msgstr ""
+"Дата проводки в журнале не в определённом периоде! Вы должны сменить дату "
+"или удалить это ограничение из журнала."
#. module: account
#: model:ir.model,name:account.model_account_report_general_ledger
@@ -728,7 +741,7 @@ msgstr "Журнал продаж в этом году"
#. module: account
#: selection:account.financial.report,display_detail:0
msgid "Display children with hierarchy"
-msgstr ""
+msgstr "Показ подчинённость с иерархией"
#. module: account
#: selection:account.payment.term.line,value:0
@@ -751,7 +764,7 @@ msgstr "Аналитические проводки по строкам"
#. module: account
#: field:account.invoice.refund,filter_refund:0
msgid "Refund Method"
-msgstr ""
+msgstr "Способ возмещения"
#. module: account
#: code:addons/account/wizard/account_change_currency.py:38
@@ -760,6 +773,7 @@ msgid "You can only change currency for Draft Invoice !"
msgstr "Вы можете изменить валюту только в черновике счета !"
#. module: account
+#: model:ir.actions.report.xml,name:account.account_financial_report
#: model:ir.ui.menu,name:account.menu_account_report
msgid "Financial Report"
msgstr "Финансовый отчет"
@@ -775,12 +789,13 @@ msgstr "Финансовый отчет"
#: view:account.journal:0
#: field:account.journal,type:0
#: field:account.move.reconcile,type:0
+#: xsl:account.transfer:0
#: field:report.invoice.created,type:0
msgid "Type"
msgstr "Тип"
#. module: account
-#: code:addons/account/account_invoice.py:738
+#: code:addons/account/account_invoice.py:747
#, python-format
msgid ""
"Taxes are missing!\n"
@@ -908,12 +923,13 @@ msgid "Create 3 Months Periods"
msgstr "Создать квартальные периоды"
#. module: account
+#: report:account.aged_trial_balance:0
#: report:account.overdue:0
msgid "Due"
msgstr "Срок"
#. module: account
-#: code:addons/account/account.py:1345
+#: code:addons/account/account.py:1353
#, python-format
msgid ""
"You cannot validate this journal entry because account \"%s\" does not "
@@ -994,7 +1010,7 @@ msgstr ""
"содержать базовую сумму (без налога)"
#. module: account
-#: code:addons/account/account.py:2596
+#: code:addons/account/account.py:2613
#, python-format
msgid "I can not locate a parent code for the template account!"
msgstr ""
@@ -1027,10 +1043,10 @@ msgid "Code"
msgstr "Код"
#. module: account
-#: code:addons/account/account.py:2268
+#: code:addons/account/account.py:2285
#: code:addons/account/account_bank_statement.py:357
#: code:addons/account/account_invoice.py:73
-#: code:addons/account/account_invoice.py:688
+#: code:addons/account/account_invoice.py:697
#: code:addons/account/account_move_line.py:173
#, python-format
msgid "No Analytic Journal !"
@@ -1094,7 +1110,7 @@ msgstr ""
"информации о счете и его особенностях."
#. module: account
-#: code:addons/account/account_move_line.py:842
+#: code:addons/account/account_move_line.py:856
#, python-format
msgid ""
"You have to provide an account for the write off/exchange difference entry !"
@@ -1142,7 +1158,7 @@ msgstr ""
#. module: account
#: model:account.account.type,name:account.data_account_type_bank
#: selection:account.bank.accounts.wizard,account_type:0
-#: code:addons/account/account.py:3003
+#: code:addons/account/account.py:3020
#, python-format
msgid "Bank"
msgstr "Банковский"
@@ -1239,7 +1255,7 @@ msgid "The move of this entry line."
msgstr "Операция этой проводки"
#. module: account
-#: code:addons/account/account_move_line.py:1302
+#: code:addons/account/account_move_line.py:1317
#, python-format
msgid ""
"You can not use this general account in this journal, check the tab 'Entry "
@@ -1260,7 +1276,7 @@ msgid "Entry Label"
msgstr "Метка проводки"
#. module: account
-#: code:addons/account/account.py:1129
+#: code:addons/account/account.py:1136
#, python-format
msgid "You can not modify/delete a journal with entries for this period !"
msgstr "Вы не можете изменить/удалить журнал с записями за этот период !"
@@ -1345,14 +1361,15 @@ msgid "Taxes"
msgstr "Налоги"
#. module: account
-#: code:addons/account/wizard/account_financial_report.py:69
-#: code:addons/account/wizard/account_report_common.py:144
+#: code:addons/account/wizard/account_financial_report.py:70
+#: code:addons/account/wizard/account_report_common.py:145
#, python-format
msgid "Select a starting and an ending period"
msgstr "Выберите начало и окончание периода"
#. module: account
#: model:account.financial.report,name:account.account_financial_report_profitandloss0
+#: model:ir.actions.act_window,name:account.action_account_report_pl
msgid "Profit and Loss"
msgstr "Прибыли и убытки"
@@ -1407,6 +1424,7 @@ msgid "Journal Items Analysis"
msgstr "Анализ элементов журнала"
#. module: account
+#: report:account.aged_trial_balance:0
#: model:ir.ui.menu,name:account.next_id_22
msgid "Partners"
msgstr "Контрагенты"
@@ -1431,8 +1449,10 @@ msgid "Central Journal"
msgstr "Центральный журнал"
#. module: account
+#: report:account.account.balance:0
#: selection:account.balance.report,display_account:0
#: selection:account.common.account.report,display_account:0
+#: report:account.general.ledger_landscape:0
#: selection:account.partner.balance,display_partner:0
#: selection:account.report.general.ledger,display_account:0
msgid "With balance is not equal to 0"
@@ -1666,6 +1686,7 @@ msgid "Separated Journal Sequences"
msgstr "Раздельные нумерации журнала"
#. module: account
+#: field:account.bank.statement,user_id:0
#: view:account.invoice:0
msgid "Responsible"
msgstr "Ответственный"
@@ -1696,7 +1717,7 @@ msgid "Year Sum"
msgstr "Годовая сумма"
#. module: account
-#: code:addons/account/account_invoice.py:1429
+#: code:addons/account/account_invoice.py:1431
#, python-format
msgid ""
"You selected an Unit of Measure which is not compatible with the product."
@@ -1774,7 +1795,7 @@ msgid "Customer Ref:"
msgstr "Ссылка на клиента:"
#. module: account
-#: code:addons/account/account_cash_statement.py:292
+#: code:addons/account/account_cash_statement.py:293
#, python-format
msgid "User %s does not have rights to access %s journal !"
msgstr "Пользователь %s не имеет прав доступа к журналу %s !"
@@ -1998,7 +2019,7 @@ msgstr ""
#. module: account
#: view:account.analytic.line:0
msgid "Analytic Journal Items related to a sale journal."
-msgstr ""
+msgstr "Элементы журнала аналитика связанные с журналом продаж"
#. module: account
#: selection:account.financial.report,style_overwrite:0
@@ -2103,7 +2124,7 @@ msgid "Pro-forma"
msgstr "Проформа"
#. module: account
-#: code:addons/account/account.py:1461
+#: code:addons/account/account.py:1478
#, python-format
msgid ""
"There is no default default debit account defined \n"
@@ -2133,7 +2154,7 @@ msgid "Search Chart of Account Templates"
msgstr "Искать шаблоны планов счетов"
#. module: account
-#: code:addons/account/account_move_line.py:1277
+#: code:addons/account/account_move_line.py:1292
#, python-format
msgid ""
"Can not create an automatic sequence for this piece!\n"
@@ -2185,7 +2206,7 @@ msgid "Description"
msgstr "Описание"
#. module: account
-#: code:addons/account/account.py:3119
+#: code:addons/account/account.py:3136
#, python-format
msgid "ECNJ"
msgstr ""
@@ -2204,7 +2225,7 @@ msgid "Income Account"
msgstr "Cчёт доходов и расходов"
#. module: account
-#: code:addons/account/account_invoice.py:370
+#: code:addons/account/account_invoice.py:379
#, python-format
msgid "There is no Accounting Journal of type Sale/Purchase defined!"
msgstr "Не определен журнал покупок / продаж."
@@ -2244,6 +2265,7 @@ msgstr "Шаблон продукта"
#. module: account
#: report:account.account.balance:0
#: field:account.aged.trial.balance,fiscalyear_id:0
+#: report:account.aged_trial_balance:0
#: field:account.balance.report,fiscalyear_id:0
#: report:account.central.journal:0
#: field:account.central.journal,fiscalyear_id:0
@@ -2253,6 +2275,7 @@ msgstr "Шаблон продукта"
#: field:account.common.report,fiscalyear_id:0
#: view:account.entries.report:0
#: field:account.entries.report,fiscalyear_id:0
+#: report:account.financial.report:0
#: field:account.fiscalyear,name:0
#: report:account.general.journal:0
#: field:account.general.journal,fiscalyear_id:0
@@ -2303,7 +2326,7 @@ msgid "Account Line"
msgstr ""
#. module: account
-#: code:addons/account/account.py:1468
+#: code:addons/account/account.py:1485
#, python-format
msgid ""
"There is no default default credit account defined \n"
@@ -2336,7 +2359,7 @@ msgid "Main Sequence"
msgstr "Основная Последовательность"
#. module: account
-#: code:addons/account/account_bank_statement.py:402
+#: code:addons/account/account_bank_statement.py:403
#, python-format
msgid ""
"In order to delete a bank statement, you must first cancel it to delete "
@@ -2410,7 +2433,7 @@ msgid "Account Tax Code"
msgstr "Код налогового счёта"
#. module: account
-#: code:addons/account/account_invoice.py:572
+#: code:addons/account/account_invoice.py:581
#, python-format
msgid ""
"Can't find any account journal of %s type for this company.\n"
@@ -2502,7 +2525,7 @@ msgid "Account Model Entries"
msgstr "Проводки модели счета"
#. module: account
-#: code:addons/account/account.py:3117
+#: code:addons/account/account.py:3134
#, python-format
msgid "EXJ"
msgstr "ЖР"
@@ -2567,7 +2590,6 @@ msgid "Account move line reconcile (writeoff)"
msgstr ""
#. module: account
-#: model:account.account.type,name:account.account_type_tax
#: report:account.invoice:0
#: field:account.invoice,amount_tax:0
#: field:account.move.line,account_tax_id:0
@@ -2599,7 +2621,7 @@ msgid "Accounts"
msgstr "Счета"
#. module: account
-#: code:addons/account/account_invoice.py:369
+#: code:addons/account/account_invoice.py:378
#, python-format
msgid "Configuration Error!"
msgstr "Ошибка конфигурации!"
@@ -2721,6 +2743,7 @@ msgstr ""
#. module: account
#: view:account.aged.trial.balance:0
#: model:ir.actions.act_window,name:account.action_account_aged_balance_view
+#: model:ir.actions.report.xml,name:account.account_aged_partner_balance
#: model:ir.ui.menu,name:account.menu_aged_trial_balance
msgid "Aged Partner Balance"
msgstr "Баланс партнера по периодам"
@@ -2772,14 +2795,14 @@ msgid "This wizard will create recurring accounting entries"
msgstr "Этот мастер создаст повторяющиеся бухгалтерские проводки"
#. module: account
-#: code:addons/account/account.py:1321
+#: code:addons/account/account.py:1329
#, python-format
msgid "No sequence defined on the journal !"
msgstr "Нумерация в журнале не определена !"
#. module: account
-#: code:addons/account/account.py:2268
-#: code:addons/account/account_invoice.py:688
+#: code:addons/account/account.py:2285
+#: code:addons/account/account_invoice.py:697
#: code:addons/account/account_move_line.py:173
#, python-format
msgid "You have to define an analytic journal on the '%s' journal!"
@@ -2886,7 +2909,7 @@ msgid "Base Code Amount"
msgstr "Сумма по основному коду"
#. module: account
-#: code:addons/account/account_invoice.py:392
+#: code:addons/account/account_invoice.py:401
#, python-format
msgid ""
"You can not delete an invoice which is open or paid. We suggest you to "
@@ -2899,7 +2922,7 @@ msgid "Default Sale Tax"
msgstr "Налог с продаж по умолчанию"
#. module: account
-#: code:addons/account/account_invoice.py:1013
+#: code:addons/account/account_invoice.py:1025
#, python-format
msgid "Invoice '%s' is validated."
msgstr "Счет '%s' утвержден."
@@ -2939,7 +2962,7 @@ msgid "Fiscal Position"
msgstr "Система налогообложения"
#. module: account
-#: code:addons/account/account_invoice.py:735
+#: code:addons/account/account_invoice.py:744
#, python-format
msgid ""
"Tax base different!\n"
@@ -3093,7 +3116,7 @@ msgid "View"
msgstr "Вид"
#. module: account
-#: code:addons/account/account.py:3363
+#: code:addons/account/account.py:3380
#: code:addons/account/account_bank.py:90
#, python-format
msgid "BNK"
@@ -3287,7 +3310,7 @@ msgid "Starting Balance"
msgstr "Начальный баланс"
#. module: account
-#: code:addons/account/account_invoice.py:1332
+#: code:addons/account/account_invoice.py:1345
#, python-format
msgid "No Partner Defined !"
msgstr "Партнер не определен!"
@@ -3342,7 +3365,7 @@ msgid "Chart of Tax"
msgstr "Диаграмма налогов"
#. module: account
-#: code:addons/account/account_cash_statement.py:314
+#: code:addons/account/account_cash_statement.py:315
#, python-format
msgid "The closing balance should be the same than the computed balance!"
msgstr ""
@@ -3427,6 +3450,7 @@ msgstr ""
#. module: account
#: field:account.aged.trial.balance,period_length:0
+#: report:account.aged_trial_balance:0
msgid "Period Length (days)"
msgstr ""
@@ -3473,7 +3497,7 @@ msgid "Detail"
msgstr "Подробности"
#. module: account
-#: code:addons/account/account_invoice.py:839
+#: code:addons/account/account_invoice.py:850
#, python-format
msgid ""
"Can not create the invoice !\n"
@@ -3488,9 +3512,16 @@ msgid "VAT :"
msgstr "НДС:"
#. module: account
+#: report:account.account.balance:0
+#: report:account.aged_trial_balance:0
#: report:account.central.journal:0
+#: report:account.financial.report:0
+#: report:account.general.journal:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: field:account.installer,charts:0
+#: report:account.journal.period.print:0
+#: report:account.journal.period.print.sale.purchase:0
#: report:account.partner.balance:0
#: report:account.third_party_ledger:0
#: report:account.third_party_ledger_other:0
@@ -3512,7 +3543,7 @@ msgid "Centralised counterpart"
msgstr ""
#. module: account
-#: code:addons/account/account_move_line.py:584
+#: code:addons/account/account_move_line.py:575
#, python-format
msgid "You can not create journal items on a \"view\" account %s %s"
msgstr ""
@@ -3539,6 +3570,7 @@ msgstr ""
#: report:account.analytic.account.journal:0
#: selection:account.balance.report,filter:0
#: field:account.bank.statement,date:0
+#: field:account.bank.statement.line,date:0
#: selection:account.central.journal,filter:0
#: selection:account.common.account.report,filter:0
#: selection:account.common.journal.report,filter:0
@@ -3566,10 +3598,17 @@ msgstr ""
#: field:account.subscription.line,date:0
#: report:account.third_party_ledger:0
#: report:account.third_party_ledger_other:0
+#: xsl:account.transfer:0
#: selection:account.vat.declaration,filter:0
#: selection:accounting.report,filter:0
#: selection:accounting.report,filter_cmp:0
+#: code:addons/account/report/account_general_ledger.py:305
+#: code:addons/account/report/account_general_ledger.py:308
+#: code:addons/account/report/account_journal.py:195
+#: code:addons/account/report/account_journal.py:198
+#: code:addons/account/report/common_report_header.py:97
#: field:analytic.entries.report,date:0
+#, python-format
msgid "Date"
msgstr "Дата"
@@ -3586,7 +3625,6 @@ msgstr "Не сверено"
#. module: account
#: view:account.analytic.line:0
-#: field:account.bank.statement,user_id:0
#: view:account.journal:0
#: field:account.journal,user_id:0
#: view:analytic.entries.report:0
@@ -3600,7 +3638,7 @@ msgid "Chart of Accounts Template"
msgstr "Шаблон плана счетов"
#. module: account
-#: code:addons/account/account.py:2280
+#: code:addons/account/account.py:2297
#, python-format
msgid ""
"Maturity date of entry line generated by model line '%s' of model '%s' is "
@@ -3611,7 +3649,7 @@ msgstr ""
"условии оплаты контрагента."
#. module: account
-#: code:addons/account/account_move_line.py:837
+#: code:addons/account/account_move_line.py:846
#, python-format
msgid "Some entries are already reconciled !"
msgstr "Некоторые записи уже сверены!"
@@ -3642,6 +3680,8 @@ msgstr "Бюджеты"
#: selection:account.vat.declaration,filter:0
#: selection:accounting.report,filter:0
#: selection:accounting.report,filter_cmp:0
+#: code:addons/account/report/common_report_header.py:100
+#, python-format
msgid "No Filters"
msgstr "Нет фильтров"
@@ -3725,7 +3765,7 @@ msgid "Analytic Items"
msgstr "Элементы аналитики"
#. module: account
-#: code:addons/account/account_move_line.py:1153
+#: code:addons/account/account_move_line.py:1168
#, python-format
msgid "Unable to change tax !"
msgstr "Невозможно изменить налог !"
@@ -3756,7 +3796,7 @@ msgid "Mapping"
msgstr "Соответствие"
#. module: account
-#: code:addons/account/account_invoice.py:921
+#: code:addons/account/account_invoice.py:932
#, python-format
msgid ""
"You cannot create an invoice on a centralised journal. Uncheck the "
@@ -3770,6 +3810,7 @@ msgstr ""
#: report:account.analytic.account.inverted.balance:0
#: field:account.bank.statement,name:0
#: field:account.chart.template,name:0
+#: report:account.financial.report:0
#: field:account.model.line,name:0
#: field:account.move.line,name:0
#: field:account.move.reconcile,name:0
@@ -3783,7 +3824,7 @@ msgid "Account Aged Trial balance Report"
msgstr ""
#. module: account
-#: code:addons/account/account_move_line.py:591
+#: code:addons/account/account_move_line.py:582
#, python-format
msgid "You can not create journal items on a closed account %s %s"
msgstr ""
@@ -4110,7 +4151,7 @@ msgid "Month"
msgstr "Месяц"
#. module: account
-#: code:addons/account/account_move_line.py:1216
+#: code:addons/account/account_move_line.py:1231
#, python-format
msgid ""
"You can not do this modification on a confirmed entry! You can just change "
@@ -4167,7 +4208,7 @@ msgid "Account Base Code"
msgstr "Основной код счёта"
#. module: account
-#: code:addons/account/account_analytic_line.py:93
+#: code:addons/account/account_analytic_line.py:91
#, python-format
msgid "There is no expense account defined for this product: \"%s\" (id:%d)"
msgstr "Счет расходов не определен для этого товара: \"%s\" (id:%d)"
@@ -4376,7 +4417,7 @@ msgid "Allow Reconciliation"
msgstr "Разрешить сверку"
#. module: account
-#: code:addons/account/account.py:1077
+#: code:addons/account/account.py:1082
#, python-format
msgid ""
"You can not modify company of this period as some journal items exists."
@@ -4410,7 +4451,7 @@ msgid "Recurring Models"
msgstr "Повторяющиеся модели"
#. module: account
-#: code:addons/account/account_move_line.py:1251
+#: code:addons/account/account_move_line.py:1266
#, python-format
msgid "Encoding error"
msgstr ""
@@ -4422,6 +4463,7 @@ msgstr "4"
#. module: account
#: view:account.invoice:0
+#: xsl:account.transfer:0
msgid "Change"
msgstr "Изменить"
@@ -4466,7 +4508,7 @@ msgid "Example"
msgstr ""
#. module: account
-#: code:addons/account/account_invoice.py:828
+#: code:addons/account/account_invoice.py:839
#, python-format
msgid ""
"Please verify the price of the invoice !\n"
@@ -4482,7 +4524,7 @@ msgid "Keep empty to use the income account"
msgstr "Оставьте пустым для использования доходного счета"
#. module: account
-#: code:addons/account/account.py:3299
+#: code:addons/account/account.py:3316
#, python-format
msgid "Purchase Tax %.2f%%"
msgstr ""
@@ -4510,7 +4552,7 @@ msgstr "Отображение счета"
#: selection:account.bank.statement.line,type:0
#: view:account.invoice:0
#: view:account.invoice.report:0
-#: code:addons/account/account_invoice.py:337
+#: code:addons/account/account_invoice.py:346
#, python-format
msgid "Customer"
msgstr "Заказчик"
@@ -4526,7 +4568,7 @@ msgid "Cancelled Invoice"
msgstr "Отмененный счет"
#. module: account
-#: code:addons/account/account.py:1567
+#: code:addons/account/account.py:1584
#, python-format
msgid ""
"Couldn't create move with currency different from the secondary currency of "
@@ -4583,7 +4625,7 @@ msgid "Income Account on Product Template"
msgstr "Счет доходов и расходов из шаблона ТМЦ"
#. module: account
-#: code:addons/account/account.py:3120
+#: code:addons/account/account.py:3137
#, python-format
msgid "MISC"
msgstr ""
@@ -4608,11 +4650,13 @@ msgstr "Новый учетный год"
#: view:account.invoice:0
#: view:account.tax.template:0
#: selection:account.vat.declaration,based_on:0
+#: code:addons/account/report/account_tax_report.py:68
#: model:ir.actions.act_window,name:account.act_res_partner_2_account_invoice_opened
#: model:ir.actions.act_window,name:account.action_invoice_tree
#: model:ir.actions.report.xml,name:account.account_invoices
#: view:report.invoice.created:0
#: field:res.partner,invoice_ids:0
+#, python-format
msgid "Invoices"
msgstr "Счета"
@@ -4749,26 +4793,24 @@ msgid "Journal Items"
msgstr "Элементы журнала"
#. module: account
-#: code:addons/account/account.py:1088
-#: code:addons/account/account.py:1090
-#: code:addons/account/account.py:1321
-#: code:addons/account/account.py:1563
-#: code:addons/account/account.py:1567
-#: code:addons/account/account.py:3368
-#: code:addons/account/account_move_line.py:807
-#: code:addons/account/account_move_line.py:830
-#: code:addons/account/account_move_line.py:832
-#: code:addons/account/account_move_line.py:835
-#: code:addons/account/account_move_line.py:837
+#: code:addons/account/account.py:1095
+#: code:addons/account/account.py:1097
+#: code:addons/account/account.py:1329
+#: code:addons/account/account.py:1580
+#: code:addons/account/account.py:1584
+#: code:addons/account/account.py:3385
+#: code:addons/account/account_move_line.py:823
+#: code:addons/account/account_move_line.py:843
+#: code:addons/account/account_move_line.py:846
#: code:addons/account/report/common_report_header.py:92
#: code:addons/account/wizard/account_change_currency.py:38
#: code:addons/account/wizard/account_change_currency.py:59
#: code:addons/account/wizard/account_change_currency.py:64
#: code:addons/account/wizard/account_change_currency.py:70
-#: code:addons/account/wizard/account_financial_report.py:69
+#: code:addons/account/wizard/account_financial_report.py:70
#: code:addons/account/wizard/account_move_bank_reconcile.py:49
-#: code:addons/account/wizard/account_report_common.py:144
-#: code:addons/account/wizard/account_report_common.py:150
+#: code:addons/account/wizard/account_report_common.py:145
+#: code:addons/account/wizard/account_report_common.py:151
#, python-format
msgid "Error"
msgstr "Error"
@@ -4873,7 +4915,7 @@ msgid "Beginning of Period Date"
msgstr ""
#. module: account
-#: code:addons/account/account.py:1351
+#: code:addons/account/account.py:1361
#, python-format
msgid ""
"You can not modify a posted entry of this journal !\n"
@@ -4900,7 +4942,7 @@ msgid "Child Tax Accounts"
msgstr "Счета субналогов"
#. module: account
-#: code:addons/account/account.py:1090
+#: code:addons/account/account.py:1097
#, python-format
msgid "Start period should be smaller then End period"
msgstr "Начало периода должно быть меньше, чем конец периода"
@@ -4921,6 +4963,7 @@ msgstr "Остаток по аналитике"
#. module: account
#: report:account.account.balance:0
#: field:account.aged.trial.balance,target_move:0
+#: report:account.aged_trial_balance:0
#: field:account.balance.report,target_move:0
#: report:account.central.journal:0
#: field:account.central.journal,target_move:0
@@ -4964,6 +5007,8 @@ msgstr "Тип периода"
#: view:account.invoice:0
#: field:account.invoice,payment_ids:0
#: selection:account.vat.declaration,based_on:0
+#: code:addons/account/report/account_tax_report.py:70
+#, python-format
msgid "Payments"
msgstr "Платежи"
@@ -5037,7 +5082,7 @@ msgid "Line 1:"
msgstr "Строка 1:"
#. module: account
-#: code:addons/account/account.py:1307
+#: code:addons/account/account.py:1315
#, python-format
msgid "Integrity Error !"
msgstr "Ошибка целостности!"
@@ -5070,6 +5115,7 @@ msgstr "Результат сверки"
#. module: account
#: model:account.financial.report,name:account.account_financial_report_balancesheet0
+#: model:ir.actions.act_window,name:account.action_account_report_bs
#: model:ir.ui.menu,name:account.menu_account_report_bs
msgid "Balance Sheet"
msgstr "Балансовая ведомость"
@@ -5146,6 +5192,7 @@ msgstr ""
#: view:account.move.line:0
#: field:account.tax,amount:0
#: field:account.tax.template,amount:0
+#: xsl:account.transfer:0
#: view:analytic.entries.report:0
#: field:analytic.entries.report,amount:0
msgid "Amount"
@@ -5275,7 +5322,6 @@ msgstr ""
#. module: account
#: field:account.bank.statement.line,name:0
-#: field:account.invoice,reference:0
msgid "Communication"
msgstr "Назначение"
@@ -5327,13 +5373,13 @@ msgid "End of Year Entries Journal"
msgstr "Журнал проводок конца года"
#. module: account
-#: code:addons/account/account.py:3446
+#: code:addons/account/account.py:3463
#: code:addons/account/account_bank_statement.py:338
-#: code:addons/account/account_invoice.py:427
-#: code:addons/account/account_invoice.py:527
-#: code:addons/account/account_invoice.py:542
-#: code:addons/account/account_invoice.py:550
-#: code:addons/account/account_invoice.py:572
+#: code:addons/account/account_invoice.py:436
+#: code:addons/account/account_invoice.py:536
+#: code:addons/account/account_invoice.py:551
+#: code:addons/account/account_invoice.py:559
+#: code:addons/account/account_invoice.py:581
#: code:addons/account/wizard/account_move_journal.py:63
#, python-format
msgid "Configuration Error !"
@@ -5407,7 +5453,6 @@ msgid "Customer Invoices And Refunds"
msgstr ""
#. module: account
-#: field:account.analytic.line,amount_currency:0
#: field:account.entries.report,amount_currency:0
#: field:account.model.line,amount_currency:0
#: field:account.move.line,amount_currency:0
@@ -5575,7 +5620,7 @@ msgid "Generate Opening Entries"
msgstr "Генерировать открывающие проводки"
#. module: account
-#: code:addons/account/account_move_line.py:759
+#: code:addons/account/account_move_line.py:775
#, python-format
msgid "Already Reconciled!"
msgstr "Уже сверено !"
@@ -5608,14 +5653,14 @@ msgid "Child Accounts"
msgstr "Субсчета"
#. module: account
-#: code:addons/account/account_move_line.py:1214
+#: code:addons/account/account_move_line.py:1229
#, python-format
msgid "Move name (id): %s (%s)"
msgstr ""
#. module: account
#: view:account.move.line.reconcile:0
-#: code:addons/account/account_move_line.py:857
+#: code:addons/account/account_move_line.py:871
#, python-format
msgid "Write-Off"
msgstr "Списание"
@@ -5635,7 +5680,7 @@ msgstr "Доход"
#: selection:account.bank.statement.line,type:0
#: view:account.invoice:0
#: view:account.invoice.report:0
-#: code:addons/account/account_invoice.py:339
+#: code:addons/account/account_invoice.py:348
#, python-format
msgid "Supplier"
msgstr "Поставщик"
@@ -5665,7 +5710,7 @@ msgid "Account n°"
msgstr "№ счета"
#. module: account
-#: code:addons/account/account_invoice.py:88
+#: code:addons/account/account_invoice.py:91
#, python-format
msgid "Free Reference"
msgstr "Свободная Ссылка"
@@ -5680,7 +5725,9 @@ msgstr "Оценка"
#: selection:account.common.partner.report,result_selection:0
#: selection:account.partner.balance,result_selection:0
#: selection:account.partner.ledger,result_selection:0
+#: code:addons/account/report/account_aged_partner_balance.py:376
#: code:addons/account/report/account_partner_balance.py:301
+#: code:addons/account/report/account_partner_ledger.py:399
#, python-format
msgid "Receivable and Payable Accounts"
msgstr "Счета дебиторской и кредиторской задолженности"
@@ -5784,7 +5831,7 @@ msgid "Filter by"
msgstr "Фильтровать по"
#. module: account
-#: code:addons/account/account.py:2256
+#: code:addons/account/account.py:2273
#, python-format
msgid "You have a wrong expression \"%(...)s\" in your model !"
msgstr ""
@@ -5795,8 +5842,8 @@ msgid "Entry Date"
msgstr ""
#. module: account
-#: code:addons/account/account_move_line.py:1155
-#: code:addons/account/account_move_line.py:1238
+#: code:addons/account/account_move_line.py:1170
+#: code:addons/account/account_move_line.py:1253
#, python-format
msgid "You can not use an inactive account!"
msgstr "Нельзя использовать неактивный счет !"
@@ -5837,8 +5884,8 @@ msgid "Number of Days"
msgstr "Кол-во дней"
#. module: account
-#: code:addons/account/account_bank_statement.py:402
-#: code:addons/account/account_invoice.py:392
+#: code:addons/account/account_bank_statement.py:403
+#: code:addons/account/account_invoice.py:401
#: code:addons/account/wizard/account_period_close.py:51
#, python-format
msgid "Invalid action !"
@@ -5900,7 +5947,7 @@ msgid "Multipication factor for Base code"
msgstr ""
#. module: account
-#: code:addons/account/wizard/account_report_common.py:150
+#: code:addons/account/wizard/account_report_common.py:151
#, python-format
msgid "not implemented"
msgstr "не реализовано"
@@ -5939,6 +5986,8 @@ msgstr "Анализ проводок аналитики"
#. module: account
#: selection:account.aged.trial.balance,direction_selection:0
+#: code:addons/account/report/account_aged_partner_balance.py:381
+#, python-format
msgid "Past"
msgstr "Прошлые"
@@ -6218,6 +6267,8 @@ msgstr "Процент"
#. module: account
#: selection:account.report.general.ledger,sortby:0
+#: code:addons/account/report/account_general_ledger.py:307
+#, python-format
msgid "Journal & Partner"
msgstr "Журнал и партнер"
@@ -6227,7 +6278,7 @@ msgid "Power"
msgstr "Мощность"
#. module: account
-#: code:addons/account/account.py:3368
+#: code:addons/account/account.py:3385
#, python-format
msgid "Cannot generate an unused journal code."
msgstr ""
@@ -6267,6 +6318,7 @@ msgid "Applicable Type"
msgstr "Применимый тип"
#. module: account
+#: field:account.invoice,reference:0
#: field:account.invoice.line,invoice_id:0
msgid "Invoice Reference"
msgstr "Ссылка на счет"
@@ -6498,8 +6550,8 @@ msgid "You can not remove an account containing journal items."
msgstr ""
#. module: account
-#: code:addons/account/account_analytic_line.py:145
-#: code:addons/account/account_move_line.py:933
+#: code:addons/account/account_analytic_line.py:143
+#: code:addons/account/account_move_line.py:947
#, python-format
msgid "Entries: "
msgstr "Проводки: "
@@ -6515,7 +6567,7 @@ msgid "Currency of the related account journal."
msgstr ""
#. module: account
-#: code:addons/account/account.py:1563
+#: code:addons/account/account.py:1580
#, python-format
msgid "Couldn't create move between different companies"
msgstr "Нельзя создать перемещение между разными организациями"
@@ -6556,13 +6608,13 @@ msgstr "Состояние \"Черновик\""
#. module: account
#: view:account.move.line:0
-#: code:addons/account/account_move_line.py:1043
+#: code:addons/account/account_move_line.py:1058
#, python-format
msgid "Total debit"
msgstr "Всего по дебету"
#. module: account
-#: code:addons/account/account_move_line.py:808
+#: code:addons/account/account_move_line.py:824
#, python-format
msgid "Entry \"%s\" is not valid !"
msgstr "Проводка \"%s\" не верна !"
@@ -6636,25 +6688,26 @@ msgstr ""
#: code:addons/account/account.py:622
#: code:addons/account/account.py:624
#: code:addons/account/account.py:963
-#: code:addons/account/account.py:1052
-#: code:addons/account/account.py:1129
-#: code:addons/account/account.py:1344
-#: code:addons/account/account.py:1351
-#: code:addons/account/account.py:2280
-#: code:addons/account/account.py:2596
-#: code:addons/account/account_analytic_line.py:92
-#: code:addons/account/account_analytic_line.py:101
+#: code:addons/account/account.py:1057
+#: code:addons/account/account.py:1136
+#: code:addons/account/account.py:1352
+#: code:addons/account/account.py:1359
+#: code:addons/account/account.py:1361
+#: code:addons/account/account.py:2297
+#: code:addons/account/account.py:2613
+#: code:addons/account/account_analytic_line.py:90
+#: code:addons/account/account_analytic_line.py:99
#: code:addons/account/account_bank_statement.py:301
#: code:addons/account/account_bank_statement.py:314
#: code:addons/account/account_bank_statement.py:352
-#: code:addons/account/account_cash_statement.py:292
-#: code:addons/account/account_cash_statement.py:314
-#: code:addons/account/account_invoice.py:808
-#: code:addons/account/account_invoice.py:839
-#: code:addons/account/account_invoice.py:1030
-#: code:addons/account/account_move_line.py:1200
-#: code:addons/account/account_move_line.py:1216
-#: code:addons/account/account_move_line.py:1218
+#: code:addons/account/account_cash_statement.py:293
+#: code:addons/account/account_cash_statement.py:315
+#: code:addons/account/account_invoice.py:819
+#: code:addons/account/account_invoice.py:850
+#: code:addons/account/account_invoice.py:1042
+#: code:addons/account/account_move_line.py:1215
+#: code:addons/account/account_move_line.py:1231
+#: code:addons/account/account_move_line.py:1233
#: code:addons/account/wizard/account_invoice_refund.py:108
#: code:addons/account/wizard/account_invoice_refund.py:110
#: code:addons/account/wizard/account_open_closed_fiscalyear.py:39
@@ -6686,8 +6739,8 @@ msgid "Printed"
msgstr "Напечатан"
#. module: account
-#: code:addons/account/account_move_line.py:584
-#: code:addons/account/account_move_line.py:591
+#: code:addons/account/account_move_line.py:575
+#: code:addons/account/account_move_line.py:582
#, python-format
msgid "Error :"
msgstr ""
@@ -6746,7 +6799,7 @@ msgid "Display Ledger Report with One partner per page"
msgstr "Вывести отчет по регистру с одним партнером на странице"
#. module: account
-#: code:addons/account/account_move_line.py:1218
+#: code:addons/account/account_move_line.py:1233
#, python-format
msgid ""
"You can not do this modification on a reconciled entry! You can just change "
@@ -6906,7 +6959,7 @@ msgid "Total:"
msgstr "Всего:"
#. module: account
-#: code:addons/account/account.py:2229
+#: code:addons/account/account.py:2246
#, python-format
msgid ""
"You can specify year, month and date in the name of the model using the "
@@ -6944,7 +6997,7 @@ msgid "Taxes used in Sales"
msgstr ""
#. module: account
-#: code:addons/account/account_invoice.py:495
+#: code:addons/account/account_invoice.py:504
#: code:addons/account/wizard/account_invoice_refund.py:145
#, python-format
msgid "Data Insufficient !"
@@ -7012,14 +7065,14 @@ msgid "Source Document"
msgstr "Документ-источник"
#. module: account
-#: code:addons/account/account.py:1432
+#: code:addons/account/account.py:1449
#, python-format
msgid "You can not delete a posted journal entry \"%s\"!"
msgstr ""
#. module: account
#: selection:account.partner.ledger,filter:0
-#: code:addons/account/report/account_partner_ledger.py:59
+#: code:addons/account/report/account_partner_ledger.py:60
#: model:ir.actions.act_window,name:account.act_account_acount_move_line_open_unreconciled
#, python-format
msgid "Unreconciled Entries"
@@ -7119,8 +7172,8 @@ msgid "Are you sure you want to open this invoice ?"
msgstr "Вы уверены, что хотите открыть данный счет?"
#. module: account
-#: code:addons/account/account_invoice.py:528
-#: code:addons/account/account_invoice.py:543
+#: code:addons/account/account_invoice.py:537
+#: code:addons/account/account_invoice.py:552
#, python-format
msgid ""
"Can not find a chart of account, you should create one from the "
@@ -7133,7 +7186,7 @@ msgid "Opening Entries Expense Account"
msgstr ""
#. module: account
-#: code:addons/account/account_move_line.py:999
+#: code:addons/account/account_move_line.py:1014
#, python-format
msgid "Accounting Entries"
msgstr "Бухгалтерские проводки"
@@ -7270,7 +7323,7 @@ msgstr ""
"домена."
#. module: account
-#: code:addons/account/account.py:1088
+#: code:addons/account/account.py:1095
#, python-format
msgid "You should have chosen periods that belongs to the same company"
msgstr "Вы должны выбрать периоды принадлежащие одной компании."
@@ -7301,8 +7354,8 @@ msgid "Reporting"
msgstr "Отчетность"
#. module: account
-#: code:addons/account/account_move_line.py:759
-#: code:addons/account/account_move_line.py:842
+#: code:addons/account/account_move_line.py:775
+#: code:addons/account/account_move_line.py:856
#: code:addons/account/wizard/account_invoice_state.py:44
#: code:addons/account/wizard/account_invoice_state.py:68
#: code:addons/account/wizard/account_state_open.py:37
@@ -7393,7 +7446,7 @@ msgid "Sign on Reports"
msgstr "Знак в отчётах"
#. module: account
-#: code:addons/account/wizard/account_fiscalyear_close.py:73
+#: code:addons/account/wizard/account_fiscalyear_close.py:88
#, python-format
msgid "The periods to generate opening entries were not found"
msgstr ""
@@ -7404,7 +7457,7 @@ msgid "Root/View"
msgstr ""
#. module: account
-#: code:addons/account/account.py:3121
+#: code:addons/account/account.py:3138
#, python-format
msgid "OPEJ"
msgstr ""
@@ -7439,13 +7492,14 @@ msgid "Optional Information"
msgstr "Доп. информация"
#. module: account
-#: code:addons/account/wizard/account_fiscalyear_close.py:84
+#: code:addons/account/wizard/account_fiscalyear_close.py:100
#, python-format
msgid "The journal must have default credit and debit account"
msgstr "Журнал должен иметь дебитовый и кредитовый счет по умолчанию"
#. module: account
#: report:account.general.journal:0
+#: xsl:account.transfer:0
msgid ":"
msgstr ":"
@@ -7474,13 +7528,13 @@ msgid "Maturity Date"
msgstr ""
#. module: account
-#: code:addons/account/account_move_line.py:1302
+#: code:addons/account/account_move_line.py:1317
#, python-format
msgid "Bad account !"
msgstr "Неверный счет !"
#. module: account
-#: code:addons/account/account.py:3108
+#: code:addons/account/account.py:3125
#, python-format
msgid "Sales Journal"
msgstr "Журнал продаж"
@@ -7497,7 +7551,7 @@ msgid "Invoice Tax"
msgstr "Налог по счету"
#. module: account
-#: code:addons/account/account_move_line.py:1277
+#: code:addons/account/account_move_line.py:1292
#, python-format
msgid "No piece number !"
msgstr "Нет номера части !"
@@ -7547,7 +7601,7 @@ msgstr "По"
#. module: account
#: selection:account.move.line,centralisation:0
-#: code:addons/account/account.py:1518
+#: code:addons/account/account.py:1535
#, python-format
msgid "Currency Adjustment"
msgstr ""
@@ -7595,13 +7649,15 @@ msgstr "Май"
#: selection:account.common.partner.report,result_selection:0
#: selection:account.partner.balance,result_selection:0
#: selection:account.partner.ledger,result_selection:0
+#: code:addons/account/report/account_aged_partner_balance.py:374
#: code:addons/account/report/account_partner_balance.py:299
+#: code:addons/account/report/account_partner_ledger.py:397
#, python-format
msgid "Payable Accounts"
msgstr "Кредиторская задолженность"
#. module: account
-#: code:addons/account/account_invoice.py:732
+#: code:addons/account/account_invoice.py:741
#, python-format
msgid "Global taxes defined, but they are not in invoice lines !"
msgstr ""
@@ -7645,7 +7701,7 @@ msgstr ""
#: selection:account.bank.accounts.wizard,account_type:0
#: selection:account.entries.report,type:0
#: selection:account.journal,type:0
-#: code:addons/account/account.py:3003
+#: code:addons/account/account.py:3020
#, python-format
msgid "Cash"
msgstr "Наличные"
@@ -7657,15 +7713,15 @@ msgid "Account Destination"
msgstr "Счет назначения"
#. module: account
-#: code:addons/account/account.py:1431
-#: code:addons/account/account.py:1460
-#: code:addons/account/account.py:1467
-#: code:addons/account/account_invoice.py:920
-#: code:addons/account/account_move_line.py:1104
-#: code:addons/account/wizard/account_automatic_reconcile.py:152
-#: code:addons/account/wizard/account_fiscalyear_close.py:73
-#: code:addons/account/wizard/account_fiscalyear_close.py:83
-#: code:addons/account/wizard/account_fiscalyear_close.py:86
+#: code:addons/account/account.py:1448
+#: code:addons/account/account.py:1477
+#: code:addons/account/account.py:1484
+#: code:addons/account/account_invoice.py:931
+#: code:addons/account/account_move_line.py:1119
+#: code:addons/account/wizard/account_automatic_reconcile.py:148
+#: code:addons/account/wizard/account_fiscalyear_close.py:88
+#: code:addons/account/wizard/account_fiscalyear_close.py:99
+#: code:addons/account/wizard/account_fiscalyear_close.py:102
#: code:addons/account/wizard/account_move_journal.py:165
#: code:addons/account/wizard/account_report_aged_partner_balance.py:56
#: code:addons/account/wizard/account_report_aged_partner_balance.py:58
@@ -7820,13 +7876,14 @@ msgstr "Фиксированный"
#: code:addons/account/account.py:645
#: code:addons/account/account.py:664
#: code:addons/account/account.py:787
-#: code:addons/account/account.py:1077
-#: code:addons/account/account_invoice.py:732
-#: code:addons/account/account_invoice.py:735
-#: code:addons/account/account_invoice.py:738
+#: code:addons/account/account.py:1082
+#: code:addons/account/account_invoice.py:741
+#: code:addons/account/account_invoice.py:744
+#: code:addons/account/account_invoice.py:747
#: code:addons/account/account_move_line.py:97
-#: code:addons/account/account_move_line.py:750
-#: code:addons/account/account_move_line.py:803
+#: code:addons/account/account_move_line.py:766
+#: code:addons/account/account_move_line.py:819
+#: code:addons/account/wizard/account_fiscalyear_close.py:62
#, python-format
msgid "Warning !"
msgstr "Warning !"
@@ -7878,7 +7935,7 @@ msgid "Select a currency to apply on the invoice"
msgstr "Выбрать валюту применяемую в счете"
#. module: account
-#: code:addons/account/account.py:3446
+#: code:addons/account/account.py:3463
#, python-format
msgid ""
"The bank account defined on the selected chart of accounts hasn't a code."
@@ -7891,7 +7948,7 @@ msgid "Can not %s draft/proforma/cancel invoice."
msgstr "Нельзя %s черновик/проформу/отмененный счет."
#. module: account
-#: code:addons/account/account_invoice.py:810
+#: code:addons/account/account_invoice.py:821
#, python-format
msgid "No Invoice Lines !"
msgstr "Нет позиций в счете !"
@@ -7966,7 +8023,7 @@ msgid "Deferral Method"
msgstr "Метод отсрочки"
#. module: account
-#: code:addons/account/account_invoice.py:379
+#: code:addons/account/account_invoice.py:388
#, python-format
msgid "Invoice '%s' is paid."
msgstr "Счет '%s' оплачен."
@@ -8032,7 +8089,7 @@ msgid "Associated Partner"
msgstr "Связанный контрагент"
#. module: account
-#: code:addons/account/account_invoice.py:1332
+#: code:addons/account/account_invoice.py:1345
#, python-format
msgid "You must first select a partner !"
msgstr "Сначала вы должны выбрать партнера !"
@@ -8078,7 +8135,7 @@ msgid ""
msgstr ""
#. module: account
-#: code:addons/account/account_invoice.py:428
+#: code:addons/account/account_invoice.py:437
#, python-format
msgid ""
"Can not find a chart of accounts for this company, you should create one."
@@ -8100,7 +8157,7 @@ msgid "Choose Fiscal Year"
msgstr "Закрыть отчетный год"
#. module: account
-#: code:addons/account/account.py:3111
+#: code:addons/account/account.py:3128
#, python-format
msgid "Purchase Refund Journal"
msgstr "Журнал возврата покупок"
@@ -8190,7 +8247,7 @@ msgid "Compute Code for Taxes Included Prices"
msgstr "Код расчета для цен с налогами"
#. module: account
-#: code:addons/account/account_invoice.py:1030
+#: code:addons/account/account_invoice.py:1042
#, python-format
msgid ""
"You can not cancel an invoice which is partially paid! You need to "
@@ -8320,7 +8377,7 @@ msgid "current month"
msgstr ""
#. module: account
-#: code:addons/account/account.py:1052
+#: code:addons/account/account.py:1057
#, python-format
msgid ""
"No period defined for this date: %s !\n"
@@ -8399,10 +8456,12 @@ msgstr "Журнал возвратов"
#. module: account
#: report:account.account.balance:0
#: report:account.central.journal:0
+#: report:account.financial.report:0
#: report:account.general.journal:0
#: report:account.general.ledger:0
#: report:account.general.ledger_landscape:0
#: report:account.partner.balance:0
+#: report:account.third_party_ledger:0
msgid "Filter By"
msgstr "Фильтровать по"
@@ -8439,7 +8498,7 @@ msgid "The partner account used for this invoice."
msgstr "Бух. счет партнера будет использоваться для этого счета."
#. module: account
-#: code:addons/account/account.py:3296
+#: code:addons/account/account.py:3313
#, python-format
msgid "Tax %.2f%%"
msgstr ""
@@ -8462,7 +8521,7 @@ msgid "Payment Term Line"
msgstr "Позиция условий оплаты"
#. module: account
-#: code:addons/account/account.py:3109
+#: code:addons/account/account.py:3126
#, python-format
msgid "Purchase Journal"
msgstr "Журнал покупок"
@@ -8548,7 +8607,7 @@ msgid "Unpaid Invoices"
msgstr "Неоплаченные счета"
#. module: account
-#: code:addons/account/account_invoice.py:495
+#: code:addons/account/account_invoice.py:504
#, python-format
msgid "The payment term of supplier does not have a payment term line!"
msgstr ""
@@ -8654,7 +8713,7 @@ msgid "Keep empty for all open fiscal years"
msgstr "Оставьте пустым для всех открытых финансовых лет"
#. module: account
-#: code:addons/account/account_move_line.py:1105
+#: code:addons/account/account_move_line.py:1120
#, python-format
msgid "The account move (%s) for centralisation has been confirmed!"
msgstr ""
@@ -8668,7 +8727,7 @@ msgstr ""
"Сумма выражается в дополнительный валюте, если эта проводка мульти-валютная."
#. module: account
-#: code:addons/account/account.py:1307
+#: code:addons/account/account.py:1315
#, python-format
msgid ""
"You can not validate a non-balanced entry !\n"
@@ -8742,7 +8801,7 @@ msgid "Contact Address"
msgstr "Адрес контакта"
#. module: account
-#: code:addons/account/account.py:2256
+#: code:addons/account/account.py:2273
#, python-format
msgid "Wrong model !"
msgstr ""
@@ -8777,12 +8836,14 @@ msgstr "Договоры"
#: field:account.cashbox.line,starting_id:0
#: field:account.entries.report,reconcile_id:0
#: field:account.financial.report,balance:0
+#: field:account.financial.report,credit:0
+#: field:account.financial.report,debit:0
msgid "unknown"
msgstr "неизвестен"
#. module: account
#: field:account.fiscalyear.close,journal_id:0
-#: code:addons/account/account.py:3113
+#: code:addons/account/account.py:3130
#, python-format
msgid "Opening Entries Journal"
msgstr "Журнал проводок открытия"
@@ -8804,7 +8865,7 @@ msgstr ""
"прибылям и убыткам."
#. module: account
-#: code:addons/account/account_invoice.py:808
+#: code:addons/account/account_invoice.py:819
#, python-format
msgid "Please define sequence on the journal related to this invoice."
msgstr ""
@@ -8892,7 +8953,7 @@ msgid "Period from"
msgstr "Период с"
#. module: account
-#: code:addons/account/account.py:3110
+#: code:addons/account/account.py:3127
#, python-format
msgid "Sales Refund Journal"
msgstr "Журнал возврата продаж"
@@ -8939,7 +9000,7 @@ msgid "Purchase Tax(%)"
msgstr "Налог на покупку(%)"
#. module: account
-#: code:addons/account/account_invoice.py:810
+#: code:addons/account/account_invoice.py:821
#, python-format
msgid "Please create some invoice lines."
msgstr "Пожалуйста, создайте позиции счета"
@@ -8955,7 +9016,7 @@ msgid "Display Detail"
msgstr ""
#. module: account
-#: code:addons/account/account.py:3118
+#: code:addons/account/account.py:3135
#, python-format
msgid "SCNJ"
msgstr ""
@@ -8987,8 +9048,6 @@ msgstr "Конец периода"
#: field:account.account.template,financial_report_ids:0
#: model:ir.actions.act_window,name:account.action_account_financial_report_tree
#: model:ir.actions.act_window,name:account.action_account_report
-#: model:ir.actions.act_window,name:account.action_account_report_bs
-#: model:ir.actions.act_window,name:account.action_account_report_pl
#: model:ir.ui.menu,name:account.menu_account_reports
msgid "Financial Reports"
msgstr ""
@@ -9003,6 +9062,7 @@ msgstr ""
#: field:account.common.journal.report,period_from:0
#: field:account.common.partner.report,period_from:0
#: field:account.common.report,period_from:0
+#: report:account.financial.report:0
#: report:account.general.journal:0
#: field:account.general.journal,period_from:0
#: report:account.general.ledger:0
@@ -9023,6 +9083,7 @@ msgstr "Начало периода"
#. module: account
#: field:account.aged.trial.balance,direction_selection:0
+#: report:account.aged_trial_balance:0
msgid "Analysis Direction"
msgstr "Направление анализа"
@@ -9042,7 +9103,7 @@ msgstr "Вид журнала"
#. module: account
#: view:account.move.line:0
-#: code:addons/account/account_move_line.py:1046
+#: code:addons/account/account_move_line.py:1061
#, python-format
msgid "Total credit"
msgstr "Всего кредит"
@@ -9107,6 +9168,7 @@ msgstr "Банковские выписки"
#: report:account.analytic.account.inverted.balance:0
#: report:account.central.journal:0
#: field:account.entries.report,balance:0
+#: report:account.financial.report:0
#: report:account.general.journal:0
#: report:account.general.ledger:0
#: report:account.general.ledger_landscape:0
@@ -9182,7 +9244,7 @@ msgid ""
msgstr ""
#. module: account
-#: code:addons/account/wizard/account_automatic_reconcile.py:152
+#: code:addons/account/wizard/account_automatic_reconcile.py:148
#, python-format
msgid "You must select accounts to reconcile"
msgstr "Вы должны выбрать счета для сверки"
@@ -9204,7 +9266,6 @@ msgid ""
msgstr ""
#. module: account
-#: report:account.third_party_ledger:0
#: report:account.third_party_ledger_other:0
msgid "Filters By"
msgstr ""
@@ -9226,7 +9287,7 @@ msgid "Move"
msgstr "Операция"
#. module: account
-#: code:addons/account/account_move_line.py:1153
+#: code:addons/account/account_move_line.py:1168
#, python-format
msgid "You can not change the tax, you should remove and recreate lines !"
msgstr ""
@@ -9285,7 +9346,7 @@ msgid "Consolidated Children"
msgstr "Субсчета"
#. module: account
-#: code:addons/account/wizard/account_fiscalyear_close.py:87
+#: code:addons/account/wizard/account_fiscalyear_close.py:103
#, python-format
msgid ""
"The journal must have centralised counterpart without the Skipping draft "
@@ -9346,6 +9407,7 @@ msgstr ""
#: field:account.common.journal.report,period_to:0
#: field:account.common.partner.report,period_to:0
#: field:account.common.report,period_to:0
+#: report:account.financial.report:0
#: report:account.general.journal:0
#: field:account.general.journal,period_to:0
#: report:account.general.ledger:0
@@ -9402,6 +9464,7 @@ msgstr "Проводка подписки"
#. module: account
#: report:account.account.balance:0
#: field:account.aged.trial.balance,date_from:0
+#: report:account.aged_trial_balance:0
#: field:account.balance.report,date_from:0
#: report:account.central.journal:0
#: field:account.central.journal,date_from:0
@@ -9409,6 +9472,7 @@ msgstr "Проводка подписки"
#: field:account.common.journal.report,date_from:0
#: field:account.common.partner.report,date_from:0
#: field:account.common.report,date_from:0
+#: report:account.financial.report:0
#: field:account.fiscalyear,date_start:0
#: report:account.general.journal:0
#: field:account.general.journal,date_from:0
@@ -9451,7 +9515,7 @@ msgid "Unreconciled"
msgstr "Не сверенные"
#. module: account
-#: code:addons/account/account_invoice.py:828
+#: code:addons/account/account_invoice.py:839
#, python-format
msgid "Bad total !"
msgstr "Плохой итог !"
@@ -9510,7 +9574,7 @@ msgid "Comparison"
msgstr ""
#. module: account
-#: code:addons/account/account_invoice.py:372
+#: code:addons/account/account_invoice.py:381
#, python-format
msgid "Unknown Error"
msgstr "Неизвестная ошибка"
@@ -9549,6 +9613,7 @@ msgstr "Утвердить операцию по счету"
#: report:account.analytic.account.inverted.balance:0
#: report:account.central.journal:0
#: field:account.entries.report,credit:0
+#: report:account.financial.report:0
#: report:account.general.journal:0
#: report:account.general.ledger:0
#: report:account.general.ledger_landscape:0
@@ -9650,9 +9715,11 @@ msgstr ""
#: view:accounting.report:0
#: selection:accounting.report,filter:0
#: selection:accounting.report,filter_cmp:0
+#: code:addons/account/report/common_report_header.py:99
#: model:ir.actions.act_window,name:account.action_account_period_form
#: model:ir.ui.menu,name:account.menu_action_account_period_form
#: model:ir.ui.menu,name:account.next_id_23
+#, python-format
msgid "Periods"
msgstr "Периоды"
@@ -9817,6 +9884,7 @@ msgstr "Проведено"
#: field:account.common.journal.report,date_to:0
#: field:account.common.partner.report,date_to:0
#: field:account.common.report,date_to:0
+#: report:account.financial.report:0
#: field:account.fiscalyear,date_stop:0
#: report:account.general.journal:0
#: field:account.general.journal,date_to:0
@@ -9864,7 +9932,7 @@ msgid "No detail"
msgstr ""
#. module: account
-#: code:addons/account/account_analytic_line.py:102
+#: code:addons/account/account_analytic_line.py:100
#, python-format
msgid "There is no income account defined for this product: \"%s\" (id:%d)"
msgstr "Не определен счет доходов для ТМЦ: \"%s\" (id:%d)"
@@ -9900,6 +9968,7 @@ msgid "Verification Total"
msgstr ""
#. module: account
+#: report:account.aged_trial_balance:0
#: report:account.analytic.account.balance:0
#: report:account.analytic.account.inverted.balance:0
#: report:account.analytic.account.quantity_cost_ledger:0
@@ -9920,6 +9989,7 @@ msgstr "Журнал: Все"
#. module: account
#: field:account.account,company_id:0
+#: report:account.account.balance:0
#: field:account.aged.trial.balance,company_id:0
#: field:account.analytic.journal,company_id:0
#: field:account.balance.report,company_id:0
@@ -9934,7 +10004,9 @@ msgstr "Журнал: Все"
#: field:account.entries.report,company_id:0
#: field:account.fiscal.position,company_id:0
#: field:account.fiscalyear,company_id:0
+#: report:account.general.journal:0
#: field:account.general.journal,company_id:0
+#: report:account.general.ledger_landscape:0
#: field:account.installer,company_id:0
#: field:account.invoice,company_id:0
#: field:account.invoice.line,company_id:0
@@ -9944,6 +10016,8 @@ msgstr "Журнал: Все"
#: view:account.journal:0
#: field:account.journal,company_id:0
#: field:account.journal.period,company_id:0
+#: report:account.journal.period.print:0
+#: report:account.journal.period.print.sale.purchase:0
#: field:account.model,company_id:0
#: field:account.move,company_id:0
#: field:account.move.line,company_id:0
@@ -10103,6 +10177,7 @@ msgstr "Счет поставщика"
#: report:account.analytic.account.inverted.balance:0
#: report:account.central.journal:0
#: field:account.entries.report,debit:0
+#: report:account.financial.report:0
#: report:account.general.journal:0
#: report:account.general.ledger:0
#: report:account.general.ledger_landscape:0
@@ -10136,6 +10211,8 @@ msgstr "Ошибка ! Нельзя создать рекурсивные шаб
#. module: account
#: selection:account.print.journal,sort_selection:0
+#: code:addons/account/report/account_journal.py:197
+#, python-format
msgid "Journal Entry Number"
msgstr ""
@@ -10153,7 +10230,7 @@ msgid ""
msgstr ""
#. module: account
-#: code:addons/account/account_move_line.py:832
+#: code:addons/account/account_move_line.py:843
#, python-format
msgid "Entry is already reconciled"
msgstr "Проводка уже сверена"
@@ -10189,8 +10266,10 @@ msgid ""
msgstr ""
#. module: account
+#: report:account.account.balance:0
#: selection:account.balance.report,display_account:0
#: selection:account.common.account.report,display_account:0
+#: report:account.general.ledger_landscape:0
#: selection:account.report.general.ledger,display_account:0
msgid "With movements"
msgstr "С движением"
@@ -10313,8 +10392,8 @@ msgid "Statistic Reports"
msgstr "Статистические отчеты"
#. module: account
-#: code:addons/account/account_move_line.py:1155
-#: code:addons/account/account_move_line.py:1238
+#: code:addons/account/account_move_line.py:1170
+#: code:addons/account/account_move_line.py:1253
#, python-format
msgid "Bad account!"
msgstr "Плохой счет!"
@@ -10340,7 +10419,7 @@ msgid "Accounts Mapping"
msgstr "Отображение счетов"
#. module: account
-#: code:addons/account/account_invoice.py:364
+#: code:addons/account/account_invoice.py:373
#, python-format
msgid "Invoice '%s' is waiting for validation."
msgstr "Счет '%s' ожидает утверждения."
@@ -10530,6 +10609,7 @@ msgstr "account.addtmpl.wizard"
#. module: account
#: field:account.aged.trial.balance,result_selection:0
+#: report:account.aged_trial_balance:0
#: field:account.common.partner.report,result_selection:0
#: report:account.partner.balance:0
#: field:account.partner.balance,result_selection:0
@@ -10608,6 +10688,8 @@ msgstr "Срок платежа"
#. module: account
#: selection:account.aged.trial.balance,direction_selection:0
+#: code:addons/account/report/account_aged_partner_balance.py:383
+#, python-format
msgid "Future"
msgstr "Будущие"
diff --git a/addons/board/i18n/ru.po b/addons/board/i18n/ru.po
index 4b10359bca5..5734590526c 100644
--- a/addons/board/i18n/ru.po
+++ b/addons/board/i18n/ru.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2010-10-30 10:01+0000\n"
-"Last-Translator: OpenERP Administrators \n"
+"PO-Revision-Date: 2012-10-26 09:05+0000\n"
+"Last-Translator: Chertykov Denis \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-10-19 05:20+0000\n"
-"X-Generator: Launchpad (build 16165)\n"
+"X-Launchpad-Export-Date: 2012-10-27 04:59+0000\n"
+"X-Generator: Launchpad (build 16194)\n"
#. module: board
#: view:res.log.report:0
@@ -103,7 +103,7 @@ msgstr "Месячная активность на документ"
#. module: board
#: view:board.board:0
msgid "Configuration Overview"
-msgstr ""
+msgstr "Обзор конфигурации"
#. module: board
#: model:ir.actions.act_window,name:board.action_view_board_list_form
@@ -211,7 +211,7 @@ msgstr "Январь"
#. module: board
#: view:board.board:0
msgid "Users"
-msgstr ""
+msgstr "Пользователи"
#. module: board
#: selection:res.log.report,month:0
@@ -262,7 +262,7 @@ msgstr "Модель"
#. module: board
#: model:ir.actions.act_window,name:board.board_homepage_action
msgid "Home Page"
-msgstr ""
+msgstr "Домашняя страница"
#. module: board
#: model:ir.actions.act_window,name:board.action_latest_activities_tree
diff --git a/addons/mail/i18n/hu.po b/addons/mail/i18n/hu.po
index 467485a589d..86e15e751b3 100644
--- a/addons/mail/i18n/hu.po
+++ b/addons/mail/i18n/hu.po
@@ -7,21 +7,20 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-09 00:36+0000\n"
-"PO-Revision-Date: 2011-01-21 12:01+0000\n"
-"Last-Translator: NOVOTRADE RENDSZERHÁZ ( novotrade.hu ) "
-"\n"
+"PO-Revision-Date: 2012-10-26 12:29+0000\n"
+"Last-Translator: Herczeg Péter \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-10-19 05:36+0000\n"
-"X-Generator: Launchpad (build 16165)\n"
+"X-Launchpad-Export-Date: 2012-10-27 04:59+0000\n"
+"X-Generator: Launchpad (build 16194)\n"
#. module: mail
#: field:mail.compose.message,subtype:0 field:mail.message,subtype:0
#: field:mail.message.common,subtype:0
msgid "Message Type"
-msgstr ""
+msgstr "Üzenettípus"
#. module: mail
#: help:mail.compose.message,auto_delete:0
@@ -31,7 +30,7 @@ msgstr ""
#. module: mail
#: view:mail.message:0
msgid "Open Related Document"
-msgstr ""
+msgstr "Kapcsolódó dokumentum megnyitása"
#. module: mail
#: view:mail.message:0
@@ -57,7 +56,7 @@ msgstr "Csoportosítás..."
#: model:ir.actions.act_window,name:mail.action_email_compose_message_wizard
#: view:mail.compose.message:0
msgid "Compose Email"
-msgstr ""
+msgstr "Email írás"
#. module: mail
#: help:mail.compose.message,body_text:0 help:mail.message,body_text:0
@@ -68,7 +67,7 @@ msgstr ""
#. module: mail
#: view:mail.compose.message:0
msgid "Body"
-msgstr ""
+msgstr "Levéltörzs"
#. module: mail
#: help:mail.compose.message,email_to:0 help:mail.message,email_to:0
@@ -85,7 +84,7 @@ msgstr ""
#. module: mail
#: view:mail.message:0 selection:mail.message,state:0
msgid "Received"
-msgstr ""
+msgstr "Fogadott"
#. module: mail
#: view:mail.message:0
@@ -95,18 +94,18 @@ msgstr ""
#. module: mail
#: field:mail.message,mail_server_id:0
msgid "Outgoing mail server"
-msgstr ""
+msgstr "Kimenő levelező szerver"
#. module: mail
#: selection:mail.message,state:0
msgid "Cancelled"
-msgstr ""
+msgstr "Megszakítva"
#. module: mail
#: field:mail.compose.message,reply_to:0 field:mail.message,reply_to:0
#: field:mail.message.common,reply_to:0
msgid "Reply-To"
-msgstr ""
+msgstr "Válaszcím"
#. module: mail
#: help:mail.compose.message,body_html:0 help:mail.message,body_html:0
@@ -117,7 +116,7 @@ msgstr ""
#. module: mail
#: field:mail.compose.message,auto_delete:0 field:mail.message,auto_delete:0
msgid "Auto Delete"
-msgstr ""
+msgstr "Automatikus törlés"
#. module: mail
#: help:mail.compose.message,email_bcc:0 help:mail.message,email_bcc:0
@@ -146,37 +145,37 @@ msgstr ""
#: field:mail.compose.message,email_from:0 field:mail.message,email_from:0
#: field:mail.message.common,email_from:0
msgid "From"
-msgstr ""
+msgstr "Feladó"
#. module: mail
#: view:mail.message:0
msgid "Email message"
-msgstr ""
+msgstr "Email üzenet"
#. module: mail
#: view:mail.compose.message:0
msgid "Send"
-msgstr ""
+msgstr "Küldés"
#. module: mail
#: view:mail.message:0
msgid "Failed"
-msgstr ""
+msgstr "Sikertelen"
#. module: mail
#: view:mail.message:0 field:mail.message,state:0
msgid "State"
-msgstr ""
+msgstr "Állapot"
#. module: mail
#: view:mail.message:0
msgid "Reply"
-msgstr ""
+msgstr "Válasz"
#. module: mail
#: view:mail.message:0 selection:mail.message,state:0
msgid "Sent"
-msgstr ""
+msgstr "Elküldött"
#. module: mail
#: help:mail.compose.message,subtype:0 help:mail.message,subtype:0
@@ -189,7 +188,7 @@ msgstr ""
#. module: mail
#: view:mail.message:0
msgid "Recipients"
-msgstr ""
+msgstr "Címzettek"
#. module: mail
#: model:ir.model,name:mail.model_mail_compose_message
@@ -205,7 +204,7 @@ msgstr ""
#. module: mail
#: view:mail.message:0
msgid "Advanced"
-msgstr ""
+msgstr "Speciális"
#. module: mail
#: code:addons/mail/wizard/mail_compose_message.py:157
@@ -242,17 +241,17 @@ msgstr "Partner neve"
#. module: mail
#: view:mail.message:0
msgid "Retry"
-msgstr ""
+msgstr "Újra"
#. module: mail
#: view:mail.message:0 selection:mail.message,state:0
msgid "Outgoing"
-msgstr ""
+msgstr "Kimenő"
#. module: mail
#: view:mail.message:0
msgid "Send Now"
-msgstr ""
+msgstr "Küldés most"
#. module: mail
#: field:mail.message,partner_id:0
@@ -262,7 +261,7 @@ msgstr ""
#. module: mail
#: view:mail.message:0
msgid "User"
-msgstr ""
+msgstr "Felhasználó"
#. module: mail
#: field:mail.compose.message,date:0 field:mail.message,date:0
@@ -273,7 +272,7 @@ msgstr "Dátum"
#. module: mail
#: view:mail.message:0
msgid "Extended Filters..."
-msgstr ""
+msgstr "Kiterjesztett szűrők…"
#. module: mail
#: code:addons/mail/wizard/mail_compose_message.py:153
@@ -290,7 +289,7 @@ msgstr ""
#. module: mail
#: field:mail.message,original:0
msgid "Original"
-msgstr ""
+msgstr "Eredeti"
#. module: mail
#: code:addons/mail/mail_thread.py:247 view:res.partner:0
@@ -341,12 +340,12 @@ msgstr ""
#. module: mail
#: view:mail.compose.message:0 view:mail.message:0
msgid "Cancel"
-msgstr ""
+msgstr "Mégsem"
#. module: mail
#: view:mail.message:0
msgid "Open"
-msgstr ""
+msgstr "Megnyitás"
#. module: mail
#: code:addons/mail/mail_thread.py:434
@@ -357,7 +356,7 @@ msgstr ""
#. module: mail
#: field:mail.message,user_id:0
msgid "Related User"
-msgstr ""
+msgstr "Kapcsolódó felhasználó"
#. module: mail
#: help:mail.compose.message,headers:0 help:mail.message,headers:0
diff --git a/addons/mail/i18n/ru.po b/addons/mail/i18n/ru.po
index d85c3660ed3..61b01489c39 100644
--- a/addons/mail/i18n/ru.po
+++ b/addons/mail/i18n/ru.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-02-09 00:36+0000\n"
-"PO-Revision-Date: 2011-01-25 08:25+0000\n"
-"Last-Translator: Alexey Y. Fedotov \n"
+"PO-Revision-Date: 2012-10-26 17:02+0000\n"
+"Last-Translator: Chertykov Denis \n"
"Language-Team: Russian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-10-19 05:36+0000\n"
-"X-Generator: Launchpad (build 16165)\n"
+"X-Launchpad-Export-Date: 2012-10-27 04:59+0000\n"
+"X-Generator: Launchpad (build 16194)\n"
#. module: mail
#: field:mail.compose.message,subtype:0 field:mail.message,subtype:0
@@ -26,12 +26,12 @@ msgstr ""
#. module: mail
#: help:mail.compose.message,auto_delete:0
msgid "Permanently delete emails after sending"
-msgstr ""
+msgstr "Не сохранять сообщения после отправки"
#. module: mail
#: view:mail.message:0
msgid "Open Related Document"
-msgstr ""
+msgstr "Открыть связанный документ"
#. module: mail
#: view:mail.message:0
@@ -46,7 +46,7 @@ msgstr "Подробности сообщения"
#. module: mail
#: view:mail.thread:0
msgid "Communication History"
-msgstr ""
+msgstr "История общения"
#. module: mail
#: view:mail.message:0
@@ -57,24 +57,24 @@ msgstr "Объеденить по..."
#: model:ir.actions.act_window,name:mail.action_email_compose_message_wizard
#: view:mail.compose.message:0
msgid "Compose Email"
-msgstr ""
+msgstr "Написать письмо"
#. module: mail
#: help:mail.compose.message,body_text:0 help:mail.message,body_text:0
#: help:mail.message.common,body_text:0
msgid "Plain-text version of the message"
-msgstr ""
+msgstr "Простая текстовая версия сообщения"
#. module: mail
#: view:mail.compose.message:0
msgid "Body"
-msgstr ""
+msgstr "Содержимое"
#. module: mail
#: help:mail.compose.message,email_to:0 help:mail.message,email_to:0
#: help:mail.message.common,email_to:0
msgid "Message recipients"
-msgstr ""
+msgstr "Получатели сообщения"
#. module: mail
#: field:mail.compose.message,body_text:0 field:mail.message,body_text:0
@@ -85,7 +85,7 @@ msgstr ""
#. module: mail
#: view:mail.message:0 selection:mail.message,state:0
msgid "Received"
-msgstr ""
+msgstr "Получено"
#. module: mail
#: view:mail.message:0
@@ -95,40 +95,40 @@ msgstr "Цепочка"
#. module: mail
#: field:mail.message,mail_server_id:0
msgid "Outgoing mail server"
-msgstr ""
+msgstr "Сервер исходящей почты"
#. module: mail
#: selection:mail.message,state:0
msgid "Cancelled"
-msgstr ""
+msgstr "Отменено"
#. module: mail
#: field:mail.compose.message,reply_to:0 field:mail.message,reply_to:0
#: field:mail.message.common,reply_to:0
msgid "Reply-To"
-msgstr ""
+msgstr "Адрес ответа"
#. module: mail
#: help:mail.compose.message,body_html:0 help:mail.message,body_html:0
#: help:mail.message.common,body_html:0
msgid "Rich-text/HTML version of the message"
-msgstr ""
+msgstr "Форматный текст/HTML версия сообщения"
#. module: mail
#: field:mail.compose.message,auto_delete:0 field:mail.message,auto_delete:0
msgid "Auto Delete"
-msgstr ""
+msgstr "Авто удаление"
#. module: mail
#: help:mail.compose.message,email_bcc:0 help:mail.message,email_bcc:0
#: help:mail.message.common,email_bcc:0
msgid "Blind carbon copy message recipients"
-msgstr ""
+msgstr "Получатели скрытой копии сообщения"
#. module: mail
#: model:ir.model,name:mail.model_res_partner view:mail.message:0
msgid "Partner"
-msgstr "Контрагент"
+msgstr "Партнёр"
#. module: mail
#: field:mail.compose.message,subject:0 field:mail.message,subject:0
@@ -140,7 +140,7 @@ msgstr "Тема"
#: code:addons/mail/wizard/mail_compose_message.py:152
#, python-format
msgid "On %(date)s, "
-msgstr ""
+msgstr "За %(date)s, "
#. module: mail
#: field:mail.compose.message,email_from:0 field:mail.message,email_from:0
@@ -151,32 +151,32 @@ msgstr "От"
#. module: mail
#: view:mail.message:0
msgid "Email message"
-msgstr ""
+msgstr "Сообщение эл. почты"
#. module: mail
#: view:mail.compose.message:0
msgid "Send"
-msgstr ""
+msgstr "Отправить"
#. module: mail
#: view:mail.message:0
msgid "Failed"
-msgstr ""
+msgstr "Ошибка"
#. module: mail
#: view:mail.message:0 field:mail.message,state:0
msgid "State"
-msgstr ""
+msgstr "Состояние"
#. module: mail
#: view:mail.message:0
msgid "Reply"
-msgstr ""
+msgstr "Ответить"
#. module: mail
#: view:mail.message:0 selection:mail.message,state:0
msgid "Sent"
-msgstr ""
+msgstr "Отправлено"
#. module: mail
#: help:mail.compose.message,subtype:0 help:mail.message,subtype:0
@@ -185,11 +185,13 @@ msgid ""
"Type of message, usually 'html' or 'plain', used to select plaintext or rich "
"text contents accordingly"
msgstr ""
+"Тип сообщения, обычно 'html' или 'простой', используемый для выбора "
+"содержимого соответственно простого текста или форматного текста"
#. module: mail
#: view:mail.message:0
msgid "Recipients"
-msgstr ""
+msgstr "Получатели"
#. module: mail
#: model:ir.model,name:mail.model_mail_compose_message
@@ -200,18 +202,18 @@ msgstr ""
#: field:mail.compose.message,res_id:0 field:mail.message,res_id:0
#: field:mail.message.common,res_id:0
msgid "Related Document ID"
-msgstr ""
+msgstr "ID связанного документа"
#. module: mail
#: view:mail.message:0
msgid "Advanced"
-msgstr ""
+msgstr "Дополнительно"
#. module: mail
#: code:addons/mail/wizard/mail_compose_message.py:157
#, python-format
msgid "Re:"
-msgstr ""
+msgstr "Ответ:"
#. module: mail
#: field:mail.compose.message,model:0 field:mail.message,model:0
@@ -232,37 +234,37 @@ msgstr "Искать эл. почту"
#. module: mail
#: help:mail.message,original:0
msgid "Original version of the message, as it was sent on the network"
-msgstr ""
+msgstr "Оригинальная версия сообщения, как было отправлено в сеть"
#. module: mail
#: view:mail.message:0
msgid "Partner Name"
-msgstr "Имя партнера"
+msgstr "Название партнера"
#. module: mail
#: view:mail.message:0
msgid "Retry"
-msgstr ""
+msgstr "Повторить"
#. module: mail
#: view:mail.message:0 selection:mail.message,state:0
msgid "Outgoing"
-msgstr ""
+msgstr "Исходящее"
#. module: mail
#: view:mail.message:0
msgid "Send Now"
-msgstr ""
+msgstr "Отправить сейчас"
#. module: mail
#: field:mail.message,partner_id:0
msgid "Related partner"
-msgstr ""
+msgstr "Связанный партнер"
#. module: mail
#: view:mail.message:0
msgid "User"
-msgstr ""
+msgstr "Пользователь"
#. module: mail
#: field:mail.compose.message,date:0 field:mail.message,date:0
@@ -273,13 +275,13 @@ msgstr "Дата"
#. module: mail
#: view:mail.message:0
msgid "Extended Filters..."
-msgstr ""
+msgstr "Расширенные фильтры..."
#. module: mail
#: code:addons/mail/wizard/mail_compose_message.py:153
#, python-format
msgid "%(sender_name)s wrote:"
-msgstr ""
+msgstr "%(sender_name)s написал:"
#. module: mail
#: field:mail.compose.message,body_html:0 field:mail.message,body_html:0
@@ -290,7 +292,7 @@ msgstr ""
#. module: mail
#: field:mail.message,original:0
msgid "Original"
-msgstr ""
+msgstr "Оригинал"
#. module: mail
#: code:addons/mail/mail_thread.py:247 view:res.partner:0
@@ -302,13 +304,13 @@ msgstr "История"
#: field:mail.compose.message,message_id:0 field:mail.message,message_id:0
#: field:mail.message.common,message_id:0
msgid "Message-Id"
-msgstr ""
+msgstr "ID сообщения"
#. module: mail
#: view:mail.compose.message:0 field:mail.compose.message,attachment_ids:0
#: view:mail.message:0 field:mail.message,attachment_ids:0
msgid "Attachments"
-msgstr "Прикрепленные файлы"
+msgstr "Вложения"
#. module: mail
#: field:mail.compose.message,email_cc:0 field:mail.message,email_cc:0
@@ -325,7 +327,7 @@ msgstr " на "
#. module: mail
#: help:mail.message,auto_delete:0
msgid "Permanently delete this email after sending it, to save space"
-msgstr ""
+msgstr "Навсегда удалить это письмо после отправки, для экономии места"
#. module: mail
#: field:mail.compose.message,references:0 field:mail.message,references:0
@@ -341,18 +343,18 @@ msgstr "Вывести текст"
#. module: mail
#: view:mail.compose.message:0 view:mail.message:0
msgid "Cancel"
-msgstr ""
+msgstr "Отмена"
#. module: mail
#: view:mail.message:0
msgid "Open"
-msgstr ""
+msgstr "Открыть"
#. module: mail
#: code:addons/mail/mail_thread.py:434
#, python-format
msgid "[OpenERP-Forward-Failed] %s"
-msgstr ""
+msgstr "[OpenERP-Forward-Failed] %s"
#. module: mail
#: field:mail.message,user_id:0
@@ -366,11 +368,13 @@ msgid ""
"Full message headers, e.g. SMTP session headers (usually available on "
"inbound messages only)"
msgstr ""
+"Полные заголовки сообщения, т.е. заголовки сессии SMTP (обычно доступные "
+"только во входящих сообщениях)"
#. module: mail
#: view:mail.message:0
msgid "Creation Month"
-msgstr ""
+msgstr "Месяц создания"
#. module: mail
#: field:mail.compose.message,email_to:0 field:mail.message,email_to:0
@@ -387,7 +391,7 @@ msgstr "Подробности"
#: model:ir.actions.act_window,name:mail.action_view_mailgate_thread
#: view:mail.thread:0
msgid "Email Threads"
-msgstr ""
+msgstr "Цепочки эл.писем"
#. module: mail
#: help:mail.compose.message,email_from:0 help:mail.message,email_from:0
@@ -396,28 +400,30 @@ msgid ""
"Message sender, taken from user preferences. If empty, this is not a mail "
"but a message."
msgstr ""
+"Отправитель сообщения, взятый из параметров пользователя. Если пусто, то это "
+"не почта, а сообщение."
#. module: mail
#: view:mail.message:0
msgid "Body (Plain)"
-msgstr ""
+msgstr "Текст (простой)"
#. module: mail
#: code:addons/mail/wizard/mail_compose_message.py:153
#, python-format
msgid "You"
-msgstr ""
+msgstr "Вы"
#. module: mail
#: help:mail.compose.message,message_id:0 help:mail.message,message_id:0
#: help:mail.message.common,message_id:0
msgid "Message unique identifier"
-msgstr ""
+msgstr "Уникальный идентификатор сообщения"
#. module: mail
#: view:mail.message:0
msgid "Body (Rich)"
-msgstr ""
+msgstr "Текст (форматный)"
#. module: mail
#: code:addons/mail/mail_message.py:155
@@ -427,6 +433,9 @@ msgid ""
" Subject: %s \n"
"\t"
msgstr ""
+"%s написал на %s: \n"
+" Тема: %s \n"
+"\t"
#. module: mail
#: model:ir.actions.act_window,name:mail.act_res_partner_emails
@@ -456,53 +465,74 @@ msgstr "Скрытая копия"
#. module: mail
#: model:ir.model,name:mail.model_mail_message_common
msgid "mail.message.common"
-msgstr ""
+msgstr "mail.message.common"
#. module: mail
#: help:mail.compose.message,references:0 help:mail.message,references:0
#: help:mail.message.common,references:0
msgid "Message references, such as identifiers of previous messages"
-msgstr ""
+msgstr "Ссылки сообщения, такие как идентификаторы предыдущих сообщений"
#. module: mail
#: constraint:res.partner:0
msgid "Error ! You cannot create recursive associated members."
-msgstr ""
+msgstr "Ошибка! Вы не можете создавать рекурсивные ссылки на участников."
#. module: mail
#: help:mail.compose.message,email_cc:0 help:mail.message,email_cc:0
#: help:mail.message.common,email_cc:0
msgid "Carbon copy message recipients"
-msgstr ""
+msgstr "Получатели скрытой копии сообщения"
#. module: mail
#: selection:mail.message,state:0
msgid "Delivery Failed"
-msgstr ""
+msgstr "Доставка не удалась"
#. module: mail
#: model:ir.model,name:mail.model_mail_message
msgid "Email Message"
-msgstr ""
+msgstr "Сообщение эл.почты"
#. module: mail
#: model:ir.model,name:mail.model_mail_thread view:mail.thread:0
msgid "Email Thread"
-msgstr ""
+msgstr "Цепочка эл.почты"
#. module: mail
#: field:mail.compose.message,filter_id:0
msgid "Filters"
-msgstr ""
+msgstr "Фильтры"
#. module: mail
#: code:addons/mail/mail_thread.py:220
#, python-format
msgid "Mail attachment"
-msgstr ""
+msgstr "Почтовое вложение"
#. module: mail
#: help:mail.compose.message,reply_to:0 help:mail.message,reply_to:0
#: help:mail.message.common,reply_to:0
msgid "Preferred response address for the message"
-msgstr ""
+msgstr "Предпочтительный адрес ответа для сообщения"
+
+#~ msgid "Message type"
+#~ msgstr "Тип сообщения"
+
+#~ msgid "Text contents"
+#~ msgstr "Текстовое содержимое"
+
+#~ msgid "Related Document model"
+#~ msgstr "Модель связанного документа"
+
+#~ msgid "E-mail composition wizard"
+#~ msgstr "Мастер создания электронной почты"
+
+#~ msgid "Rich-text contents"
+#~ msgstr "Форматное текстовое сообщение"
+
+#~ msgid "Related user"
+#~ msgstr "Связанный пользователь"
+
+#~ msgid "Message headers"
+#~ msgstr "Заголовки сообщения"
diff --git a/addons/web/i18n/hu.po b/addons/web/i18n/hu.po
index 2e6f36cb2cf..cea5493c029 100644
--- a/addons/web/i18n/hu.po
+++ b/addons/web/i18n/hu.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-07-02 09:06+0200\n"
-"PO-Revision-Date: 2012-08-24 09:16+0000\n"
+"PO-Revision-Date: 2012-10-26 12:17+0000\n"
"Last-Translator: Herczeg Péter \n"
"Language-Team: Hungarian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-10-21 05:02+0000\n"
-"X-Generator: Launchpad (build 16165)\n"
+"X-Launchpad-Export-Date: 2012-10-27 05:15+0000\n"
+"X-Generator: Launchpad (build 16194)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176
@@ -755,7 +755,7 @@ msgstr "Választani kell legalább egy rekordot!"
#. openerp-web
#: addons/web/static/src/js/views.js:875
msgid "Uploading..."
-msgstr ""
+msgstr "Feltöltés"
#. openerp-web
#: addons/web/static/src/js/views.js:885
diff --git a/addons/web_kanban/i18n/ru.po b/addons/web_kanban/i18n/ru.po
index f8e2f6454d6..a30f7c53997 100644
--- a/addons/web_kanban/i18n/ru.po
+++ b/addons/web_kanban/i18n/ru.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-07-02 09:06+0200\n"
-"PO-Revision-Date: 2012-02-17 07:42+0000\n"
-"Last-Translator: Aleksei Motsik \n"
+"PO-Revision-Date: 2012-10-26 09:02+0000\n"
+"Last-Translator: Chertykov Denis \n"
"Language-Team: Russian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-10-21 05:03+0000\n"
-"X-Generator: Launchpad (build 16165)\n"
+"X-Launchpad-Export-Date: 2012-10-27 05:15+0000\n"
+"X-Generator: Launchpad (build 16194)\n"
#. openerp-web
#: addons/web_kanban/static/src/js/kanban.js:10
@@ -35,7 +35,7 @@ msgstr "Вы действительно хотите удалить эту за
#. openerp-web
#: addons/web_kanban/static/src/js/kanban.js:839
msgid "Create: "
-msgstr ""
+msgstr "Создать: "
#. openerp-web
#: addons/web_kanban/static/src/xml/web_kanban.xml:41
@@ -50,17 +50,17 @@ msgstr "осталось)"
#. openerp-web
#: addons/web_kanban/static/src/xml/web_kanban.xml:71
msgid "Add"
-msgstr ""
+msgstr "Добавить"
#. openerp-web
#: addons/web_kanban/static/src/xml/web_kanban.xml:71
msgid "or"
-msgstr ""
+msgstr "или"
#. openerp-web
#: addons/web_kanban/static/src/xml/web_kanban.xml:72
msgid "Cancel"
-msgstr ""
+msgstr "Отмена"
#~ msgid "Create"
#~ msgstr "Создать"
From 59dec931a2dbfb76279699f9a2488b9470598ccb Mon Sep 17 00:00:00 2001
From: Fabien Pinckaers
Date: Sun, 28 Oct 2012 09:28:29 +0100
Subject: [PATCH 156/173] [IMP] useability of project and contracts
bzr revid: fp@openerp.com-20121028082829-ito7d71piwc4iael
---
.../account_analytic_analysis_view.xml | 72 ++++++++++---------
.../static/src/css/analytic.css | 6 +-
.../static/src/css/analytic.sass | 5 +-
addons/analytic/analytic_view.xml | 2 +-
.../analytic_contract_hr_expense_view.xml | 25 ++++---
addons/project/project_view.xml | 4 +-
6 files changed, 68 insertions(+), 46 deletions(-)
diff --git a/addons/account_analytic_analysis/account_analytic_analysis_view.xml b/addons/account_analytic_analysis/account_analytic_analysis_view.xml
index b1ef852f12f..7678dc59f75 100644
--- a/addons/account_analytic_analysis/account_analytic_analysis_view.xml
+++ b/addons/account_analytic_analysis/account_analytic_analysis_view.xml
@@ -30,18 +30,18 @@
-
-
-
-
-
-
+
+
+
+
+
+
-
+
-
+
@@ -51,23 +51,28 @@
-
-
-
+
+
+
+ or view
+
+
+
+ No order to invoice, view
+
+ />
+ When invoicing on timesheet, OpenERP uses the
+ pricelist of the contract which uses the price
+ defined on the product related to each employee to
+ define the customer invoice price rate.
+
+
+
+
+
diff --git a/addons/analytic/analytic.py b/addons/analytic/analytic.py
index 5ea8c59b848..369dbc829c2 100644
--- a/addons/analytic/analytic.py
+++ b/addons/analytic/analytic.py
@@ -156,7 +156,7 @@ class account_analytic_account(osv.osv):
'debit': fields.function(_debit_credit_bal_qtty, type='float', string='Debit', multi='debit_credit_bal_qtty', digits_compute=dp.get_precision('Account')),
'credit': fields.function(_debit_credit_bal_qtty, type='float', string='Credit', multi='debit_credit_bal_qtty', digits_compute=dp.get_precision('Account')),
'quantity': fields.function(_debit_credit_bal_qtty, type='float', string='Quantity', multi='debit_credit_bal_qtty'),
- 'quantity_max': fields.float('Prepaid Units', help='Sets the higher limit of time to work on the contract.'),
+ 'quantity_max': fields.float('Prepaid Units', help='Sets the higher limit of time to work on the contract, based on the timesheet.'),
'partner_id': fields.many2one('res.partner', 'Customer'),
'user_id': fields.many2one('res.users', 'Project Manager'),
'manager_id': fields.many2one('res.users', 'Account Manager'),
diff --git a/addons/analytic_user_function/analytic_user_function.py b/addons/analytic_user_function/analytic_user_function.py
index 9233845f7eb..c3338cd3c84 100644
--- a/addons/analytic_user_function/analytic_user_function.py
+++ b/addons/analytic_user_function/analytic_user_function.py
@@ -21,39 +21,51 @@
from osv import fields,osv
from tools.translate import _
+import decimal_precision as dp
class analytic_user_funct_grid(osv.osv):
-
_name="analytic.user.funct.grid"
- _description= "Relation table between users and products on a analytic account"
+ _description= "Price per User"
_columns={
'user_id': fields.many2one("res.users", "User", required=True,),
- 'product_id': fields.many2one("product.product", "Product", required=True,),
+ 'product_id': fields.many2one("product.product", "Service", required=True,),
'account_id': fields.many2one("account.analytic.account", "Analytic Account", required=True,),
- }
+ 'uom_id': fields.related("product_id", "uom_id", relation="product.uom", string="Unit of Measure", type="many2one", readonly=True),
+ 'price': fields.float('Price', digits_compute=dp.get_precision('Product Price'), help="Price per hour for this user.", required=True),
+ }
+ def onchange_user_product_id(self, cr, uid, ids, user_id, product_id, context=None):
+ if not user_id:
+ return {}
+ emp_obj = self.pool.get('hr.employee')
+ emp_id = emp_obj.search(cr, uid, [('user_id', '=', user_id)], context=context)
+ if not emp_id:
+ return {}
-analytic_user_funct_grid()
+ value = {}
+ emp = emp_obj.browse(cr, uid, emp_id[0], context=context)
+ if emp.product_id and not product_id:
+ value['product_id'] = emp.product_id.id
+ prod = emp.product_id
+ if product_id:
+ prod = self.pool.get('product.product').browse(cr, uid, product_id, context=context)
+ if prod:
+ value['price'] = prod.list_price
+ value['uom_id'] = prod.uom_id.id
+ return {'value': value}
class account_analytic_account(osv.osv):
-
_inherit = "account.analytic.account"
_columns = {
'user_product_ids': fields.one2many('analytic.user.funct.grid', 'account_id', 'Users/Products Rel.'),
}
-account_analytic_account()
-
class hr_analytic_timesheet(osv.osv):
-
_inherit = "hr.analytic.timesheet"
-
-
# Look in account, if no value for the user => look in parent until there is no more parent to look
# Take the first found... if nothing found => return False
def _get_related_user_account_recursiv(self, cr, uid, user_id, account_id):
-
temp=self.pool.get('analytic.user.funct.grid').search(cr, uid, [('user_id', '=', user_id),('account_id', '=', account_id) ])
account=self.pool.get('account.analytic.account').browse(cr, uid, account_id)
if temp:
@@ -64,7 +76,6 @@ class hr_analytic_timesheet(osv.osv):
else:
return False
-
def on_change_account_id(self, cr, uid, ids, account_id, user_id=False, unit_amount=0):
res = {}
if not (account_id):
@@ -106,12 +117,6 @@ class hr_analytic_timesheet(osv.osv):
return res
def on_change_user_id(self, cr, uid, ids, user_id, account_id, unit_amount=0):
- res = {}
- if not (user_id):
- #avoid a useless call to super
- return res
-
- #get the old values from super
res = super(hr_analytic_timesheet, self).on_change_user_id(cr, uid, ids, user_id)
if account_id:
@@ -143,5 +148,3 @@ class hr_analytic_timesheet(osv.osv):
hr_analytic_timesheet()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/analytic_user_function/analytic_user_function_view.xml b/addons/analytic_user_function/analytic_user_function_view.xml
index 6fa141f480d..490b3026d7f 100644
--- a/addons/analytic_user_function/analytic_user_function_view.xml
+++ b/addons/analytic_user_function/analytic_user_function_view.xml
@@ -7,9 +7,11 @@
analytic_user_funct_grid.treeanalytic.user.funct.grid
-
-
-
+
+
+
+
+
@@ -18,9 +20,13 @@
analytic_user_funct_grid.formanalytic.user.funct.grid
-
+ Define a specific service (e.g. Senior Consultant)
+ and price for some users to use these data instead
+ of the default values when invoicing the customer.
+
+
+ OpenERP will recursively search on parent accounts
+ to check if specific conditions are defined for a
+ specific user. This allows to set invoicing
+ conditions for a group of contracts.
+
+
+
+
diff --git a/addons/hr_timesheet_invoice/hr_timesheet_invoice.py b/addons/hr_timesheet_invoice/hr_timesheet_invoice.py
index 67fcb100468..88094b4a0e0 100644
--- a/addons/hr_timesheet_invoice/hr_timesheet_invoice.py
+++ b/addons/hr_timesheet_invoice/hr_timesheet_invoice.py
@@ -70,8 +70,7 @@ class account_analytic_account(osv.osv):
'amount_invoiced': fields.function(_invoiced_calc, string='Invoiced Amount',
help="Total invoiced"),
'to_invoice': fields.many2one('hr_timesheet_invoice.factor', 'Timesheet Invoicing Ratio',
- help="This field allows you to define the rate in case you plan to reinvoice " \
- "the costs in this analytic account: timesheets, expenses, ..."),
+ help="You usually invoice 100% of the timesheets. But if you mix fixed price and timesheet invoicing, you may use another ratio. For instance, if you do a 20% advance invoice (fixed price, based on a sale order), you should invoice the rest on timesheet with a 80% ratio."),
}
_defaults = {
'pricelist_id': lambda self, cr, uid, ctx: ctx.get('pricelist_id', False),
From af4b056f242219127fee061e7a1e007c31d83ca5 Mon Sep 17 00:00:00 2001
From: Fabien Pinckaers
Date: Sun, 28 Oct 2012 12:05:06 +0100
Subject: [PATCH 159/173] [IMP] cleaned timesheets and contracts useability
bzr revid: fp@openerp.com-20121028110506-v53w8oh42xzrm9ff
---
.../account_analytic_analysis_view.xml | 2 +-
addons/analytic/analytic.py | 2 +-
addons/analytic/analytic_view.xml | 6 ++++--
addons/hr_timesheet/hr_timesheet.py | 2 +-
4 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/addons/account_analytic_analysis/account_analytic_analysis_view.xml b/addons/account_analytic_analysis/account_analytic_analysis_view.xml
index e1708cdd018..513eb4c0ee2 100644
--- a/addons/account_analytic_analysis/account_analytic_analysis_view.xml
+++ b/addons/account_analytic_analysis/account_analytic_analysis_view.xml
@@ -91,7 +91,7 @@
or view
- No hours to invoice, create
+ Nothing to invoice, create
Once the end date of the contract is
passed or the maximum number of service
- units is reached, the account manager
- is warned by email to renew the contract.
+ units (e.g. support contract) is
+ reached, the account manager is warned
+ by email to renew the contract with the
+ customer.
diff --git a/addons/hr_timesheet/hr_timesheet.py b/addons/hr_timesheet/hr_timesheet.py
index 3248f31a082..9e5337492d9 100644
--- a/addons/hr_timesheet/hr_timesheet.py
+++ b/addons/hr_timesheet/hr_timesheet.py
@@ -154,7 +154,7 @@ class hr_analytic_timesheet(osv.osv):
'date': lambda self, cr, uid, ctx: ctx.get('date', fields.date.context_today(self,cr,uid,context=ctx)),
'user_id': lambda obj, cr, uid, ctx: ctx.get('user_id', uid),
}
- def on_change_account_id(self, cr, uid, ids, account_id):
+ def on_change_account_id(self, cr, uid, ids, account_id, context=None):
return {'value':{}}
def on_change_date(self, cr, uid, ids, date):
From eff45f038d0398fd72e761eb445258a58d99a188 Mon Sep 17 00:00:00 2001
From: Fabien Pinckaers
Date: Sun, 28 Oct 2012 13:17:30 +0100
Subject: [PATCH 160/173] [IMP] invoice on timesheet using user price
bzr revid: fp@openerp.com-20121028121730-1sbhsoyxa220oktn
---
.../account_analytic_analysis.py | 42 ++++++-------------
.../analytic_user_function.py | 10 ++++-
.../wizard/hr_timesheet_invoice_create.py | 23 ++++++----
3 files changed, 35 insertions(+), 40 deletions(-)
diff --git a/addons/account_analytic_analysis/account_analytic_analysis.py b/addons/account_analytic_analysis/account_analytic_analysis.py
index 70beb41ac13..0fffde30719 100644
--- a/addons/account_analytic_analysis/account_analytic_analysis.py
+++ b/addons/account_analytic_analysis/account_analytic_analysis.py
@@ -74,36 +74,18 @@ class account_analytic_account(osv.osv):
for id in ids:
res[id][f] = 0.0
res2 = {}
- if parent_ids:
- # Amount uninvoiced hours to invoice at sale price
- # Warning
- # This computation doesn't take care of pricelist !
- # Just consider list_price
- cr.execute("""SELECT account_analytic_account.id, \
- COALESCE(SUM (product_template.list_price * \
- account_analytic_line.unit_amount * \
- ((100-hr_timesheet_invoice_factor.factor)/100)), 0.0) \
- AS ca_to_invoice \
- FROM product_template \
- JOIN product_product \
- ON product_template.id = product_product.product_tmpl_id \
- JOIN account_analytic_line \
- ON account_analytic_line.product_id = product_product.id \
- JOIN account_analytic_journal \
- ON account_analytic_line.journal_id = account_analytic_journal.id \
- JOIN account_analytic_account \
- ON account_analytic_account.id = account_analytic_line.account_id \
- JOIN hr_timesheet_invoice_factor \
- ON hr_timesheet_invoice_factor.id = account_analytic_account.to_invoice \
- WHERE account_analytic_account.id IN %s \
- AND account_analytic_line.invoice_id IS NULL \
- AND account_analytic_line.to_invoice IS NOT NULL \
- AND account_analytic_journal.type = 'general' \
- GROUP BY account_analytic_account.id;""", (parent_ids,))
- for account_id, sum in cr.fetchall():
- if account_id not in res:
- res[account_id] = {}
- res[account_id][f] = round(sum, dp)
+ for account in accounts:
+ cr.execute("SELECT product_id, user_id, to_invoice, sum(unit_amount), product_uom_id, name " \
+ "FROM account_analytic_line as line " \
+ "WHERE account_id = %s " \
+ "AND invoice_id is NULL AND to_invoice IS NOT NULL " \
+ "GROUP BY product_id, user_id, to_invoice, product_uom_id, name", (account.id,))
+
+ res[account.id][f] = 0.0
+ for product_id, user_id, factor_id, qty, uom, line_name in cr.fetchall():
+ price = self.pool.get('account.analytic.line')._get_invoice_price(cr, uid, account, product_id, user_id, qty, context)
+ factor = self.pool.get('hr_timesheet_invoice.factor').browse(cr, uid, factor_id, context=context)
+ res[account.id][f] += price * qty * (100-factor.factor or 0.0) / 100.0
# sum both result on account_id
for id in ids:
diff --git a/addons/analytic_user_function/analytic_user_function.py b/addons/analytic_user_function/analytic_user_function.py
index c3338cd3c84..e5902ca56c2 100644
--- a/addons/analytic_user_function/analytic_user_function.py
+++ b/addons/analytic_user_function/analytic_user_function.py
@@ -146,5 +146,13 @@ class hr_analytic_timesheet(osv.osv):
res ['value']['general_account_id']= a
return res
-hr_analytic_timesheet()
+class account_analytic_line(osv.osv):
+ _inherit = "account.analytic.line"
+ def _get_invoice_price(self, cr, uid, account, product_id, user_id, qty, context = {}):
+ print 'Call'
+ for grid in account.user_product_ids:
+ if grid.user_id.id==user_id:
+ print '***', grid.price
+ return grid.price
+ return super(account_analytic_line, self)._get_invoice_price(cr, uid, account, product_id, user_id, qty, context)
diff --git a/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py b/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py
index 2e220a9397b..5ec60c1ef52 100644
--- a/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py
+++ b/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py
@@ -29,6 +29,15 @@ from tools.translate import _
class account_analytic_line(osv.osv):
_inherit = "account.analytic.line"
+ def _get_invoice_price(self, cr, uid, account, product_id, user_id, qty, context = {}):
+ pro_price_obj = self.pool.get('product.pricelist')
+ if account.pricelist_id:
+ pl = account.pricelist_id.id
+ price = pro_price_obj.price_get(cr,uid,[pl], product_id, qty or 1.0, account.partner_id.id, context=context)[pl]
+ else:
+ price = 0.0
+ return price
+
#
# data = {
@@ -45,7 +54,6 @@ class account_analytic_line(osv.osv):
invoice_obj = self.pool.get('account.invoice')
product_obj = self.pool.get('product.product')
invoice_factor_obj = self.pool.get('hr_timesheet_invoice.factor')
- pro_price_obj = self.pool.get('product.pricelist')
fiscal_pos_obj = self.pool.get('account.fiscal.position')
product_uom_obj = self.pool.get('product.uom')
invoice_line_obj = self.pool.get('account.invoice.line')
@@ -99,13 +107,13 @@ class account_analytic_line(osv.osv):
last_invoice = invoice_obj.create(cr, uid, curr_invoice, context=context2)
invoices.append(last_invoice)
- cr.execute("SELECT product_id, to_invoice, sum(unit_amount), product_uom_id, name " \
+ cr.execute("SELECT product_id, user_id, to_invoice, sum(unit_amount), product_uom_id, name " \
"FROM account_analytic_line as line " \
"WHERE account_id = %s " \
"AND id IN %s AND to_invoice IS NOT NULL " \
- "GROUP BY product_id, to_invoice, product_uom_id, name", (account.id, tuple(ids),))
+ "GROUP BY product_id, user_id, to_invoice, product_uom_id, name", (account.id, tuple(ids),))
- for product_id, factor_id, qty, uom, line_name in cr.fetchall():
+ for product_id, user_id, factor_id, qty, uom, line_name in cr.fetchall():
if data.get('product'):
product_id = data['product'][0]
product = product_obj.browse(cr, uid, product_id, context=context2)
@@ -118,11 +126,8 @@ class account_analytic_line(osv.osv):
ctx = context.copy()
ctx.update({'uom':uom})
- if account.pricelist_id:
- pl = account.pricelist_id.id
- price = pro_price_obj.price_get(cr,uid,[pl], product_id, qty or 1.0, account.partner_id.id, context=ctx)[pl]
- else:
- price = 0.0
+
+ price = self._get_invoice_price(cr, uid, account, product_id, user_id, qty, ctx)
general_account = product.product_tmpl_id.property_account_income or product.categ_id.property_account_income_categ
if not general_account:
From 06f1c8ddfe1059761a39c7327cac59a179370994 Mon Sep 17 00:00:00 2001
From: Fabien Pinckaers
Date: Sun, 28 Oct 2012 13:19:43 +0100
Subject: [PATCH 161/173] [IMP] remove print statement
bzr revid: fp@openerp.com-20121028121943-0ipufxo9omjoalm3
---
addons/analytic_user_function/analytic_user_function.py | 2 --
1 file changed, 2 deletions(-)
diff --git a/addons/analytic_user_function/analytic_user_function.py b/addons/analytic_user_function/analytic_user_function.py
index e5902ca56c2..c2a7ae8f05a 100644
--- a/addons/analytic_user_function/analytic_user_function.py
+++ b/addons/analytic_user_function/analytic_user_function.py
@@ -149,10 +149,8 @@ class hr_analytic_timesheet(osv.osv):
class account_analytic_line(osv.osv):
_inherit = "account.analytic.line"
def _get_invoice_price(self, cr, uid, account, product_id, user_id, qty, context = {}):
- print 'Call'
for grid in account.user_product_ids:
if grid.user_id.id==user_id:
- print '***', grid.price
return grid.price
return super(account_analytic_line, self)._get_invoice_price(cr, uid, account, product_id, user_id, qty, context)
From f721ff1d14e267d04e2d8aa24a95e5b190b9e943 Mon Sep 17 00:00:00 2001
From: Fabien Pinckaers
Date: Sun, 28 Oct 2012 13:32:16 +0100
Subject: [PATCH 162/173] [FIX] launch config wizards after changing settings
bzr revid: fp@openerp.com-20121028123216-sj9ds9xa9wtiuzyy
---
openerp/addons/base/res/res_config.py | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py
index c24fc11a377..1aa108c14d2 100644
--- a/openerp/addons/base/res/res_config.py
+++ b/openerp/addons/base/res/res_config.py
@@ -361,6 +361,7 @@ class res_config_installer(osv.osv_memory):
'to install', ['uninstalled'], context=context)
cr.commit() #TOFIX: after remove this statement, installation wizard is fail
new_db, self.pool = pooler.restart_pool(cr.dbname, update_module=True)
+
res_config_installer()
DEPRECATION_MESSAGE = 'You are using an addon using old-style configuration '\
@@ -538,6 +539,10 @@ class res_config_settings(osv.osv_memory):
ir_module.button_uninstall(cr, uid, to_uninstall_ids, context=context)
ir_module.button_immediate_install(cr, uid, to_install_ids, context=context)
+ config = self.pool.get('res.config').next(cr, uid, [], context=context) or {}
+ if config.get('type') not in ('ir.actions.act_window_close',):
+ return config
+
# force client-side reload (update user menu and current view)
return {
'type': 'ir.actions.client',
From 4f0c5bf19c04442a41d81d1f0045093858967b80 Mon Sep 17 00:00:00 2001
From: Fabien Pinckaers
Date: Sun, 28 Oct 2012 16:15:37 +0100
Subject: [PATCH 163/173] [IMP] contract useability and invoicing
bzr revid: fp@openerp.com-20121028151537-98wz6qiosmumbqvg
---
.../account_analytic_analysis_view.xml | 4 ++--
addons/analytic/analytic.py | 4 ++--
addons/hr_timesheet/hr_timesheet.py | 2 +-
addons/hr_timesheet/hr_timesheet_view.xml | 17 ++++++++++++++++
.../hr_timesheet_invoice_data.xml | 5 +++++
.../hr_timesheet_invoice_view.xml | 4 ++--
.../hr_timesheet_final_invoice_create.py | 7 +++++--
.../wizard/hr_timesheet_invoice_create.py | 3 ++-
...hr_timesheet_invoice_create_final_view.xml | 20 ++++++++++++-------
addons/sale/sale_view.xml | 15 +-------------
10 files changed, 50 insertions(+), 31 deletions(-)
diff --git a/addons/account_analytic_analysis/account_analytic_analysis_view.xml b/addons/account_analytic_analysis/account_analytic_analysis_view.xml
index 513eb4c0ee2..2e89f85821d 100644
--- a/addons/account_analytic_analysis/account_analytic_analysis_view.xml
+++ b/addons/account_analytic_analysis/account_analytic_analysis_view.xml
@@ -61,7 +61,7 @@
- No order to invoice, view
+ No order to invoice, create
-
diff --git a/addons/analytic/analytic.py b/addons/analytic/analytic.py
index f4c77177d0c..3cb98d81f43 100644
--- a/addons/analytic/analytic.py
+++ b/addons/analytic/analytic.py
@@ -141,11 +141,11 @@ class account_analytic_account(osv.osv):
'name': fields.char('Account/Contract Name', size=128, required=True),
'complete_name': fields.function(_complete_name_calc, type='char', string='Full Account Name'),
'code': fields.char('Reference', size=24, select=True),
- 'type': fields.selection([('view','Analytic View'), ('normal','Analytic Account'),('contract','Contract or Project'),('template','Template of Project')], 'Type of Account', required=True,
+ 'type': fields.selection([('view','Analytic View'), ('normal','Analytic Account'),('contract','Contract or Project'),('template','Template of Contract')], 'Type of Account', required=True,
help="If you select the View Type, it means you won\'t allow to create journal entries using that account.\n"\
"The type 'Analytic account' stands for usual accounts that you only want to use in accounting.\n"\
"If you select Contract or Project, it offers you the possibility to manage the validity and the invoicing options for this account.\n"\
- "The special type 'Template of Project' allows you to define a template with default data that you can reuse easily."),
+ "The special type 'Template of Contract' allows you to define a template with default data that you can reuse easily."),
'template_id': fields.many2one('account.analytic.account', 'Template of Contract'),
'description': fields.text('Description'),
'parent_id': fields.many2one('account.analytic.account', 'Parent Analytic Account', select=2),
diff --git a/addons/hr_timesheet/hr_timesheet.py b/addons/hr_timesheet/hr_timesheet.py
index 9e5337492d9..216541501b1 100644
--- a/addons/hr_timesheet/hr_timesheet.py
+++ b/addons/hr_timesheet/hr_timesheet.py
@@ -195,7 +195,7 @@ class account_analytic_account(osv.osv):
_inherit = 'account.analytic.account'
_description = 'Analytic Account'
_columns = {
- 'use_timesheets': fields.boolean('Timesheets', help="Check this field if this project manages timesheets"),
+ 'use_timesheets': fields.boolean('Use Timesheets', help="Check this field if this project manages timesheets"),
}
def on_change_template(self, cr, uid, ids, template_id, context=None):
diff --git a/addons/hr_timesheet/hr_timesheet_view.xml b/addons/hr_timesheet/hr_timesheet_view.xml
index 55c4680b6a1..ebdd05ed59c 100644
--- a/addons/hr_timesheet/hr_timesheet_view.xml
+++ b/addons/hr_timesheet/hr_timesheet_view.xml
@@ -85,6 +85,23 @@
account.analytic.accounttree,formform
+
+
+ No activity yet on this contract.
+
+ In OpenERP, contracts and projects are implemented using
+ analytic account. So, you can track costs and revenues to analyse
+ your margins easily.
+
+ Costs will be created automatically when you register supplier
+ invoices, expenses or timesheets.
+
+ Revenues will be created automatically when you create customer
+ invoices. Customer invoices can be created based on sale orders
+ (fixed price invoices), on timesheets (based on the work done) or
+ on expenses (e.g. reinvoicing of travel costs).
+
+
diff --git a/addons/hr_timesheet_invoice/hr_timesheet_invoice_data.xml b/addons/hr_timesheet_invoice/hr_timesheet_invoice_data.xml
index 462888e0b39..5c0bc6d702f 100644
--- a/addons/hr_timesheet_invoice/hr_timesheet_invoice_data.xml
+++ b/addons/hr_timesheet_invoice/hr_timesheet_invoice_data.xml
@@ -16,5 +16,10 @@
50%50.0
+
+ 80%
+ 80%
+ 20.0
+
diff --git a/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml b/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml
index 95fa39a6eda..e58b33634f8 100644
--- a/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml
+++ b/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml
@@ -9,8 +9,8 @@
-
-
+
+
diff --git a/addons/hr_timesheet_invoice/wizard/hr_timesheet_final_invoice_create.py b/addons/hr_timesheet_invoice/wizard/hr_timesheet_final_invoice_create.py
index 4b98f7ec23f..2671cd1ab90 100644
--- a/addons/hr_timesheet_invoice/wizard/hr_timesheet_final_invoice_create.py
+++ b/addons/hr_timesheet_invoice/wizard/hr_timesheet_final_invoice_create.py
@@ -36,14 +36,17 @@ class final_invoice_create(osv.osv_memory):
_description = 'Create invoice from timesheet final'
_columns = {
'date': fields.boolean('Date', help='Display date in the history of works'),
- 'time': fields.boolean('Time spent', help='Display time in the history of works'),
- 'name': fields.boolean('Name of entry', help='Display detail of work in the invoice line.'),
+ 'time': fields.boolean('Time Spent', help='Display time in the history of works'),
+ 'name': fields.boolean('Log of Activity', help='Display detail of work in the invoice line.'),
'price': fields.boolean('Cost', help='Display cost of the item you reinvoice'),
'product': fields.many2one('product.product', 'Product', help='The product that will be used to invoice the remaining amount'),
}
def do_create(self, cr, uid, ids, context=None):
data = self.read(cr, uid, ids, [], context=context)[0]
+ # hack for fixing small issue (context should not propagate implicitly between actions)
+ if 'default_type' in context:
+ del context['default_type']
ids = self.pool.get('account.analytic.line').search(cr, uid, [('invoice_id','=',False),('to_invoice','<>', False), ('account_id', 'in', context['active_ids'])], context=context)
invs = self.pool.get('account.analytic.line').invoice_cost_create(cr, uid, ids, data, context=context)
mod_obj = self.pool.get('ir.model.data')
diff --git a/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py b/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py
index 5ec60c1ef52..1201cc7d4e5 100644
--- a/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py
+++ b/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py
@@ -169,7 +169,8 @@ class account_analytic_line(osv.osv):
details.append(line['name'])
note.append(u' - '.join(map(lambda x: unicode(x) or '',details)))
- curr_line['name'] += "\n".join(map(lambda x: unicode(x) or '',note))
+ if note:
+ curr_line['name'] += "\n" + ("\n".join(map(lambda x: unicode(x) or '',note)))
invoice_line_obj.create(cr, uid, curr_line, context=context)
cr.execute("update account_analytic_line set invoice_id=%s WHERE account_id = %s and id IN %s", (last_invoice, account.id, tuple(ids)))
diff --git a/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create_final_view.xml b/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create_final_view.xml
index a0a0ceea2ac..d1c95212139 100644
--- a/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create_final_view.xml
+++ b/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create_final_view.xml
@@ -26,13 +26,19 @@
hr.timesheet.invoice.create.final
-
-
-
-
-
-
-
+
Do you want to show details of each activity to your customer?
+
+
+
+
+
+
+
+
+
+
+
+
From bcf7db1651bef48b0495d6234c18dcc4dee506ce Mon Sep 17 00:00:00 2001
From: Launchpad Translations on behalf of openerp <>
Date: Mon, 29 Oct 2012 05:00:21 +0000
Subject: [PATCH 168/173] Launchpad automatic translations update.
bzr revid: launchpad_translations_on_behalf_of_openerp-20121029050021-3df666wg6wqeormq
---
addons/mail/i18n/hr.po | 147 ++++++++++++++++++++++-------------------
1 file changed, 78 insertions(+), 69 deletions(-)
diff --git a/addons/mail/i18n/hr.po b/addons/mail/i18n/hr.po
index 36de7acc0b1..4535063726e 100644
--- a/addons/mail/i18n/hr.po
+++ b/addons/mail/i18n/hr.po
@@ -8,45 +8,45 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-02-09 00:36+0000\n"
-"PO-Revision-Date: 2011-12-22 17:13+0000\n"
-"Last-Translator: Tomislav Bosnjakovic \n"
+"PO-Revision-Date: 2012-10-28 19:42+0000\n"
+"Last-Translator: Marijan Rajic \n"
"Language-Team: Croatian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-10-19 05:36+0000\n"
-"X-Generator: Launchpad (build 16165)\n"
+"X-Launchpad-Export-Date: 2012-10-29 05:00+0000\n"
+"X-Generator: Launchpad (build 16194)\n"
#. module: mail
#: field:mail.compose.message,subtype:0 field:mail.message,subtype:0
#: field:mail.message.common,subtype:0
msgid "Message Type"
-msgstr ""
+msgstr "Tip poruke"
#. module: mail
#: help:mail.compose.message,auto_delete:0
msgid "Permanently delete emails after sending"
-msgstr ""
+msgstr "Trajno obrisati e-poštu nakon slanja"
#. module: mail
#: view:mail.message:0
msgid "Open Related Document"
-msgstr ""
+msgstr "Otvori povezani dokument"
#. module: mail
#: view:mail.message:0
msgid "Open Attachments"
-msgstr "Otvori privitke"
+msgstr "Otvori priloge"
#. module: mail
#: view:mail.message:0
msgid "Message Details"
-msgstr "Detalji poruke"
+msgstr "Detalji porukue"
#. module: mail
#: view:mail.thread:0
msgid "Communication History"
-msgstr ""
+msgstr "Povijest komunikacije"
#. module: mail
#: view:mail.message:0
@@ -57,73 +57,73 @@ msgstr "Grupiraj po..."
#: model:ir.actions.act_window,name:mail.action_email_compose_message_wizard
#: view:mail.compose.message:0
msgid "Compose Email"
-msgstr ""
+msgstr "Sastavi e-poštu"
#. module: mail
#: help:mail.compose.message,body_text:0 help:mail.message,body_text:0
#: help:mail.message.common,body_text:0
msgid "Plain-text version of the message"
-msgstr ""
+msgstr "Verzija poruke u običnom tekstu"
#. module: mail
#: view:mail.compose.message:0
msgid "Body"
-msgstr ""
+msgstr "Sadržaj"
#. module: mail
#: help:mail.compose.message,email_to:0 help:mail.message,email_to:0
#: help:mail.message.common,email_to:0
msgid "Message recipients"
-msgstr ""
+msgstr "Primatelji poruke"
#. module: mail
#: field:mail.compose.message,body_text:0 field:mail.message,body_text:0
#: field:mail.message.common,body_text:0
msgid "Text Contents"
-msgstr ""
+msgstr "Sadržaj"
#. module: mail
#: view:mail.message:0 selection:mail.message,state:0
msgid "Received"
-msgstr ""
+msgstr "Primljeno"
#. module: mail
#: view:mail.message:0
msgid "Thread"
-msgstr ""
+msgstr "Nit"
#. module: mail
#: field:mail.message,mail_server_id:0
msgid "Outgoing mail server"
-msgstr ""
+msgstr "Izlazni poslužitelj e-pošte"
#. module: mail
#: selection:mail.message,state:0
msgid "Cancelled"
-msgstr ""
+msgstr "Otkazano"
#. module: mail
#: field:mail.compose.message,reply_to:0 field:mail.message,reply_to:0
#: field:mail.message.common,reply_to:0
msgid "Reply-To"
-msgstr ""
+msgstr "Odgovori na"
#. module: mail
#: help:mail.compose.message,body_html:0 help:mail.message,body_html:0
#: help:mail.message.common,body_html:0
msgid "Rich-text/HTML version of the message"
-msgstr ""
+msgstr "Verzija poruke u Rich-text/HTML formatu"
#. module: mail
#: field:mail.compose.message,auto_delete:0 field:mail.message,auto_delete:0
msgid "Auto Delete"
-msgstr ""
+msgstr "Auto brisanje"
#. module: mail
#: help:mail.compose.message,email_bcc:0 help:mail.message,email_bcc:0
#: help:mail.message.common,email_bcc:0
msgid "Blind carbon copy message recipients"
-msgstr ""
+msgstr "Primatelji skrivene kopije poruke"
#. module: mail
#: model:ir.model,name:mail.model_res_partner view:mail.message:0
@@ -134,13 +134,13 @@ msgstr "Partner"
#: field:mail.compose.message,subject:0 field:mail.message,subject:0
#: field:mail.message.common,subject:0
msgid "Subject"
-msgstr ""
+msgstr "Naslov"
#. module: mail
#: code:addons/mail/wizard/mail_compose_message.py:152
#, python-format
msgid "On %(date)s, "
-msgstr ""
+msgstr "Na %(date)s, "
#. module: mail
#: field:mail.compose.message,email_from:0 field:mail.message,email_from:0
@@ -151,32 +151,32 @@ msgstr "Od"
#. module: mail
#: view:mail.message:0
msgid "Email message"
-msgstr ""
+msgstr "Poruka e-pošte"
#. module: mail
#: view:mail.compose.message:0
msgid "Send"
-msgstr ""
+msgstr "Pošalji"
#. module: mail
#: view:mail.message:0
msgid "Failed"
-msgstr ""
+msgstr "Neuspjelo"
#. module: mail
#: view:mail.message:0 field:mail.message,state:0
msgid "State"
-msgstr ""
+msgstr "Stanje"
#. module: mail
#: view:mail.message:0
msgid "Reply"
-msgstr ""
+msgstr "Odgovor"
#. module: mail
#: view:mail.message:0 selection:mail.message,state:0
msgid "Sent"
-msgstr ""
+msgstr "Poslano"
#. module: mail
#: help:mail.compose.message,subtype:0 help:mail.message,subtype:0
@@ -185,39 +185,41 @@ msgid ""
"Type of message, usually 'html' or 'plain', used to select plaintext or rich "
"text contents accordingly"
msgstr ""
+"Tip poruke, obično 'html' ili 'običan tekst', koristi se za odabir običnog "
+"ili bogatije formatiranog teksta"
#. module: mail
#: view:mail.message:0
msgid "Recipients"
-msgstr ""
+msgstr "Primatelji"
#. module: mail
#: model:ir.model,name:mail.model_mail_compose_message
msgid "Email composition wizard"
-msgstr ""
+msgstr "Čarobnjak za sastavljanje e-pošte"
#. module: mail
#: field:mail.compose.message,res_id:0 field:mail.message,res_id:0
#: field:mail.message.common,res_id:0
msgid "Related Document ID"
-msgstr ""
+msgstr "Povezani ID dokumenta"
#. module: mail
#: view:mail.message:0
msgid "Advanced"
-msgstr ""
+msgstr "Napredno"
#. module: mail
#: code:addons/mail/wizard/mail_compose_message.py:157
#, python-format
msgid "Re:"
-msgstr ""
+msgstr "Re:"
#. module: mail
#: field:mail.compose.message,model:0 field:mail.message,model:0
#: field:mail.message.common,model:0
msgid "Related Document Model"
-msgstr ""
+msgstr "Povezani model dokumenta"
#. module: mail
#: view:mail.message:0
@@ -227,42 +229,42 @@ msgstr "Mjesec"
#. module: mail
#: view:mail.message:0
msgid "Email Search"
-msgstr "Pretraživanje e-mailova"
+msgstr "Pretraga e-pošte"
#. module: mail
#: help:mail.message,original:0
msgid "Original version of the message, as it was sent on the network"
-msgstr ""
+msgstr "Originalna varijanta poruke, kakva je poslana na mrežu"
#. module: mail
#: view:mail.message:0
msgid "Partner Name"
-msgstr "Naziv partnera"
+msgstr "Ime partnera"
#. module: mail
#: view:mail.message:0
msgid "Retry"
-msgstr ""
+msgstr "Pokušaj ponovo"
#. module: mail
#: view:mail.message:0 selection:mail.message,state:0
msgid "Outgoing"
-msgstr ""
+msgstr "Odlazno"
#. module: mail
#: view:mail.message:0
msgid "Send Now"
-msgstr ""
+msgstr "Pošalji odmah"
#. module: mail
#: field:mail.message,partner_id:0
msgid "Related partner"
-msgstr ""
+msgstr "Povezani partner"
#. module: mail
#: view:mail.message:0
msgid "User"
-msgstr ""
+msgstr "Korisnik"
#. module: mail
#: field:mail.compose.message,date:0 field:mail.message,date:0
@@ -273,19 +275,19 @@ msgstr "Datum"
#. module: mail
#: view:mail.message:0
msgid "Extended Filters..."
-msgstr ""
+msgstr "Prošireni filteri..."
#. module: mail
#: code:addons/mail/wizard/mail_compose_message.py:153
#, python-format
msgid "%(sender_name)s wrote:"
-msgstr ""
+msgstr "%(sender_name)s je napisao:"
#. module: mail
#: field:mail.compose.message,body_html:0 field:mail.message,body_html:0
#: field:mail.message.common,body_html:0
msgid "Rich-text Contents"
-msgstr ""
+msgstr "Formatirani tekst"
#. module: mail
#: field:mail.message,original:0
@@ -346,18 +348,18 @@ msgstr ""
#. module: mail
#: view:mail.message:0
msgid "Open"
-msgstr ""
+msgstr "Otvori"
#. module: mail
#: code:addons/mail/mail_thread.py:434
#, python-format
msgid "[OpenERP-Forward-Failed] %s"
-msgstr ""
+msgstr "[OpenERP-Forward-Failed] %s"
#. module: mail
#: field:mail.message,user_id:0
msgid "Related User"
-msgstr ""
+msgstr "Povezani korisnik"
#. module: mail
#: help:mail.compose.message,headers:0 help:mail.message,headers:0
@@ -366,11 +368,13 @@ msgid ""
"Full message headers, e.g. SMTP session headers (usually available on "
"inbound messages only)"
msgstr ""
+"Cjelovito zaglavlje poruke, npr. zaglavlje SMTP sesije (obično dostupno samo "
+"kod dolaznih poruka)"
#. module: mail
#: view:mail.message:0
msgid "Creation Month"
-msgstr ""
+msgstr "Mjesec kreiranja"
#. module: mail
#: field:mail.compose.message,email_to:0 field:mail.message,email_to:0
@@ -387,7 +391,7 @@ msgstr "Detalji"
#: model:ir.actions.act_window,name:mail.action_view_mailgate_thread
#: view:mail.thread:0
msgid "Email Threads"
-msgstr ""
+msgstr "Niti e-pošte"
#. module: mail
#: help:mail.compose.message,email_from:0 help:mail.message,email_from:0
@@ -396,28 +400,30 @@ msgid ""
"Message sender, taken from user preferences. If empty, this is not a mail "
"but a message."
msgstr ""
+"Pošiljatelj poruke, preuzet iz korisničkih preferenci. Ukoliko je prazno, "
+"biti će poruka a ne e-pošta."
#. module: mail
#: view:mail.message:0
msgid "Body (Plain)"
-msgstr ""
+msgstr "Tijelo (obično)"
#. module: mail
#: code:addons/mail/wizard/mail_compose_message.py:153
#, python-format
msgid "You"
-msgstr ""
+msgstr "Vi"
#. module: mail
#: help:mail.compose.message,message_id:0 help:mail.message,message_id:0
#: help:mail.message.common,message_id:0
msgid "Message unique identifier"
-msgstr ""
+msgstr "Jedinstveni identifikator poruke"
#. module: mail
#: view:mail.message:0
msgid "Body (Rich)"
-msgstr ""
+msgstr "Tijelo (formatirano)"
#. module: mail
#: code:addons/mail/mail_message.py:155
@@ -427,6 +433,9 @@ msgid ""
" Subject: %s \n"
"\t"
msgstr ""
+"%s napisano %s: \n"
+" Predmet: %s \n"
+"\t"
#. module: mail
#: model:ir.actions.act_window,name:mail.act_res_partner_emails
@@ -445,64 +454,64 @@ msgstr "Poruke"
#: field:mail.compose.message,headers:0 field:mail.message,headers:0
#: field:mail.message.common,headers:0
msgid "Message Headers"
-msgstr ""
+msgstr "Zaglavlja poruke"
#. module: mail
#: field:mail.compose.message,email_bcc:0 field:mail.message,email_bcc:0
#: field:mail.message.common,email_bcc:0
msgid "Bcc"
-msgstr "Bcc"
+msgstr "Skrivena kopija"
#. module: mail
#: model:ir.model,name:mail.model_mail_message_common
msgid "mail.message.common"
-msgstr ""
+msgstr "mail.message.common"
#. module: mail
#: help:mail.compose.message,references:0 help:mail.message,references:0
#: help:mail.message.common,references:0
msgid "Message references, such as identifiers of previous messages"
-msgstr ""
+msgstr "Reference poruke, poput identifikatora prethodnih poruka"
#. module: mail
#: constraint:res.partner:0
msgid "Error ! You cannot create recursive associated members."
-msgstr ""
+msgstr "Greška! Nije moguće kreirati pridružene članove rekurzivno."
#. module: mail
#: help:mail.compose.message,email_cc:0 help:mail.message,email_cc:0
#: help:mail.message.common,email_cc:0
msgid "Carbon copy message recipients"
-msgstr ""
+msgstr "Primatelji skrivene kopije"
#. module: mail
#: selection:mail.message,state:0
msgid "Delivery Failed"
-msgstr ""
+msgstr "Isporuka nije uspjela"
#. module: mail
#: model:ir.model,name:mail.model_mail_message
msgid "Email Message"
-msgstr ""
+msgstr "Poruka e-pošte"
#. module: mail
#: model:ir.model,name:mail.model_mail_thread view:mail.thread:0
msgid "Email Thread"
-msgstr ""
+msgstr "Nit e-pošte"
#. module: mail
#: field:mail.compose.message,filter_id:0
msgid "Filters"
-msgstr ""
+msgstr "Filteri"
#. module: mail
#: code:addons/mail/mail_thread.py:220
#, python-format
msgid "Mail attachment"
-msgstr ""
+msgstr "Prilog e-pošte"
#. module: mail
#: help:mail.compose.message,reply_to:0 help:mail.message,reply_to:0
#: help:mail.message.common,reply_to:0
msgid "Preferred response address for the message"
-msgstr ""
+msgstr "Željena povratna adresa za poruku"
From 0d4fdc41f9bec83c20ac66be62d4da066ba601c2 Mon Sep 17 00:00:00 2001
From: Christophe Matthieu
Date: Mon, 29 Oct 2012 10:29:34 +0100
Subject: [PATCH 169/173] [FIX] mail: resolve error to read message after
posting
bzr revid: chm@openerp.com-20121029092934-gqfg7gq90xs8w3k1
---
addons/mail/mail_message.py | 9 ---------
addons/mail/res_users.py | 4 ++--
addons/mail/static/src/js/mail.js | 24 +++++++++++++-----------
3 files changed, 15 insertions(+), 22 deletions(-)
diff --git a/addons/mail/mail_message.py b/addons/mail/mail_message.py
index 6eb4edf25e3..e5e9dfce788 100644
--- a/addons/mail/mail_message.py
+++ b/addons/mail/mail_message.py
@@ -386,13 +386,6 @@ class mail_message(osv.Model):
ancestors and expandables
:return list: list of message structure for the Chatter widget
"""
- print domain
- print message_unload_ids
- print thread_level
- print context
- print parent_id
- print limit
-
assert thread_level in [0, 1], 'message_read() thread_level should be 0 (flat) or 1 (1 level of thread); given %s.' % thread_level
domain = domain if domain is not None else []
message_unload_ids = message_unload_ids if message_unload_ids is not None else []
@@ -432,8 +425,6 @@ class mail_message(osv.Model):
self._message_read_add_expandables(cr, uid, message_list, read_messages, thread_level=thread_level,
message_loaded_ids=message_unload_ids, domain=domain, parent_id=parent_id, context=context, limit=limit)
- print message_list
-
return message_list
# TDE Note: do we need this ?
diff --git a/addons/mail/res_users.py b/addons/mail/res_users.py
index 54b8a76703f..4ef2dda6d9c 100644
--- a/addons/mail/res_users.py
+++ b/addons/mail/res_users.py
@@ -112,7 +112,7 @@ class res_users(osv.Model):
return res
def message_post_api(self, cr, uid, thread_id, body='', subject=False, type='notification',
- subtype=None, parent_id=False, attachments=None, context=None, **kwargs):
+ parent_id=False, attachment_ids=None, context=None, **kwargs):
""" Redirect the posting of message on res.users to the related partner.
This is done because when giving the context of Chatter on the
various mailboxes, we do not have access to the current partner_id.
@@ -124,7 +124,7 @@ class res_users(osv.Model):
thread_id = thread_id[0]
partner_id = self.pool.get('res.users').read(cr, uid, thread_id, ['partner_id'], context=context)['partner_id'][0]
return self.pool.get('res.partner').message_post_api(cr, uid, partner_id, body=body, subject=subject,
- type=type, subtype=subtype, parent_id=parent_id, attachments=attachments, context=context, **kwargs)
+ type=type, parent_id=parent_id, attachment_ids=attachment_ids, context=context, **kwargs)
def message_post(self, cr, uid, thread_id, context=None, **kwargs):
""" Redirect the posting of message on res.users to the related partner.
diff --git a/addons/mail/static/src/js/mail.js b/addons/mail/static/src/js/mail.js
index 27ffdebfc5a..28ba0e66923 100644
--- a/addons/mail/static/src/js/mail.js
+++ b/addons/mail/static/src/js/mail.js
@@ -365,15 +365,17 @@ openerp.mail = function (session) {
]).then(function (record) {
var thread = self.parent_thread;
// create object and attach to the thread object
- var message = thread.create_message_object( record[0] );
- // insert the message on dom
- thread.insert_message( message, self.$el );
- if (thread.parent_message) {
- self.$el.remove();
- self.parent_thread.compose_message = null;
- } else {
- self.on_cancel();
- }
+ thread.message_fetch(false, false, [record], function (arg, data) {
+ var message = thread.create_message_object( data[0] );
+ // insert the message on dom
+ thread.insert_message( message, self.$el );
+ if (thread.parent_message) {
+ self.$el.remove();
+ self.parent_thread.compose_message = null;
+ } else {
+ self.on_cancel();
+ }
+ });
//session.web.unblockUI();
});
return true;
@@ -1107,7 +1109,7 @@ openerp.mail = function (session) {
* @param {Object} replace_context: added to this.context
* @param {Array} ids read (if the are some ids, the method don't use the domain)
*/
- message_fetch: function (replace_domain, replace_context, ids) {
+ message_fetch: function (replace_domain, replace_context, ids, callback) {
var self = this;
// domain and context: options + additional
@@ -1119,7 +1121,7 @@ openerp.mail = function (session) {
var nb_indented_thread = this.options.display_indented_thread > this.thread_level ? this.options.display_indented_thread - this.thread_level : 0;
return this.ds_message.call('message_read', [ids, fetch_domain, message_loaded_ids, nb_indented_thread, fetch_context, this.context.default_parent_id || undefined])
- .then(this.proxy('switch_new_message'));
+ .then(callback ? _.bind(callback, this, arguments) : this.proxy('switch_new_message'));
},
/**
From c4e6506f8532792fdc9b9ce188cdd9ec78c7d2e9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?=
Date: Mon, 29 Oct 2012 10:50:47 +0100
Subject: [PATCH 170/173] [FIX] mail.js: now giving an undefined (None) ids in
message_read instead of a void list.
bzr revid: tde@openerp.com-20121029095047-k8ahahmuq6z4b9tv
---
addons/mail/static/src/js/mail.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/addons/mail/static/src/js/mail.js b/addons/mail/static/src/js/mail.js
index 27ffdebfc5a..2f38045b419 100644
--- a/addons/mail/static/src/js/mail.js
+++ b/addons/mail/static/src/js/mail.js
@@ -1409,7 +1409,7 @@ openerp.mail = function (session) {
'show_record_name' : false,
'show_compose_message' : false,
'show_compact_message' : false,
- 'message_ids': [],
+ 'message_ids': undefined,
'no_message': false
}, options);
From 4c969ed551561224ff13a63febf9215276440b31 Mon Sep 17 00:00:00 2001
From: Christophe Matthieu
Date: Mon, 29 Oct 2012 11:00:01 +0100
Subject: [PATCH 171/173] [FIX] mail: attachments when the user write on the
wall
bzr revid: chm@openerp.com-20121029100001-ztsaakw1jt0flqmy
---
addons/mail/mail_thread.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py
index e0d4e102603..c5ec4c2b17a 100644
--- a/addons/mail/mail_thread.py
+++ b/addons/mail/mail_thread.py
@@ -721,7 +721,7 @@ class mail_thread(osv.AbstractModel):
ir_attachment = self.pool.get('ir.attachment')
mail_message = self.pool.get('mail.message')
filtered_attachment_ids = ir_attachment.search(cr, SUPERUSER_ID, [
- ('res_model', '=', 'mail.message'),
+ ('res_model', '=', 'mail.compose.message'),
('res_id', '=', 0),
('create_uid', '=', uid),
('id', 'in', attachment_ids)], context=context)
From cbf55bc07d979dac915a3d7314ee0979ec4d17ff Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?=
Date: Mon, 29 Oct 2012 11:09:10 +0100
Subject: [PATCH 172/173] [IMP] [FIX] mail: replying with the wizard does not
quote the original message anymore. Updated tests.
bzr revid: tde@openerp.com-20121029100910-c0y6tl1zg2qsqfv5
---
addons/mail/tests/test_mail.py | 2 +-
addons/mail/wizard/mail_compose_message.py | 3 ---
2 files changed, 1 insertion(+), 4 deletions(-)
diff --git a/addons/mail/tests/test_mail.py b/addons/mail/tests/test_mail.py
index ea0db38fd26..85cfdca578c 100644
--- a/addons/mail/tests/test_mail.py
+++ b/addons/mail/tests/test_mail.py
@@ -533,7 +533,7 @@ class test_mail(TestMailMockups):
self.assertEqual(compose.content_subtype, 'html', 'mail.compose.message incorrect content_subtype')
# Test: mail.message: subject as Re:.., body in html, parent_id
self.assertEqual(compose.subject, _msg_reply, 'mail.message incorrect subject')
- self.assertIn('Administrator wrote:
Pigs rules
', compose.body, 'mail.message body is incorrect')
+ # self.assertIn('Administrator wrote:
Pigs rules
', compose.body, 'mail.message body is incorrect')
self.assertEqual(compose.parent_id and compose.parent_id.id, message.id, 'mail.message parent_id incorrect')
# Test: mail.message: attachments
for attach in compose.attachment_ids:
diff --git a/addons/mail/wizard/mail_compose_message.py b/addons/mail/wizard/mail_compose_message.py
index b93f6eea7a9..1bcbb0c2efc 100644
--- a/addons/mail/wizard/mail_compose_message.py
+++ b/addons/mail/wizard/mail_compose_message.py
@@ -156,8 +156,6 @@ class mail_compose_message(osv.TransientModel):
reply_subject = tools.ustr(message_data.subject or '')
if not (reply_subject.startswith('Re:') or reply_subject.startswith(re_prefix)) and message_data.subject:
reply_subject = "%s %s" % (re_prefix, reply_subject)
- # create the reply in the body
- reply_body = (context and context.get('default_body') or '')
# get partner_ids from original message
partner_ids = [partner.id for partner in message_data.partner_ids] if message_data.partner_ids else []
@@ -166,7 +164,6 @@ class mail_compose_message(osv.TransientModel):
'model': message_data.model,
'res_id': message_data.res_id,
'parent_id': message_data.id,
- 'body': reply_body,
'subject': reply_subject,
'partner_ids': partner_ids,
'content_subtype': 'html',
From a2d3d1df80c044ed62a02e47d7dca242b385992d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?=
Date: Mon, 29 Oct 2012 11:12:30 +0100
Subject: [PATCH 173/173] [CLEAN] message_post_api: removed unnecessary type
arg (posting is a comment).
bzr revid: tde@openerp.com-20121029101230-x39pep9p5edd54ml
---
addons/mail/mail_thread.py | 5 ++---
addons/mail/res_users.py | 5 ++---
addons/mail/static/src/js/mail.js | 1 -
3 files changed, 4 insertions(+), 7 deletions(-)
diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py
index c5ec4c2b17a..e986f12b822 100644
--- a/addons/mail/mail_thread.py
+++ b/addons/mail/mail_thread.py
@@ -707,13 +707,12 @@ class mail_thread(osv.AbstractModel):
return mail_message.create(cr, uid, values, context=context)
- def message_post_api(self, cr, uid, thread_id, body='', subject=False, type='notification',
- parent_id=False, attachment_ids=None, context=None):
+ def message_post_api(self, cr, uid, thread_id, body='', subject=False, parent_id=False, attachment_ids=None, context=None):
""" Wrapper on message_post, used only in Chatter (JS). The purpose is
to handle attachments.
# TDE FIXME: body is plaintext: convert it into html
"""
- new_message_id = self.message_post(cr, uid, thread_id=thread_id, body=body, subject=subject, type=type,
+ new_message_id = self.message_post(cr, uid, thread_id=thread_id, body=body, subject=subject, type='comment',
subtype='mail.mt_comment', parent_id=parent_id, context=context)
# HACK FIXME: Chatter: attachments linked to the document (not done JS-side), load the message
diff --git a/addons/mail/res_users.py b/addons/mail/res_users.py
index 4ef2dda6d9c..1b6388111ba 100644
--- a/addons/mail/res_users.py
+++ b/addons/mail/res_users.py
@@ -111,8 +111,7 @@ class res_users(osv.Model):
alias_pool.unlink(cr, uid, alias_ids, context=context)
return res
- def message_post_api(self, cr, uid, thread_id, body='', subject=False, type='notification',
- parent_id=False, attachment_ids=None, context=None, **kwargs):
+ def message_post_api(self, cr, uid, thread_id, body='', subject=False, parent_id=False, attachment_ids=None, context=None):
""" Redirect the posting of message on res.users to the related partner.
This is done because when giving the context of Chatter on the
various mailboxes, we do not have access to the current partner_id.
@@ -124,7 +123,7 @@ class res_users(osv.Model):
thread_id = thread_id[0]
partner_id = self.pool.get('res.users').read(cr, uid, thread_id, ['partner_id'], context=context)['partner_id'][0]
return self.pool.get('res.partner').message_post_api(cr, uid, partner_id, body=body, subject=subject,
- type=type, parent_id=parent_id, attachment_ids=attachment_ids, context=context, **kwargs)
+ parent_id=parent_id, attachment_ids=attachment_ids, context=context)
def message_post(self, cr, uid, thread_id, context=None, **kwargs):
""" Redirect the posting of message on res.users to the related partner.
diff --git a/addons/mail/static/src/js/mail.js b/addons/mail/static/src/js/mail.js
index 6a409782117..0b6a8ec86d2 100644
--- a/addons/mail/static/src/js/mail.js
+++ b/addons/mail/static/src/js/mail.js
@@ -358,7 +358,6 @@ openerp.mail = function (session) {
this.context.default_res_id,
mail.ChatterUtils.get_text2html(body),
false,
- 'comment',
this.context.default_parent_id,
attachments,
this.parent_thread.context