import common
import controllers
-import common.dispatch
import logging
import optparse
o.serve_static = True
o.backend = 'local'
- app = common.dispatch.Root(o)
+ app = common.http.Root(o)
openerp.wsgi.register_wsgi_handler(app)
{
"name" : "web",
+ "category" : "Hidden",
"depends" : [],
'active': True,
'post_load' : 'wsgi_postload',
#!/usr/bin/python
-from dispatch import *
+import http
+import nonliterals
+import release
+import session
+import xml2json
+++ /dev/null
-# -*- coding: utf-8 -*-
-""" Backport of Python 2.6's ast.py for Python 2.5
-"""
-__all__ = ['literal_eval']
-try:
- from ast import literal_eval
-except ImportError:
- from _ast import *
- from _ast import __version__
-
-
- def parse(expr, filename='<unknown>', mode='exec'):
- """
- Parse an expression into an AST node.
- Equivalent to compile(expr, filename, mode, PyCF_ONLY_AST).
- """
- return compile(expr, filename, mode, PyCF_ONLY_AST)
-
-
- def literal_eval(node_or_string):
- """
- Safely evaluate an expression node or a string containing a Python
- expression. The string or node provided may only consist of the
- following Python literal structures: strings, numbers, tuples, lists,
- dicts, booleans, and None.
- """
- _safe_names = {'None': None, 'True': True, 'False': False}
- if isinstance(node_or_string, basestring):
- node_or_string = parse(node_or_string, mode='eval')
- if isinstance(node_or_string, Expression):
- node_or_string = node_or_string.body
- def _convert(node):
- if isinstance(node, Str):
- return node.s
- elif isinstance(node, Num):
- return node.n
- elif isinstance(node, Tuple):
- return tuple(map(_convert, node.elts))
- elif isinstance(node, List):
- return list(map(_convert, node.elts))
- elif isinstance(node, Dict):
- return dict((_convert(k), _convert(v)) for k, v
- in zip(node.keys, node.values))
- elif isinstance(node, Name):
- if node.id in _safe_names:
- return _safe_names[node.id]
- raise ValueError('malformed string')
- return _convert(node_or_string)
+++ /dev/null
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
-# Copyright (C) 2010 OpenERP s.a. (<http://openerp.com>).
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-##############################################################################
-
-import datetime
-
-DEFAULT_SERVER_DATE_FORMAT = "%Y-%m-%d"
-DEFAULT_SERVER_TIME_FORMAT = "%H:%M:%S"
-DEFAULT_SERVER_DATETIME_FORMAT = "%s %s" % (
- DEFAULT_SERVER_DATE_FORMAT,
- DEFAULT_SERVER_TIME_FORMAT)
-
-def str_to_datetime(str):
- """
- Converts a string to a datetime object using OpenERP's
- datetime string format (exemple: '2011-12-01 15:12:35').
-
- No timezone information is added, the datetime is a naive instance, but
- according to OpenERP 6.1 specification the timezone is always UTC.
- """
- if not str:
- return str
- return datetime.datetime.strptime(str, DEFAULT_SERVER_DATETIME_FORMAT)
-
-def str_to_date(str):
- """
- Converts a string to a date object using OpenERP's
- date string format (exemple: '2011-12-01').
- """
- if not str:
- return str
- return datetime.datetime.strptime(str, DEFAULT_SERVER_DATE_FORMAT).date()
-
-def str_to_time(str):
- """
- Converts a string to a time object using OpenERP's
- time string format (exemple: '15:12:35').
- """
- if not str:
- return str
- return datetime.datetime.strptime(str, DEFAULT_SERVER_TIME_FORMAT).time()
-
-def datetime_to_str(obj):
- """
- Converts a datetime object to a string using OpenERP's
- datetime string format (exemple: '2011-12-01 15:12:35').
-
- The datetime instance should not have an attached timezone and be in UTC.
- """
- if not obj:
- return False
- return obj.strftime(DEFAULT_SERVER_DATETIME_FORMAT)
-
-def date_to_str(obj):
- """
- Converts a date object to a string using OpenERP's
- date string format (exemple: '2011-12-01').
- """
- if not obj:
- return False
- return obj.strftime(DEFAULT_SERVER_DATE_FORMAT)
-
-def time_to_str(obj):
- """
- Converts a time object to a string using OpenERP's
- time string format (exemple: '15:12:35').
- """
- if not obj:
- return False
- return obj.strftime(DEFAULT_SERVER_TIME_FORMAT)
+++ /dev/null
-#!/usr/bin/python
-from __future__ import with_statement
-
-import functools
-import logging
-import urllib
-import os
-import pprint
-import sys
-import traceback
-import uuid
-import xmlrpclib
-
-import simplejson
-import werkzeug.datastructures
-import werkzeug.exceptions
-import werkzeug.utils
-import werkzeug.wrappers
-import werkzeug.wsgi
-
-import ast
-import nonliterals
-import http
-import session
-import openerplib
-
-__all__ = ['Root', 'jsonrequest', 'httprequest', 'Controller',
- 'WebRequest', 'JsonRequest', 'HttpRequest']
-
-_logger = logging.getLogger(__name__)
-
-#-----------------------------------------------------------
-# Globals (wont move into a pool)
-#-----------------------------------------------------------
-
-addons_module = {}
-addons_manifest = {}
-controllers_class = {}
-controllers_object = {}
-controllers_path = {}
-
-#----------------------------------------------------------
-# OpenERP Web RequestHandler
-#----------------------------------------------------------
-class WebRequest(object):
- """ Parent class for all OpenERP Web request types, mostly deals with
- initialization and setup of the request object (the dispatching itself has
- to be handled by the subclasses)
-
- :param request: a wrapped werkzeug Request object
- :type request: :class:`werkzeug.wrappers.BaseRequest`
- :param config: configuration object
-
- .. attribute:: httprequest
-
- the original :class:`werkzeug.wrappers.Request` object provided to the
- request
-
- .. attribute:: httpsession
-
- a :class:`~collections.Mapping` holding the HTTP session data for the
- current http session
-
- .. attribute:: config
-
- config parameter provided to the request object
-
- .. attribute:: params
-
- :class:`~collections.Mapping` of request parameters, not generally
- useful as they're provided directly to the handler method as keyword
- arguments
-
- .. attribute:: session_id
-
- opaque identifier for the :class:`session.OpenERPSession` instance of
- the current request
-
- .. attribute:: session
-
- :class:`~session.OpenERPSession` instance for the current request
-
- .. attribute:: context
-
- :class:`~collections.Mapping` of context values for the current request
-
- .. attribute:: debug
-
- ``bool``, indicates whether the debug mode is active on the client
- """
- def __init__(self, request, config):
- self.httprequest = request
- self.httpresponse = None
- self.httpsession = request.session
- self.config = config
-
- def init(self, params):
- self.params = dict(params)
- # OpenERP session setup
- self.session_id = self.params.pop("session_id", None) or uuid.uuid4().hex
- self.session = self.httpsession.setdefault(self.session_id, session.OpenERPSession())
- self.session.config = self.config
- self.context = self.params.pop('context', None)
- self.debug = self.params.pop('debug', False) != False
-
-class JsonRequest(WebRequest):
- """ JSON-RPC2 over HTTP.
-
- Sucessful request::
-
- --> {"jsonrpc": "2.0",
- "method": "call",
- "params": {"session_id": "SID",
- "context": {},
- "arg1": "val1" },
- "id": null}
-
- <-- {"jsonrpc": "2.0",
- "result": { "res1": "val1" },
- "id": null}
-
- Request producing a error::
-
- --> {"jsonrpc": "2.0",
- "method": "call",
- "params": {"session_id": "SID",
- "context": {},
- "arg1": "val1" },
- "id": null}
-
- <-- {"jsonrpc": "2.0",
- "error": {"code": 1,
- "message": "End user error message.",
- "data": {"code": "codestring",
- "debug": "traceback" } },
- "id": null}
-
- """
-
- def dispatch(self, controller, method, requestf=None, request=None):
- """ Calls the method asked for by the JSON-RPC2 request
-
- :param controller: the instance of the controller which received the request
- :param method: the method which received the request
- :param requestf: a file-like object containing an encoded JSON-RPC2 request
- :param request: a JSON-RPC2 request
-
- :returns: an utf8 encoded JSON-RPC2 reply
- """
- response = {"jsonrpc": "2.0" }
- error = None
- try:
- # Read POST content or POST Form Data named "request"
- if requestf:
- self.jsonrequest = simplejson.load(requestf, object_hook=nonliterals.non_literal_decoder)
- else:
- self.jsonrequest = simplejson.loads(request, object_hook=nonliterals.non_literal_decoder)
- self.init(self.jsonrequest.get("params", {}))
- if _logger.isEnabledFor(logging.DEBUG):
- _logger.debug("--> %s.%s\n%s", controller.__class__.__name__, method.__name__, pprint.pformat(self.jsonrequest))
- response['id'] = self.jsonrequest.get('id')
- response["result"] = method(controller, self, **self.params)
- except openerplib.AuthenticationError:
- error = {
- 'code': 100,
- 'message': "OpenERP Session Invalid",
- 'data': {
- 'type': 'session_invalid',
- 'debug': traceback.format_exc()
- }
- }
- except xmlrpclib.Fault, e:
- error = {
- 'code': 200,
- 'message': "OpenERP Server Error",
- 'data': {
- 'type': 'server_exception',
- 'fault_code': e.faultCode,
- 'debug': "Client %s\nServer %s" % (
- "".join(traceback.format_exception("", None, sys.exc_traceback)), e.faultString)
- }
- }
- except Exception:
- logging.getLogger(__name__ + '.JSONRequest.dispatch').exception\
- ("An error occured while handling a json request")
- error = {
- 'code': 300,
- 'message': "OpenERP WebClient Error",
- 'data': {
- 'type': 'client_exception',
- 'debug': "Client %s" % traceback.format_exc()
- }
- }
- if error:
- response["error"] = error
-
- if _logger.isEnabledFor(logging.DEBUG):
- _logger.debug("<--\n%s", pprint.pformat(response))
- content = simplejson.dumps(response, cls=nonliterals.NonLiteralEncoder)
- return werkzeug.wrappers.Response(
- content, headers=[('Content-Type', 'application/json'),
- ('Content-Length', len(content))])
-
-def jsonrequest(f):
- """ Decorator marking the decorated method as being a handler for a
- JSON-RPC request (the exact request path is specified via the
- ``$(Controller._cp_path)/$methodname`` combination.
-
- If the method is called, it will be provided with a :class:`JsonRequest`
- instance and all ``params`` sent during the JSON-RPC request, apart from
- the ``session_id``, ``context`` and ``debug`` keys (which are stripped out
- beforehand)
- """
- @functools.wraps(f)
- def json_handler(controller, request, config):
- return JsonRequest(request, config).dispatch(
- controller, f, requestf=request.stream)
- json_handler.exposed = True
- return json_handler
-
-class HttpRequest(WebRequest):
- """ Regular GET/POST request
- """
- def dispatch(self, controller, method):
- params = dict(self.httprequest.args)
- params.update(self.httprequest.form)
- params.update(self.httprequest.files)
- self.init(params)
- akw = {}
- for key, value in self.httprequest.args.iteritems():
- if isinstance(value, basestring) and len(value) < 1024:
- akw[key] = value
- else:
- akw[key] = type(value)
- _logger.debug("%s --> %s.%s %r", self.httprequest.method, controller.__class__.__name__, method.__name__, akw)
- r = method(controller, self, **self.params)
- if self.debug or 1:
- if isinstance(r, werkzeug.wrappers.BaseResponse):
- _logger.debug('<-- %s', r)
- else:
- _logger.debug("<-- size: %s", len(r))
- return r
-
- def make_response(self, data, headers=None, cookies=None):
- """ Helper for non-HTML responses, or HTML responses with custom
- response headers or cookies.
-
- While handlers can just return the HTML markup of a page they want to
- send as a string if non-HTML data is returned they need to create a
- complete response object, or the returned data will not be correctly
- interpreted by the clients.
-
- :param basestring data: response body
- :param headers: HTTP headers to set on the response
- :type headers: ``[(name, value)]``
- :param collections.Mapping cookies: cookies to set on the client
- """
- response = werkzeug.wrappers.Response(data, headers=headers)
- if cookies:
- for k, v in cookies.iteritems():
- response.set_cookie(k, v)
- return response
-
- def not_found(self, description=None):
- """ Helper for 404 response, return its result from the method
- """
- return werkzeug.exceptions.NotFound(description)
-
-def httprequest(f):
- """ Decorator marking the decorated method as being a handler for a
- normal HTTP request (the exact request path is specified via the
- ``$(Controller._cp_path)/$methodname`` combination.
-
- If the method is called, it will be provided with a :class:`HttpRequest`
- instance and all ``params`` sent during the request (``GET`` and ``POST``
- merged in the same dictionary), apart from the ``session_id``, ``context``
- and ``debug`` keys (which are stripped out beforehand)
- """
- @functools.wraps(f)
- def http_handler(controller, request, config):
- return HttpRequest(request, config).dispatch(controller, f)
- http_handler.exposed = True
- return http_handler
-
-class ControllerType(type):
- def __init__(cls, name, bases, attrs):
- super(ControllerType, cls).__init__(name, bases, attrs)
- controllers_class["%s.%s" % (cls.__module__, cls.__name__)] = cls
-
-class Controller(object):
- __metaclass__ = ControllerType
-
-class Root(object):
- """Root WSGI application for the OpenERP Web Client.
-
- :param options: mandatory initialization options object, must provide
- the following attributes:
-
- ``server_host`` (``str``)
- hostname of the OpenERP server to dispatch RPC to
- ``server_port`` (``int``)
- RPC port of the OpenERP server
- ``serve_static`` (``bool | None``)
- whether this application should serve the various
- addons's static files
- ``storage_path`` (``str``)
- filesystem path where HTTP session data will be stored
- ``dbfilter`` (``str``)
- only used in case the list of databases is requested
- by the server, will be filtered by this pattern
- """
- def __init__(self, options):
- self.root = '/web/webclient/home'
- self.config = options
-
- if self.config.backend == 'local':
- conn = openerplib.get_connector(protocol='local')
- else:
- conn = openerplib.get_connector(hostname=self.config.server_host,
- port=self.config.server_port)
- self.config.connector = conn
-
- self.session_cookie = 'sessionid'
- self.addons = {}
-
- static_dirs = self._load_addons()
- if options.serve_static:
- self.dispatch = werkzeug.wsgi.SharedDataMiddleware(
- self.dispatch, static_dirs)
-
- if options.session_storage:
- if not os.path.exists(options.session_storage):
- os.mkdir(options.session_storage, 0700)
- self.session_storage = options.session_storage
-
- def __call__(self, environ, start_response):
- """ Handle a WSGI request
- """
- return self.dispatch(environ, start_response)
-
- def dispatch(self, environ, start_response):
- """
- Performs the actual WSGI dispatching for the application, may be
- wrapped during the initialization of the object.
-
- Call the object directly.
- """
- request = werkzeug.wrappers.Request(environ)
- request.parameter_storage_class = werkzeug.datastructures.ImmutableDict
-
- if request.path == '/':
- params = urllib.urlencode(dict(request.args, debug=''))
- return werkzeug.utils.redirect(self.root + '?' + params, 301)(
- environ, start_response)
- elif request.path == '/mobile':
- return werkzeug.utils.redirect(
- '/web_mobile/static/src/web_mobile.html', 301)(environ, start_response)
-
- handler = self.find_handler(*(request.path.split('/')[1:]))
-
- if not handler:
- response = werkzeug.exceptions.NotFound()
- else:
- with http.session(request, self.session_storage, self.session_cookie) as session:
- result = handler(
- request, self.config)
-
- if isinstance(result, basestring):
- response = werkzeug.wrappers.Response(
- result, headers=[('Content-Type', 'text/html; charset=utf-8'),
- ('Content-Length', len(result))])
- else:
- response = result
-
- response.set_cookie(self.session_cookie, session.sid)
-
- return response(environ, start_response)
-
- def _load_addons(self):
- """
- Loads all addons at the specified addons path, returns a mapping of
- static URLs to the corresponding directories
- """
- statics = {}
- for addons_path in self.config.addons_path:
- if addons_path not in sys.path:
- sys.path.insert(0, addons_path)
- for module in os.listdir(addons_path):
- if module not in addons_module:
- manifest_path = os.path.join(addons_path, module, '__openerp__.py')
- path_static = os.path.join(addons_path, module, 'static')
- if os.path.isfile(manifest_path) and os.path.isdir(path_static):
- manifest = ast.literal_eval(open(manifest_path).read())
- manifest['addons_path'] = addons_path
- _logger.info("Loading %s", module)
- m = __import__(module)
- addons_module[module] = m
- addons_manifest[module] = manifest
- statics['/%s/static' % module] = path_static
- for k, v in controllers_class.items():
- if k not in controllers_object:
- o = v()
- controllers_object[k] = o
- if hasattr(o, '_cp_path'):
- controllers_path[o._cp_path] = o
- return statics
-
- def find_handler(self, *l):
- """
- Tries to discover the controller handling the request for the path
- specified by the provided parameters
-
- :param l: path sections to a controller or controller method
- :returns: a callable matching the path sections, or ``None``
- :rtype: ``Controller | None``
- """
- if len(l) > 1:
- for i in range(len(l), 1, -1):
- ps = "/" + "/".join(l[0:i])
- if ps in controllers_path:
- c = controllers_path[ps]
- rest = l[i:] or ['index']
- meth = rest[0]
- m = getattr(c, meth)
- if getattr(m, 'exposed', False):
- _logger.debug("Dispatching to %s %s %s", ps, c, meth)
- return m
- return None
# -*- coding: utf-8 -*-
-
+#----------------------------------------------------------
+# OpenERP Web HTTP layer
+#----------------------------------------------------------
+import ast
import contextlib
+import functools
+import logging
+import urllib
+import os
+import pprint
+import sys
+import traceback
+import uuid
+import xmlrpclib
+import simplejson
import werkzeug.contrib.sessions
+import werkzeug.datastructures
+import werkzeug.exceptions
+import werkzeug.utils
+import werkzeug.wrappers
+import werkzeug.wsgi
+
+import nonliterals
+import session
+import openerplib
+
+__all__ = ['Root', 'jsonrequest', 'httprequest', 'Controller',
+ 'WebRequest', 'JsonRequest', 'HttpRequest']
+
+_logger = logging.getLogger(__name__)
+
+#----------------------------------------------------------
+# OpenERP Web RequestHandler
+#----------------------------------------------------------
+class WebRequest(object):
+ """ Parent class for all OpenERP Web request types, mostly deals with
+ initialization and setup of the request object (the dispatching itself has
+ to be handled by the subclasses)
+
+ :param request: a wrapped werkzeug Request object
+ :type request: :class:`werkzeug.wrappers.BaseRequest`
+ :param config: configuration object
+
+ .. attribute:: httprequest
+
+ the original :class:`werkzeug.wrappers.Request` object provided to the
+ request
+
+ .. attribute:: httpsession
+
+ a :class:`~collections.Mapping` holding the HTTP session data for the
+ current http session
+
+ .. attribute:: config
+
+ config parameter provided to the request object
+
+ .. attribute:: params
+
+ :class:`~collections.Mapping` of request parameters, not generally
+ useful as they're provided directly to the handler method as keyword
+ arguments
+
+ .. attribute:: session_id
+
+ opaque identifier for the :class:`session.OpenERPSession` instance of
+ the current request
+
+ .. attribute:: session
+
+ :class:`~session.OpenERPSession` instance for the current request
+
+ .. attribute:: context
+
+ :class:`~collections.Mapping` of context values for the current request
+
+ .. attribute:: debug
+
+ ``bool``, indicates whether the debug mode is active on the client
+ """
+ def __init__(self, request, config):
+ self.httprequest = request
+ self.httpresponse = None
+ self.httpsession = request.session
+ self.config = config
+
+ def init(self, params):
+ self.params = dict(params)
+ # OpenERP session setup
+ self.session_id = self.params.pop("session_id", None) or uuid.uuid4().hex
+ self.session = self.httpsession.setdefault(self.session_id, session.OpenERPSession())
+ self.session.config = self.config
+ self.context = self.params.pop('context', None)
+ self.debug = self.params.pop('debug', False) != False
+
+class JsonRequest(WebRequest):
+ """ JSON-RPC2 over HTTP.
+
+ Sucessful request::
+
+ --> {"jsonrpc": "2.0",
+ "method": "call",
+ "params": {"session_id": "SID",
+ "context": {},
+ "arg1": "val1" },
+ "id": null}
+
+ <-- {"jsonrpc": "2.0",
+ "result": { "res1": "val1" },
+ "id": null}
+
+ Request producing a error::
+
+ --> {"jsonrpc": "2.0",
+ "method": "call",
+ "params": {"session_id": "SID",
+ "context": {},
+ "arg1": "val1" },
+ "id": null}
+
+ <-- {"jsonrpc": "2.0",
+ "error": {"code": 1,
+ "message": "End user error message.",
+ "data": {"code": "codestring",
+ "debug": "traceback" } },
+ "id": null}
+
+ """
+
+ def dispatch(self, controller, method, requestf=None, request=None):
+ """ Calls the method asked for by the JSON-RPC2 request
+
+ :param controller: the instance of the controller which received the request
+ :param method: the method which received the request
+ :param requestf: a file-like object containing an encoded JSON-RPC2 request
+ :param request: a JSON-RPC2 request
+
+ :returns: an utf8 encoded JSON-RPC2 reply
+ """
+ response = {"jsonrpc": "2.0" }
+ error = None
+ try:
+ # Read POST content or POST Form Data named "request"
+ if requestf:
+ self.jsonrequest = simplejson.load(requestf, object_hook=nonliterals.non_literal_decoder)
+ else:
+ self.jsonrequest = simplejson.loads(request, object_hook=nonliterals.non_literal_decoder)
+ self.init(self.jsonrequest.get("params", {}))
+ if _logger.isEnabledFor(logging.DEBUG):
+ _logger.debug("--> %s.%s\n%s", controller.__class__.__name__, method.__name__, pprint.pformat(self.jsonrequest))
+ response['id'] = self.jsonrequest.get('id')
+ response["result"] = method(controller, self, **self.params)
+ except openerplib.AuthenticationError:
+ error = {
+ 'code': 100,
+ 'message': "OpenERP Session Invalid",
+ 'data': {
+ 'type': 'session_invalid',
+ 'debug': traceback.format_exc()
+ }
+ }
+ except xmlrpclib.Fault, e:
+ error = {
+ 'code': 200,
+ 'message': "OpenERP Server Error",
+ 'data': {
+ 'type': 'server_exception',
+ 'fault_code': e.faultCode,
+ 'debug': "Client %s\nServer %s" % (
+ "".join(traceback.format_exception("", None, sys.exc_traceback)), e.faultString)
+ }
+ }
+ except Exception:
+ logging.getLogger(__name__ + '.JSONRequest.dispatch').exception\
+ ("An error occured while handling a json request")
+ error = {
+ 'code': 300,
+ 'message': "OpenERP WebClient Error",
+ 'data': {
+ 'type': 'client_exception',
+ 'debug': "Client %s" % traceback.format_exc()
+ }
+ }
+ if error:
+ response["error"] = error
+ if _logger.isEnabledFor(logging.DEBUG):
+ _logger.debug("<--\n%s", pprint.pformat(response))
+ content = simplejson.dumps(response, cls=nonliterals.NonLiteralEncoder)
+ return werkzeug.wrappers.Response(
+ content, headers=[('Content-Type', 'application/json'),
+ ('Content-Length', len(content))])
+
+def jsonrequest(f):
+ """ Decorator marking the decorated method as being a handler for a
+ JSON-RPC request (the exact request path is specified via the
+ ``$(Controller._cp_path)/$methodname`` combination.
+
+ If the method is called, it will be provided with a :class:`JsonRequest`
+ instance and all ``params`` sent during the JSON-RPC request, apart from
+ the ``session_id``, ``context`` and ``debug`` keys (which are stripped out
+ beforehand)
+ """
+ @functools.wraps(f)
+ def json_handler(controller, request, config):
+ return JsonRequest(request, config).dispatch(
+ controller, f, requestf=request.stream)
+ json_handler.exposed = True
+ return json_handler
+
+class HttpRequest(WebRequest):
+ """ Regular GET/POST request
+ """
+ def dispatch(self, controller, method):
+ params = dict(self.httprequest.args)
+ params.update(self.httprequest.form)
+ params.update(self.httprequest.files)
+ self.init(params)
+ akw = {}
+ for key, value in self.httprequest.args.iteritems():
+ if isinstance(value, basestring) and len(value) < 1024:
+ akw[key] = value
+ else:
+ akw[key] = type(value)
+ _logger.debug("%s --> %s.%s %r", self.httprequest.method, controller.__class__.__name__, method.__name__, akw)
+ r = method(controller, self, **self.params)
+ if self.debug or 1:
+ if isinstance(r, werkzeug.wrappers.BaseResponse):
+ _logger.debug('<-- %s', r)
+ else:
+ _logger.debug("<-- size: %s", len(r))
+ return r
+
+ def make_response(self, data, headers=None, cookies=None):
+ """ Helper for non-HTML responses, or HTML responses with custom
+ response headers or cookies.
+
+ While handlers can just return the HTML markup of a page they want to
+ send as a string if non-HTML data is returned they need to create a
+ complete response object, or the returned data will not be correctly
+ interpreted by the clients.
+
+ :param basestring data: response body
+ :param headers: HTTP headers to set on the response
+ :type headers: ``[(name, value)]``
+ :param collections.Mapping cookies: cookies to set on the client
+ """
+ response = werkzeug.wrappers.Response(data, headers=headers)
+ if cookies:
+ for k, v in cookies.iteritems():
+ response.set_cookie(k, v)
+ return response
+
+ def not_found(self, description=None):
+ """ Helper for 404 response, return its result from the method
+ """
+ return werkzeug.exceptions.NotFound(description)
+
+def httprequest(f):
+ """ Decorator marking the decorated method as being a handler for a
+ normal HTTP request (the exact request path is specified via the
+ ``$(Controller._cp_path)/$methodname`` combination.
+
+ If the method is called, it will be provided with a :class:`HttpRequest`
+ instance and all ``params`` sent during the request (``GET`` and ``POST``
+ merged in the same dictionary), apart from the ``session_id``, ``context``
+ and ``debug`` keys (which are stripped out beforehand)
+ """
+ @functools.wraps(f)
+ def http_handler(controller, request, config):
+ return HttpRequest(request, config).dispatch(controller, f)
+ http_handler.exposed = True
+ return http_handler
+
+#----------------------------------------------------------
+# OpenERP Web werkzeug Session Managment wraped using with
+#----------------------------------------------------------
STORES = {}
@contextlib.contextmanager
-def session(request, storage_path, session_cookie='sessionid'):
+def session_context(request, storage_path, session_cookie='sessionid'):
session_store = STORES.get(storage_path)
if not session_store:
session_store = werkzeug.contrib.sessions.FilesystemSessionStore(
yield request.session
finally:
session_store.save(request.session)
+
+#----------------------------------------------------------
+# OpenERP Web Module/Controller Loading and URL Routing
+#----------------------------------------------------------
+addons_module = {}
+addons_manifest = {}
+controllers_class = {}
+controllers_object = {}
+controllers_path = {}
+
+class ControllerType(type):
+ def __init__(cls, name, bases, attrs):
+ super(ControllerType, cls).__init__(name, bases, attrs)
+ controllers_class["%s.%s" % (cls.__module__, cls.__name__)] = cls
+
+class Controller(object):
+ __metaclass__ = ControllerType
+
+class Root(object):
+ """Root WSGI application for the OpenERP Web Client.
+
+ :param options: mandatory initialization options object, must provide
+ the following attributes:
+
+ ``server_host`` (``str``)
+ hostname of the OpenERP server to dispatch RPC to
+ ``server_port`` (``int``)
+ RPC port of the OpenERP server
+ ``serve_static`` (``bool | None``)
+ whether this application should serve the various
+ addons's static files
+ ``storage_path`` (``str``)
+ filesystem path where HTTP session data will be stored
+ ``dbfilter`` (``str``)
+ only used in case the list of databases is requested
+ by the server, will be filtered by this pattern
+ """
+ def __init__(self, options):
+ self.root = '/web/webclient/home'
+ self.config = options
+
+ if self.config.backend == 'local':
+ conn = openerplib.get_connector(protocol='local')
+ else:
+ conn = openerplib.get_connector(hostname=self.config.server_host,
+ port=self.config.server_port)
+ self.config.connector = conn
+
+ self.session_cookie = 'sessionid'
+ self.addons = {}
+
+ static_dirs = self._load_addons()
+ if options.serve_static:
+ self.dispatch = werkzeug.wsgi.SharedDataMiddleware(
+ self.dispatch, static_dirs)
+
+ if options.session_storage:
+ if not os.path.exists(options.session_storage):
+ os.mkdir(options.session_storage, 0700)
+ self.session_storage = options.session_storage
+
+ def __call__(self, environ, start_response):
+ """ Handle a WSGI request
+ """
+ return self.dispatch(environ, start_response)
+
+ def dispatch(self, environ, start_response):
+ """
+ Performs the actual WSGI dispatching for the application, may be
+ wrapped during the initialization of the object.
+
+ Call the object directly.
+ """
+ request = werkzeug.wrappers.Request(environ)
+ request.parameter_storage_class = werkzeug.datastructures.ImmutableDict
+
+ if request.path == '/':
+ params = urllib.urlencode(dict(request.args, debug=''))
+ return werkzeug.utils.redirect(self.root + '?' + params, 301)(
+ environ, start_response)
+ elif request.path == '/mobile':
+ return werkzeug.utils.redirect(
+ '/web_mobile/static/src/web_mobile.html', 301)(environ, start_response)
+
+ handler = self.find_handler(*(request.path.split('/')[1:]))
+
+ if not handler:
+ response = werkzeug.exceptions.NotFound()
+ else:
+ with session_context(request, self.session_storage, self.session_cookie) as session:
+ result = handler( request, self.config)
+
+ if isinstance(result, basestring):
+ headers=[('Content-Type', 'text/html; charset=utf-8'), ('Content-Length', len(result))]
+ response = werkzeug.wrappers.Response(result, headers=headers)
+ else:
+ response = result
+
+ response.set_cookie(self.session_cookie, session.sid)
+
+ return response(environ, start_response)
+
+ def _load_addons(self):
+ """
+ Loads all addons at the specified addons path, returns a mapping of
+ static URLs to the corresponding directories
+ """
+ statics = {}
+ for addons_path in self.config.addons_path:
+ if addons_path not in sys.path:
+ sys.path.insert(0, addons_path)
+ for module in os.listdir(addons_path):
+ if module not in addons_module:
+ manifest_path = os.path.join(addons_path, module, '__openerp__.py')
+ path_static = os.path.join(addons_path, module, 'static')
+ if os.path.isfile(manifest_path) and os.path.isdir(path_static):
+ manifest = ast.literal_eval(open(manifest_path).read())
+ manifest['addons_path'] = addons_path
+ _logger.info("Loading %s", module)
+ m = __import__(module)
+ addons_module[module] = m
+ addons_manifest[module] = manifest
+ statics['/%s/static' % module] = path_static
+ for k, v in controllers_class.items():
+ if k not in controllers_object:
+ o = v()
+ controllers_object[k] = o
+ if hasattr(o, '_cp_path'):
+ controllers_path[o._cp_path] = o
+ return statics
+
+ def find_handler(self, *l):
+ """
+ Tries to discover the controller handling the request for the path
+ specified by the provided parameters
+
+ :param l: path sections to a controller or controller method
+ :returns: a callable matching the path sections, or ``None``
+ :rtype: ``Controller | None``
+ """
+ if len(l) > 1:
+ for i in range(len(l), 1, -1):
+ ps = "/" + "/".join(l[0:i])
+ if ps in controllers_path:
+ c = controllers_path[ps]
+ rest = l[i:] or ['index']
+ meth = rest[0]
+ m = getattr(c, meth)
+ if getattr(m, 'exposed', False):
+ _logger.debug("Dispatching to %s %s %s", ps, c, meth)
+ return m
+ return None
+
+#
#!/usr/bin/python
import datetime
import dateutil.relativedelta
+import logging
import time
import openerplib
import nonliterals
-import logging
_logger = logging.getLogger(__name__)
#----------------------------------------------------------
# OpenERPSession RPC openerp backend access
#----------------------------------------------------------
-
class OpenERPSession(object):
"""
An OpenERP RPC session, a given user can own multiple such sessions
--- /dev/null
+# xml2json-direct
+# Simple and straightforward XML-to-JSON converter in Python
+# New BSD Licensed
+#
+# URL: http://code.google.com/p/xml2json-direct/
+
+class Xml2Json(object):
+ @staticmethod
+ def convert_to_json(s):
+ return simplejson.dumps(
+ Xml2Json.convert_to_structure(s), sort_keys=True, indent=4)
+
+ @staticmethod
+ def convert_to_structure(s):
+ root = ElementTree.fromstring(s)
+ return Xml2Json.convert_element(root)
+
+ @staticmethod
+ def convert_element(el, skip_whitespaces=True):
+ res = {}
+ if el.tag[0] == "{":
+ ns, name = el.tag.rsplit("}", 1)
+ res["tag"] = name
+ res["namespace"] = ns[1:]
+ else:
+ res["tag"] = el.tag
+ res["attrs"] = {}
+ for k, v in el.items():
+ res["attrs"][k] = v
+ kids = []
+ if el.text and (not skip_whitespaces or el.text.strip() != ''):
+ kids.append(el.text)
+ for kid in el:
+ kids.append(Xml2Json.convert_element(kid))
+ if kid.tail and (not skip_whitespaces or kid.tail.strip() != ''):
+ kids.append(kid.tail)
+ res["children"] = kids
+ return res
# -*- coding: utf-8 -*-
+import ast
import base64
import csv
import glob
import re
import simplejson
import textwrap
-import xmlrpclib
import time
+import xmlrpclib
import zlib
from xml.etree import ElementTree
from cStringIO import StringIO
-from babel.messages.pofile import read_po
-
-import web.common.dispatch as openerpweb
-import web.common.ast
-import web.common.nonliterals
-import web.common.release
-openerpweb.ast = web.common.ast
-openerpweb.nonliterals = web.common.nonliterals
-
-
-# Should move to openerpweb.Xml2Json
-class Xml2Json:
- # xml2json-direct
- # Simple and straightforward XML-to-JSON converter in Python
- # New BSD Licensed
- #
- # URL: http://code.google.com/p/xml2json-direct/
- @staticmethod
- def convert_to_json(s):
- return simplejson.dumps(
- Xml2Json.convert_to_structure(s), sort_keys=True, indent=4)
-
- @staticmethod
- def convert_to_structure(s):
- root = ElementTree.fromstring(s)
- return Xml2Json.convert_element(root)
-
- @staticmethod
- def convert_element(el, skip_whitespaces=True):
- res = {}
- if el.tag[0] == "{":
- ns, name = el.tag.rsplit("}", 1)
- res["tag"] = name
- res["namespace"] = ns[1:]
- else:
- res["tag"] = el.tag
- res["attrs"] = {}
- for k, v in el.items():
- res["attrs"][k] = v
- kids = []
- if el.text and (not skip_whitespaces or el.text.strip() != ''):
- kids.append(el.text)
- for kid in el:
- kids.append(Xml2Json.convert_element(kid))
- if kid.tail and (not skip_whitespaces or kid.tail.strip() != ''):
- kids.append(kid.tail)
- res["children"] = kids
- return res
+import babel.messages.pofile
+
+import web.common
+openerpweb = web.common.http
#----------------------------------------------------------
# OpenERP Web web Controllers
continue
try:
with open(f_name) as t_file:
- po = read_po(t_file)
+ po = babel.messages.pofile.read_po(t_file)
except:
continue
for x in po:
@openerpweb.jsonrequest
def modules(self, req):
- # TODO query server for installed web modules
- mods = []
- for name, manifest in openerpweb.addons_manifest.items():
- # TODO replace by ir.module.module installed web
- if name not in req.config.server_wide_modules and manifest.get('active', True):
- mods.append(name)
- return mods
+ # Compute available candidates module
+ loadable = openerpweb.addons_manifest.iterkeys()
+ loaded = req.config.server_wide_modules
+ candidates = [mod for mod in loadable if mod not in loaded]
+
+ # Compute active true modules that might be on the web side only
+ active = set(name for name in candidates
+ if openerpweb.addons_manifest[name].get('active'))
+
+ # Retrieve database installed modules
+ Modules = req.session.model('ir.module.module')
+ installed = set(module['name'] for module in Modules.search_read(
+ [('state','=','installed'), ('name','in', candidates)], ['name']))
+
+ # Merge both
+ return list(active | installed)
@openerpweb.jsonrequest
def eval_domain_and_context(self, req, contexts, domains,
no group by should be performed)
"""
context, domain = eval_context_and_domain(req.session,
- openerpweb.nonliterals.CompoundContext(*(contexts or [])),
- openerpweb.nonliterals.CompoundDomain(*(domains or [])))
+ web.common.nonliterals.CompoundContext(*(contexts or [])),
+ web.common.nonliterals.CompoundDomain(*(domains or [])))
group_by_sequence = []
for candidate in (group_by_seq or []):
xml = self.transform_view(arch, session, evaluation_context)
else:
xml = ElementTree.fromstring(arch)
- fvg['arch'] = Xml2Json.convert_element(xml)
+ fvg['arch'] = web.common.xml2json.Xml2Json.convert_element(xml)
for field in fvg['fields'].itervalues():
if field.get('views'):
def parse_domain(self, domain, session):
""" Parses an arbitrary string containing a domain, transforms it
- to either a literal domain or a :class:`openerpweb.nonliterals.Domain`
+ to either a literal domain or a :class:`web.common.nonliterals.Domain`
:param domain: the domain to parse, if the domain is not a string it
is assumed to be a literal domain and is returned as-is
if not isinstance(domain, (str, unicode)):
return domain
try:
- return openerpweb.ast.literal_eval(domain)
+ return ast.literal_eval(domain)
except ValueError:
# not a literal
- return openerpweb.nonliterals.Domain(session, domain)
+ return web.common.nonliterals.Domain(session, domain)
def parse_context(self, context, session):
""" Parses an arbitrary string containing a context, transforms it
- to either a literal context or a :class:`openerpweb.nonliterals.Context`
+ to either a literal context or a :class:`web.common.nonliterals.Context`
:param context: the context to parse, if the context is not a string it
is assumed to be a literal domain and is returned as-is
if not isinstance(context, (str, unicode)):
return context
try:
- return openerpweb.ast.literal_eval(context)
+ return ast.literal_eval(context)
except ValueError:
- return openerpweb.nonliterals.Context(session, context)
+ return web.common.nonliterals.Context(session, context)
def parse_domains_and_contexts(self, elem, session):
""" Converts domains and contexts from the view into Python objects,
@openerpweb.jsonrequest
def save_filter(self, req, model, name, context_to_save, domain):
Model = req.session.model("ir.filters")
- ctx = openerpweb.nonliterals.CompoundContext(context_to_save)
+ ctx = web.common.nonliterals.CompoundContext(context_to_save)
ctx.session = req.session
ctx = ctx.evaluate()
- domain = openerpweb.nonliterals.CompoundDomain(domain)
+ domain = web.common.nonliterals.CompoundDomain(domain)
domain.session = req.session
domain = domain.evaluate()
uid = req.session._uid
try:
if not id:
- res = Model.default_get([field], context).get(field, '')
+ res = Model.default_get([field], context).get(field)
else:
- res = Model.read([int(id)], [field], context)[0].get(field, '')
+ res = Model.read([int(id)], [field], context)[0].get(field)
image_data = base64.b64decode(res)
except (TypeError, xmlrpclib.Fault):
image_data = self.placeholder(req)
return req.make_response(image_data, [
('Content-Type', 'image/png'), ('Content-Length', len(image_data))])
def placeholder(self, req):
- return open(os.path.join(req.addons_path, 'web', 'static', 'src', 'img', 'placeholder.png'), 'rb').read()
+ addons_path = openerpweb.addons_manifest['web']['addons_path']
+ return open(os.path.join(addons_path, 'web', 'static', 'src', 'img', 'placeholder.png'), 'rb').read()
@openerpweb.httprequest
def saveas(self, req, model, id, field, fieldname, **kw):
report_srv = req.session.proxy("report")
context = req.session.eval_context(
- openerpweb.nonliterals.CompoundContext(
+ web.common.nonliterals.CompoundContext(
req.context or {}, action[ "context"]))
report_data = {}
('Content-Length', len(report))],
cookies={'fileToken': int(token)})
-
class Import(View):
_cp_path = "/web/import"
--- /dev/null
+# Spanish (Ecuador) translation for openerp-web
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openerp-web package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openerp-web\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2011-10-07 10:38+0200\n"
+"PO-Revision-Date: 2011-10-07 18:16+0000\n"
+"Last-Translator: Cristian Salamea (Gnuthink) <ovnicraft@gmail.com>\n"
+"Language-Team: Spanish (Ecuador) <es_EC@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-10-08 05:29+0000\n"
+"X-Generator: Launchpad (build 14110)\n"
+
+#: addons/web/static/src/js/view_form.js:355
+msgid ""
+"Warning, the record has been modified, your changes will be discarded."
+msgstr ""
+"Aviso, el registro ha sido modificado, sus cambios serán descartados."
+
+#: addons/web/static/src/js/view_form.js:1659
+msgid "<em> Search More...</em>"
+msgstr "<em> Buscar Más...</em>"
+
+#: addons/web/static/src/js/view_form.js:1672
+#, python-format
+msgid "<em> Create \"<strong>%s</strong>\"</em>"
+msgstr "<em> Crear \"<strong>%s</strong>\"</em>"
+
+#: addons/web/static/src/js/view_form.js:1678
+msgid "<em> Create and Edit...</em>"
+msgstr "<em> Crear y Editar...</em>"
+
+#: addons/web/static/src/js/views.js:568
+msgid "You must choose at least one record."
+msgstr "Debe seleccionar al menos un registro."
+
+#: addons/web/static/src/js/views.js:569
+msgid "Warning"
+msgstr "Advertencia"
+
+#: addons/web/static/src/js/views.js:609
+msgid "Translations"
+msgstr "Traducciones"
+
+#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0
+msgid "Save"
+msgstr "Guardar"
+
+#: addons/web/static/src/js/views.js:615
+msgid "Close"
+msgstr "Cerrar"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "x"
+msgstr "x"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "#{title}"
+msgstr "#{title}"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "#{text}"
+msgstr "#{text}"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Powered by"
+msgstr "Powered by"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "openerp.com"
+msgstr "openerp.com"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "."
+msgstr "."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Loading..."
+msgstr "Cargando..."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Create"
+msgstr "Crear"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Drop"
+msgstr "Borrar"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Backup"
+msgstr "Respaldar"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Restore"
+msgstr "Restaurar"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Password"
+msgstr "Contraseña"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Back to Login"
+msgstr "Regresar a inicio de sesión"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "CREATE DATABASE"
+msgstr "CREATE DATABASE"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Master password:"
+msgstr "Master password:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "New database name:"
+msgstr "Nuevo nombre de la base de datos:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Load Demonstration data:"
+msgstr "Cargar datos de demostración"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Default language:"
+msgstr "Lenguaje por defecto:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Admin password:"
+msgstr "Admin password:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Confirm password:"
+msgstr "Confirmar password:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "DROP DATABASE"
+msgstr "DROP DATABASE"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Database:"
+msgstr "Base de datos:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Master Password:"
+msgstr "Master Password:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "BACKUP DATABASE"
+msgstr "BACKUP DATABASE"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "RESTORE DATABASE"
+msgstr "RESTORE DATABASE"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "File:"
+msgstr "Archivo:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "CHANGE MASTER PASSWORD"
+msgstr "CHANGE MASTER PASSWORD"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "New master password:"
+msgstr "New master password:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Confirm new master password:"
+msgstr "Confirmar nueva master password:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "User:"
+msgstr "Usuario:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Password:"
+msgstr "Contraseña:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Database"
+msgstr "Bases de datos"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Login"
+msgstr "Iniciar sesión"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Bad username or password"
+msgstr "Usuario o contraseña incorrectos"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"We think that daily job activities can be more intuitive, efficient, "
+"automated, .. and even fun."
+msgstr ""
+"Pensamos que el trabajo diario debe ser mas intuitivo, eficiente, "
+"automatizado, ... e incluso divertido."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "OpenERP's vision to be:"
+msgstr "OpenERP's vision to be:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Full featured"
+msgstr "Full featured"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"Today's enterprise challenges are multiple. We provide one module for each "
+"need."
+msgstr ""
+"Today's enterprise challenges are multiple. We provide one module for each "
+"need."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Open Source"
+msgstr "Open Source"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"To Build a great product, we rely on the knowledge of thousands of "
+"contributors."
+msgstr ""
+"To Build a great product, we rely on the knowledge of thousands of "
+"contributors."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "User Friendly"
+msgstr "User Friendly"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"In order to be productive, people need clean and easy to use interface."
+msgstr ""
+"Para ser productivo, los usuarios necesitan una interfaz limpia y fácil de "
+"usar."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "("
+msgstr "("
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ")"
+msgstr ")"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "LOGOUT"
+msgstr "LOGOUT"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "«"
+msgstr "«"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "»"
+msgstr "»"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "oe_secondary_menu_item"
+msgstr "oe_secondary_menu_item"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "oe_secondary_submenu_item"
+msgstr "oe_secondary_submenu_item"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Hide this tip"
+msgstr "Ocultar este tip"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Disable all tips"
+msgstr "Desactivar todas las sugerencias"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "View#"
+msgstr "View#"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Fields"
+msgstr "Campos"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "View labels"
+msgstr "Ver etiquetas"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Sidebar Relates"
+msgstr "Columna lateral relacionada"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Field"
+msgstr "Campo"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ":"
+msgstr ":"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Translate view"
+msgstr "Traducir vista"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Translate sidebar"
+msgstr "Traducir Barra lateral"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Delete"
+msgstr "Eliminar"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "First"
+msgstr "Primero"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "<"
+msgstr "<"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ">"
+msgstr ">"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Last"
+msgstr "Último"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "♻"
+msgstr "♻"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save & Edit"
+msgstr "Grabar & Editar"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Create & Edit"
+msgstr "Crear & Editar"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "New"
+msgstr "Nuevo"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Duplicate"
+msgstr "Duplicar"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Readonly/Editable"
+msgstr "Sólo Lectura/Editable"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "<<"
+msgstr "<<"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "0"
+msgstr "0"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "/"
+msgstr "/"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ">>"
+msgstr ">>"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Add"
+msgstr "Agregar"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Unhandled widget"
+msgstr "Wdiget no controlado"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "?"
+msgstr "?"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "#"
+msgstr "#"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Done"
+msgstr "Realizado"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Open..."
+msgstr "Abrir…"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Create..."
+msgstr "Crear..."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Search..."
+msgstr "Buscar..."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "..."
+msgstr "..."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Uploading ..."
+msgstr "Subiendo..."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Select"
+msgstr "Seleccionar"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save As"
+msgstr "Guardar Como"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Clear"
+msgstr "Limpiar"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Advanced Filter"
+msgstr "Filtro Avanzado"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "-- Filters --"
+msgstr "-- Filtros --"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "-- Actions --"
+msgstr "-- Acciones --"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save Filter"
+msgstr "Guardar Filtro"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Manage Filters"
+msgstr "Gestionar filtros"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Filter Name:"
+msgstr "Nombre del Filtro:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "(Any existing filter with the same name will be replaced)"
+msgstr "(Cualquier filtro existente con el mismo nombre será reemplazado)"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Any of the following conditions must match"
+msgstr "Cualquiera de las siguientes condiciones debe coincidir"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "All the following conditions must match"
+msgstr "Todas las siguientes condiciones deben coincidir"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "None of the following conditions must match"
+msgstr "Ninguna de las siguientes condiciones debe coincidir"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Add condition"
+msgstr "Agregar condición"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "and"
+msgstr "y"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save & New"
+msgstr "Grabar & Nuevo"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save & Close"
+msgstr "Grabar & Cerrar"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Export"
+msgstr "Exportar"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"This wizard will export all data that matches the current search criteria to "
+"a CSV file.\n"
+" You can export all data or only the fields that can be "
+"reimported after modification."
+msgstr ""
+"Este asistente exportará todos los datos que coincidan con el criterio de "
+"búsqueda actual a un archivo CSV.\n"
+" Tu puedes exportar todos los datos o solo los campos que serán "
+"reimportados después de la modificación."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Export Type:"
+msgstr "Tipo de Exportación"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Import Compatible Export"
+msgstr "Import Compatible Export"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Export all Data"
+msgstr "Exportar todos los datos"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Export Formats"
+msgstr "Formato para exportar"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Available fields"
+msgstr "Campos disponibles"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Fields to export"
+msgstr "Campos a exportar"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save fields list"
+msgstr "Guardar lista de campos"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Remove"
+msgstr "Eliminar"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Remove All"
+msgstr "Borrar todo"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Name"
+msgstr "Nombre"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid " "
+msgstr " "
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save as:"
+msgstr "Guardar Como:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Ok"
+msgstr "Ok"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Saved exports:"
+msgstr "Exportaciones guardadas:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Old Password:"
+msgstr "Password anterior:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "New Password:"
+msgstr "Nueva Password:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Confirm Password:"
+msgstr "Confirmar Password:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Import"
+msgstr "Importar"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "1. Import a .CSV file"
+msgstr "1. Importar a archivo .CSV"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"Select a .CSV file to import. If you need a sample of file to import,\n"
+" you should use the export tool with the \"Import Compatible\" option."
+msgstr ""
+"Seleccionar un .archivo CSV para importar. Si necesitas un ejemplo de un "
+"archivo para importar,\n"
+" you podrías usar la herramienta de exportar con la opción de "
+"\"Compatible con Importación\"."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "CSV File:"
+msgstr "Archivo CSV:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "2. Check your file format"
+msgstr "Revisa tu formato de archivo"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Import Options"
+msgstr "Opciones para importar"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Does your file have titles?"
+msgstr "Tiene tu archivo títulos ?"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Separator:"
+msgstr "Separador:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Delimiter:"
+msgstr "Delimitador:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Encoding:"
+msgstr "Codificación:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "UTF-8"
+msgstr "UTF-8"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Latin 1"
+msgstr "Latin 1"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Lines to skip"
+msgstr "Líneas a omitir"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "The import failed due to:"
+msgstr "La importación falló debido a:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Here is a preview of the file we could not import:"
+msgstr "Aquí está una vista preliminar del archivo que no podemos importar:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "OpenERP Web"
+msgstr "OpenERP Web"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Version"
+msgstr "Versión"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Copyright © 2011-TODAY OpenERP SA. All Rights Reserved."
+msgstr "Copyright © 2011-TODAY OpenERP SA. All Rights Reserved."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "OpenERP is a trademark of the"
+msgstr "OpenERP es una marca registrada de"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "OpenERP SA Company"
+msgstr "OpenERP SA Company"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Licenced under the terms of"
+msgstr "Licenciado bajo los términos de"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "GNU Affero General Public License"
+msgstr "GNU Affero General Public License"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "About OpenERP"
+msgstr "Acerca de OpenERP"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "OpenERP"
+msgstr "OpenERP"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"is a free enterprise-scale software system that is designed to boost\n"
+" productivity and profit through data integration. It connects, "
+"improves and\n"
+" manages business processes in areas such as sales, finance, "
+"supply chain,\n"
+" project management, production, services, CRM, etc..."
+msgstr ""
+"is a free enterprise-scale software system that is designed to boost\n"
+" productivity and profit through data integration. It connects, "
+"improves and\n"
+" manages business processes in areas such as sales, finance, "
+"supply chain,\n"
+" project management, production, services, CRM, etc..."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"The system is platform-independent, and can be installed on Windows, Mac OS "
+"X,\n"
+" and various Linux and other Unix-based distributions. Its "
+"architecture enables\n"
+" new functionality to be rapidly created, modifications to be "
+"made to a\n"
+" production system and migration to a new version to be "
+"straightforward."
+msgstr ""
+"The system is platform-independent, and can be installed on Windows, Mac OS "
+"X,\n"
+" and various Linux and other Unix-based distributions. Its "
+"architecture enables\n"
+" new functionality to be rapidly created, modifications to be "
+"made to a\n"
+" production system and migration to a new version to be "
+"straightforward."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"Depending on your needs, OpenERP is available through a web or application "
+"client."
+msgstr ""
+"Dependiendo de tus necesidades, OpenERP está disponible através de un "
+"cliente web o escritorio."
--- /dev/null
+# Italian translation for openerp-web
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openerp-web package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openerp-web\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2011-10-07 10:38+0200\n"
+"PO-Revision-Date: 2011-10-08 13:39+0000\n"
+"Last-Translator: Nicola Riolini - Micronaet <Unknown>\n"
+"Language-Team: Italian <it@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-10-09 05:22+0000\n"
+"X-Generator: Launchpad (build 14110)\n"
+
+#: addons/web/static/src/js/view_form.js:355
+msgid ""
+"Warning, the record has been modified, your changes will be discarded."
+msgstr ""
+"Attenzione, il record è stato modificato, i vostri cambiamenti verranno "
+"scartati."
+
+#: addons/web/static/src/js/view_form.js:1659
+msgid "<em> Search More...</em>"
+msgstr "<em> Cerca ancora...</em>"
+
+#: addons/web/static/src/js/view_form.js:1672
+#, python-format
+msgid "<em> Create \"<strong>%s</strong>\"</em>"
+msgstr "<em> Crea \"<strong>%s</strong>\"</em>"
+
+#: addons/web/static/src/js/view_form.js:1678
+msgid "<em> Create and Edit...</em>"
+msgstr "<em> Crea e modifica...</em>"
+
+#: addons/web/static/src/js/views.js:568
+msgid "You must choose at least one record."
+msgstr "E' necessario selezionare almeno un record."
+
+#: addons/web/static/src/js/views.js:569
+msgid "Warning"
+msgstr "Attenzione"
+
+#: addons/web/static/src/js/views.js:609
+msgid "Translations"
+msgstr "Traduzioni"
+
+#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0
+msgid "Save"
+msgstr "Salva"
+
+#: addons/web/static/src/js/views.js:615
+msgid "Close"
+msgstr "Chiudi"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "x"
+msgstr "x"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "#{title}"
+msgstr "#{title}"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "#{text}"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Powered by"
+msgstr "Powered by"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "openerp.com"
+msgstr "openerp.com"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "."
+msgstr "."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Loading..."
+msgstr "Caricamento..."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Create"
+msgstr "Crea"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Drop"
+msgstr "Elimina"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Backup"
+msgstr "Backup"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Restore"
+msgstr "Ripristina"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Password"
+msgstr "Password"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Back to Login"
+msgstr "Ritorno al Login"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "CREATE DATABASE"
+msgstr "CREA DATABASE"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Master password:"
+msgstr "Password principale"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "New database name:"
+msgstr "Nome nuovo database:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Load Demonstration data:"
+msgstr "Caricadati dimostrativi:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Default language:"
+msgstr "Lingua predefinita:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Admin password:"
+msgstr "Password di amministrazione:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Confirm password:"
+msgstr "Conferma password:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "DROP DATABASE"
+msgstr "ELIMINA DATABASE"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Database:"
+msgstr "Database:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Master Password:"
+msgstr "Password principale"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "BACKUP DATABASE"
+msgstr "BACKUP DATABASE"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "RESTORE DATABASE"
+msgstr "RIPRISTINA DATABASE"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "File:"
+msgstr "File:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "CHANGE MASTER PASSWORD"
+msgstr "CAMBIA PASSWORD PRINCIPALE"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "New master password:"
+msgstr "Nuova password principale:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Confirm new master password:"
+msgstr "Conferma nuova password principale"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "User:"
+msgstr "Utente:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Password:"
+msgstr "Password:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Database"
+msgstr "Database"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Login"
+msgstr "Login"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Bad username or password"
+msgstr "Username o password errati"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"We think that daily job activities can be more intuitive, efficient, "
+"automated, .. and even fun."
+msgstr ""
+"Pensiamo che le attività quotidiane possano essere più intuitive, "
+"efficienti, automatizzate...e anche più divertenti."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "OpenERP's vision to be:"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Full featured"
+msgstr "Completo"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"Today's enterprise challenges are multiple. We provide one module for each "
+"need."
+msgstr ""
+"Le esigenze odierne delle aziende sono molteplici. Noi forniamo un modulo "
+"per ogni necessità."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Open Source"
+msgstr "Open Source"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"To Build a great product, we rely on the knowledge of thousands of "
+"contributors."
+msgstr ""
+"Per creare un buon prodotto, facciamo affidamento sull'esperienza di "
+"migliaia di contributori."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "User Friendly"
+msgstr "User Friendly"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"In order to be productive, people need clean and easy to use interface."
+msgstr ""
+"Per essere produttive, le persone necessitano di interfacce semplici e "
+"pulite."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "("
+msgstr "("
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ")"
+msgstr ")"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "LOGOUT"
+msgstr "LOGOUT"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "«"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "»"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "oe_secondary_menu_item"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "oe_secondary_submenu_item"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Hide this tip"
+msgstr "Nascondi questo consiglio"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Disable all tips"
+msgstr "Disabilita tutti i consigli"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "View#"
+msgstr "Vista à"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Fields"
+msgstr "Campi"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "View labels"
+msgstr "Visualizza etichette"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Sidebar Relates"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Field"
+msgstr "Campo"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ":"
+msgstr ":"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Translate view"
+msgstr "Traduci vista"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Translate sidebar"
+msgstr "Traduci barra laterale"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Delete"
+msgstr "Elimina"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "First"
+msgstr "Primo"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "<"
+msgstr "<"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ">"
+msgstr ">"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Last"
+msgstr "Ultimo"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "♻"
+msgstr "♻"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save & Edit"
+msgstr "Salva & Modifica"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Create & Edit"
+msgstr "Crea & Modifica"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "New"
+msgstr "Nuovo"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Duplicate"
+msgstr "Duplica"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Readonly/Editable"
+msgstr "Sola lettura / Modificabile"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "<<"
+msgstr "<<"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "0"
+msgstr "0"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "/"
+msgstr "/"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ">>"
+msgstr ">>"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Add"
+msgstr "Aggiungi"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Unhandled widget"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "?"
+msgstr "?"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "#"
+msgstr "#"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Done"
+msgstr "Completato"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Open..."
+msgstr "Apri..."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Create..."
+msgstr "Crea..."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Search..."
+msgstr "Cerca..."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "..."
+msgstr "..."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Uploading ..."
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Select"
+msgstr "Seleziona"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save As"
+msgstr "Salva come"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Clear"
+msgstr "Pulisci"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Advanced Filter"
+msgstr "Filtro avanzato"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "-- Filters --"
+msgstr "-- Filtri --"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "-- Actions --"
+msgstr "-- Azioni --"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save Filter"
+msgstr "Salva Filtro"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Manage Filters"
+msgstr "Gestisci Filtri"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Filter Name:"
+msgstr "Nome filtro:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "(Any existing filter with the same name will be replaced)"
+msgstr "(Eventuali filtri esistenti con lo stesso nome saranno rimpiazzati)"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Any of the following conditions must match"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "All the following conditions must match"
+msgstr "Tutte le seguenti condizioni deve verificarsi"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "None of the following conditions must match"
+msgstr "Nessuna delle seguenti condizioni deve verificarsi"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Add condition"
+msgstr "Aggiungi condizione"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "and"
+msgstr "e"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Cancel"
+msgstr "Annulla"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save & New"
+msgstr "Salva & Nuovo"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save & Close"
+msgstr "Salva & Chiudi"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Export"
+msgstr "Esporta"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"This wizard will export all data that matches the current search criteria to "
+"a CSV file.\n"
+" You can export all data or only the fields that can be "
+"reimported after modification."
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Export Type:"
+msgstr "Tipo di esportazione:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Import Compatible Export"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Export all Data"
+msgstr "Esporta tutti i dati"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Export Formats"
+msgstr "Formati esportazione"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Available fields"
+msgstr "Campi disponibili"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Fields to export"
+msgstr "Campi da esportare"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save fields list"
+msgstr "Salva l'elenco dei campi"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Remove"
+msgstr "Rimuovi"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Remove All"
+msgstr "Rimuovi tutto"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Name"
+msgstr "Nome"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid " "
+msgstr " "
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save as:"
+msgstr "Salva come:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Ok"
+msgstr "Ok"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Saved exports:"
+msgstr "Esportazioni salvate:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Old Password:"
+msgstr "Vecchia Password:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "New Password:"
+msgstr "Nuova password:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Confirm Password:"
+msgstr "Conferma password:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Import"
+msgstr "Importa"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "1. Import a .CSV file"
+msgstr "1. Importa un file .CSV"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"Select a .CSV file to import. If you need a sample of file to import,\n"
+" you should use the export tool with the \"Import Compatible\" option."
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "CSV File:"
+msgstr "File CSV:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "2. Check your file format"
+msgstr "2. Controlla il formato del tuo file"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Import Options"
+msgstr "Opzioni di importazione"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Does your file have titles?"
+msgstr "Il vostro file ha i titoli?"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Separator:"
+msgstr "Separatore:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Delimiter:"
+msgstr "Delimitatore:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Encoding:"
+msgstr "Codifica:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "UTF-8"
+msgstr "UTF-8"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Latin 1"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Lines to skip"
+msgstr "Linee da saltare"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "The import failed due to:"
+msgstr "L'importazione è fallita a causa di:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Here is a preview of the file we could not import:"
+msgstr "Ecco un anteprima del file che non si è riuscito ad importare:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "OpenERP Web"
+msgstr "OpenERP Web"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Version"
+msgstr "Versione"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Copyright © 2011-TODAY OpenERP SA. All Rights Reserved."
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "OpenERP is a trademark of the"
+msgstr "OpenERP è un marchio di"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "OpenERP SA Company"
+msgstr "OpenERP SA Company"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Licenced under the terms of"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "GNU Affero General Public License"
+msgstr "GNU Affero General Public License"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "About OpenERP"
+msgstr "Informazioni su OpenERP"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "OpenERP"
+msgstr "OpenERP"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"is a free enterprise-scale software system that is designed to boost\n"
+" productivity and profit through data integration. It connects, "
+"improves and\n"
+" manages business processes in areas such as sales, finance, "
+"supply chain,\n"
+" project management, production, services, CRM, etc..."
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"The system is platform-independent, and can be installed on Windows, Mac OS "
+"X,\n"
+" and various Linux and other Unix-based distributions. Its "
+"architecture enables\n"
+" new functionality to be rapidly created, modifications to be "
+"made to a\n"
+" production system and migration to a new version to be "
+"straightforward."
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"Depending on your needs, OpenERP is available through a web or application "
+"client."
+msgstr ""
+"In base alle tue esigenze, OpenERP è disponibile tramite un browse web o "
+"un'applicazione client."
--- /dev/null
+# Dutch (Belgium) translation for openerp-web
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openerp-web package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openerp-web\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2011-10-07 10:38+0200\n"
+"PO-Revision-Date: 2011-10-07 12:50+0000\n"
+"Last-Translator: Niels Huylebroeck <Unknown>\n"
+"Language-Team: Dutch (Belgium) <nl_BE@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-10-08 05:29+0000\n"
+"X-Generator: Launchpad (build 14110)\n"
+
+#: addons/web/static/src/js/view_form.js:355
+msgid ""
+"Warning, the record has been modified, your changes will be discarded."
+msgstr ""
+"Opgelet, het record werd gewijzigd, uw veranderingen zullen niet opgeslagen "
+"worden."
+
+#: addons/web/static/src/js/view_form.js:1659
+msgid "<em> Search More...</em>"
+msgstr "<em> Uitgebreid zoeken...</em>"
+
+#: addons/web/static/src/js/view_form.js:1672
+#, python-format
+msgid "<em> Create \"<strong>%s</strong>\"</em>"
+msgstr "<em> Creër \"<strong>%s</strong>\"</em>"
+
+#: addons/web/static/src/js/view_form.js:1678
+msgid "<em> Create and Edit...</em>"
+msgstr "<em> Creër en bewerk...</em>"
+
+#: addons/web/static/src/js/views.js:568
+msgid "You must choose at least one record."
+msgstr "U moet minstens een record selecteren."
+
+#: addons/web/static/src/js/views.js:569
+msgid "Warning"
+msgstr "Waarschuwing"
+
+#: addons/web/static/src/js/views.js:609
+msgid "Translations"
+msgstr "Vertalingen"
+
+#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0
+msgid "Save"
+msgstr "Opslaan"
+
+#: addons/web/static/src/js/views.js:615
+msgid "Close"
+msgstr "Sluiten"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "x"
+msgstr "x"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "#{title}"
+msgstr "#{title}"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "#{text}"
+msgstr "#{text}"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Powered by"
+msgstr "Mogelijk gemaakt door"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "openerp.com"
+msgstr "openerp.com"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "."
+msgstr "."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Loading..."
+msgstr "Laden..."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Create"
+msgstr "Creër"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Drop"
+msgstr "Drop"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Backup"
+msgstr "Backup"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Restore"
+msgstr "Restore"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Password"
+msgstr "Wachtwoord"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Back to Login"
+msgstr "Terug naar aanmelding"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "CREATE DATABASE"
+msgstr "CREATE DATABASE"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Master password:"
+msgstr "Master wachtwoord:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "New database name:"
+msgstr "Nieuwe database naam:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Load Demonstration data:"
+msgstr "Demonstratie data laden:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Default language:"
+msgstr "Standaard taal:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Admin password:"
+msgstr "Beheerder wachtwoord:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Confirm password:"
+msgstr "Bevestig wachtwoord:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "DROP DATABASE"
+msgstr "DROP DATABASE"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Database:"
+msgstr "Database:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Master Password:"
+msgstr "Master wachtwoord:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "BACKUP DATABASE"
+msgstr "BACKUP DATABASE"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "RESTORE DATABASE"
+msgstr "RESTORE DATABASE"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "File:"
+msgstr "Bestand:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "CHANGE MASTER PASSWORD"
+msgstr "CHANGE MASTER PASSWORD"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "New master password:"
+msgstr "Nieuw master wachtwoord:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Confirm new master password:"
+msgstr "Bevestig nieuw master wachtwoord:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "User:"
+msgstr "Gebruiker:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Password:"
+msgstr "Wachtwoord:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Database"
+msgstr "Database"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Login"
+msgstr "Login"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Bad username or password"
+msgstr "Verkeerde gebruikersnaam of wachtwoord"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"We think that daily job activities can be more intuitive, efficient, "
+"automated, .. and even fun."
+msgstr ""
+"Wij geloven dat je dagelijkse werk intuitiver, efficienter, geautomatiseerd "
+"en leuker kan zijn."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "OpenERP's vision to be:"
+msgstr "OpenERP's visie is:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Full featured"
+msgstr "Volledig uitgerust"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"Today's enterprise challenges are multiple. We provide one module for each "
+"need."
+msgstr ""
+"Hedendaagse uitdaging voor bedrijven zijn alom. Wij voorzien een module voor "
+"elke uitdaging."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Open Source"
+msgstr "Open Source"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"To Build a great product, we rely on the knowledge of thousands of "
+"contributors."
+msgstr ""
+"Om een geweldig product te maken vertrouwen we op de kennis van duizenden "
+"mensen."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "User Friendly"
+msgstr "Gebruiksvriendelijk"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"In order to be productive, people need clean and easy to use interface."
+msgstr ""
+"Om productief te kunnen zijn hebben mensen een mooie en gemakkelijke "
+"interface nodig."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "("
+msgstr "("
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ")"
+msgstr ")"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "LOGOUT"
+msgstr "LOGOUT"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "«"
+msgstr "«"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "»"
+msgstr "»"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "oe_secondary_menu_item"
+msgstr "oe_secondary_menu_item"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "oe_secondary_submenu_item"
+msgstr "oe_secondary_submenu_item"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Hide this tip"
+msgstr "Verberg deze tip"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Disable all tips"
+msgstr "Verberg alle tips"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "View#"
+msgstr "View#"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Fields"
+msgstr "Velden"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "View labels"
+msgstr "Toon labels"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Sidebar Relates"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Field"
+msgstr "Veld"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ":"
+msgstr ":"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Translate view"
+msgstr "Vertaal scherm"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Translate sidebar"
+msgstr "Vertaal balk"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Delete"
+msgstr "Verwijder"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "First"
+msgstr "Eerste"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "<"
+msgstr "<"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ">"
+msgstr ">"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Last"
+msgstr "Laatste"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "♻"
+msgstr "♻"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save & Edit"
+msgstr "Opslaan & Bewerken"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Create & Edit"
+msgstr "Creër & Bewerk"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "New"
+msgstr "Nieuw"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Duplicate"
+msgstr "Dupliceer"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Readonly/Editable"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "<<"
+msgstr "<<"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "0"
+msgstr "0"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "/"
+msgstr "/"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ">>"
+msgstr ">>"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Add"
+msgstr "Toevoegen"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Unhandled widget"
+msgstr "Niet-verwerkbare widget"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "?"
+msgstr "?"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "#"
+msgstr "#"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Done"
+msgstr "Voltooid"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Open..."
+msgstr "Open..."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Create..."
+msgstr "Creër..."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Search..."
+msgstr "Zoeken..."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "..."
+msgstr "..."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Uploading ..."
+msgstr "Uploaden ..."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Select"
+msgstr "Selecteer"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save As"
+msgstr "Opslaan als"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Clear"
+msgstr "Leegmaken"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Advanced Filter"
+msgstr "Geavanceerde filter"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "-- Filters --"
+msgstr "-- Filters --"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "-- Actions --"
+msgstr "-- Acties --"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save Filter"
+msgstr "Filter opslaan"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Manage Filters"
+msgstr "Filters beheren"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Filter Name:"
+msgstr "Filternaam:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "(Any existing filter with the same name will be replaced)"
+msgstr "(Bestaande filters met dezelfde naam worden overschreven)"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Any of the following conditions must match"
+msgstr "Een van de volgende voorwaarden moet overeenstemmen"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "All the following conditions must match"
+msgstr "Elke van de volgende voorwaarden moeten overeenstemmen"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "None of the following conditions must match"
+msgstr "Geen enkele van de volgende voorwaarden moeten overeenstemmen"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Add condition"
+msgstr "Voorwaarde toevoegen"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "and"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save & New"
+msgstr "Opslaan & Nieuwe"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save & Close"
+msgstr "Opslaan & Sluiten"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Export"
+msgstr "Exporteren"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"This wizard will export all data that matches the current search criteria to "
+"a CSV file.\n"
+" You can export all data or only the fields that can be "
+"reimported after modification."
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Export Type:"
+msgstr "Export Type:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Import Compatible Export"
+msgstr "Exporteren op een compatibele manier"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Export all Data"
+msgstr "Alles exporteren"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Export Formats"
+msgstr "Export formaten"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Available fields"
+msgstr "Beschikbare velden"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Fields to export"
+msgstr "Te exporteren velden"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save fields list"
+msgstr "Export definitie opslaan"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Remove"
+msgstr "Verwijderen"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Remove All"
+msgstr "Alles verwijderen"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Name"
+msgstr "Naam"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid " "
+msgstr " "
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save as:"
+msgstr "Opslaan als:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Ok"
+msgstr "Ok"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Saved exports:"
+msgstr "Export definities"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Old Password:"
+msgstr "Huidig wachtwoord:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "New Password:"
+msgstr "Nieuw wachtwoord:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Confirm Password:"
+msgstr "Bevestig wachtwoord:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Import"
+msgstr "Importeren"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "1. Import a .CSV file"
+msgstr "1. Importeer een .CSV bestand"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"Select a .CSV file to import. If you need a sample of file to import,\n"
+" you should use the export tool with the \"Import Compatible\" option."
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "CSV File:"
+msgstr "CSV Bestand:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "2. Check your file format"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Import Options"
+msgstr "Import opties"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Does your file have titles?"
+msgstr "Heeft uw bestand een hoofding ?"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Separator:"
+msgstr "Scheidingsteken"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Delimiter:"
+msgstr "Veld begrenzing"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Encoding:"
+msgstr "Encodering:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "UTF-8"
+msgstr "UTF-8"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Latin 1"
+msgstr "Latin 1"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Lines to skip"
+msgstr "Aantal lijnen overslaan"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "The import failed due to:"
+msgstr "De import is niet gelukt omdat:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Here is a preview of the file we could not import:"
+msgstr "Hier is een voorbeeld van het bestand dat we niet konden importeren:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "OpenERP Web"
+msgstr "OpenERP Web"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Version"
+msgstr "Versie"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Copyright © 2011-TODAY OpenERP SA. All Rights Reserved."
+msgstr "Copyright © 2011-TODAY OpenERP SA. Alle rechten voorbehouden."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "OpenERP is a trademark of the"
+msgstr "OpenERP is een handelsmerk van"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "OpenERP SA Company"
+msgstr "OpenERP SA Company"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Licenced under the terms of"
+msgstr "Gelicensieërd onder de voorwaarden van"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "GNU Affero General Public License"
+msgstr "GNU Affero General Public License"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "About OpenERP"
+msgstr "About OpenERP"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "OpenERP"
+msgstr "OpenERP"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"is a free enterprise-scale software system that is designed to boost\n"
+" productivity and profit through data integration. It connects, "
+"improves and\n"
+" manages business processes in areas such as sales, finance, "
+"supply chain,\n"
+" project management, production, services, CRM, etc..."
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"The system is platform-independent, and can be installed on Windows, Mac OS "
+"X,\n"
+" and various Linux and other Unix-based distributions. Its "
+"architecture enables\n"
+" new functionality to be rapidly created, modifications to be "
+"made to a\n"
+" production system and migration to a new version to be "
+"straightforward."
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"Depending on your needs, OpenERP is available through a web or application "
+"client."
+msgstr ""
+"Afhankelijk van uw behoefte is OpenERP beschikbaar via een web- of desktop-"
+"applicatie."
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2011-09-06 12:02+0200\n"
+"POT-Creation-Date: 2011-10-07 10:38+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 0.9.6\n"
-#: addons/web/static/src/js/form.js:1473
+#: addons/web/static/src/js/view_form.js:355
+msgid "Warning, the record has been modified, your changes will be discarded."
+msgstr ""
+
+#: addons/web/static/src/js/view_form.js:1659
msgid "<em> Search More...</em>"
msgstr ""
-#: addons/web/static/src/js/form.js:1486
+#: addons/web/static/src/js/view_form.js:1672
#, python-format
msgid "<em> Create \"<strong>%s</strong>\"</em>"
msgstr ""
-#: addons/web/static/src/js/form.js:1492
+#: addons/web/static/src/js/view_form.js:1678
msgid "<em> Create and Edit...</em>"
msgstr ""
-#: addons/web/static/src/js/views.js:484
+#: addons/web/static/src/js/views.js:568
+msgid "You must choose at least one record."
+msgstr ""
+
+#: addons/web/static/src/js/views.js:569
+msgid "Warning"
+msgstr ""
+
+#: addons/web/static/src/js/views.js:609
msgid "Translations"
msgstr ""
-#: addons/web/static/src/js/views.js:489 addons/web/static/src/xml/base.xml:0
+#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0
msgid "Save"
msgstr ""
-#: addons/web/static/src/js/views.js:490
+#: addons/web/static/src/js/views.js:615
msgid "Close"
msgstr ""
msgstr ""
#: addons/web/static/src/xml/base.xml:0
-msgid "h3"
+msgid "«"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
-msgid "<"
+msgid "»"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
-msgid ">"
+msgid "oe_secondary_menu_item"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "oe_secondary_submenu_item"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
-msgid "</"
+msgid "Hide this tip"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
-msgid "h4"
+msgid "Disable all tips"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "View#"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgstr ""
#: addons/web/static/src/xml/base.xml:0
-msgid "Last"
+msgid "<"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
-msgid "♻"
+msgid ">"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
-msgid "View#"
+msgid "Last"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "♻"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgstr ""
#: addons/web/static/src/xml/base.xml:0
+msgid "Duplicate"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Readonly/Editable"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
msgid "<<"
msgstr ""
msgstr ""
#: addons/web/static/src/xml/base.xml:0
+msgid "#"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Done"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
msgid "Open..."
msgstr ""
msgstr ""
#: addons/web/static/src/xml/base.xml:0
+msgid "Import"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "1. Import a .CSV file"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"Select a .CSV file to import. If you need a sample of file to import,\n"
+" you should use the export tool with the \"Import Compatible\" "
+"option."
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "CSV File:"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "2. Check your file format"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Import Options"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Does your file have titles?"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Separator:"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Delimiter:"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Encoding:"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "UTF-8"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Latin 1"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Lines to skip"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "The import failed due to:"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Here is a preview of the file we could not import:"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
msgid "OpenERP Web"
msgstr ""
cursor: help;
}
-.openerp .oe_form_field label.oe_label, .openerp .oe_form_field label.oe_label_help {
+.openerp .oe_forms label.oe_label, .openerp .oe_forms label.oe_label_help {
text-align: right;
margin: 3px 0 0 10px;
}
position: relative;
}
.openerp input.oe-binary-file {
- z-index: 2;
+ z-index: 0;
line-height: 0;
font-size: 50px;
position: absolute;
* @param {String} [column.string] button label
* @param {String} [column.icon] button icon
* @param {String} [value_if_empty=''] what to display if the field's value is ``false``
+ * @param {Boolean} [process_modifiers=true] should the modifiers be computed ?
*/
-openerp.web.format_cell = function (row_data, column, value_if_empty) {
- var attrs = column.modifiers_for(row_data);
+openerp.web.format_cell = function (row_data, column, value_if_empty, process_modifiers) {
+ var attrs = {};
+ if (process_modifiers !== false) {
+ attrs = column.modifiers_for(row_data);
+ }
if (attrs.invisible) { return ''; }
if (column.tag === 'button') {
return [
*/
make_field: function (item, field) {
try {
- return new (openerp.web.search.fields.get_object(field.type))
- (item, field, this);
+ return new (openerp.web.search.fields.get_any(
+ [item.attrs.widget, field.type]))
+ (item, field, this);
} catch (e) {
if (! e instanceof openerp.web.KeyNotFound) {
throw e;
this.notification.notify("Invalid Search", "triggered from search view");
},
do_clear: function () {
- this.$element.find('.filter_label').removeClass('enabled');
+ this.$element.find('.filter_label, .filter_icon').removeClass('enabled');
this.enabled_filters.splice(0);
var string = $('a.searchview_group_string');
_.each(string, function(str){
* @extends openerp.web.search.Field
*/
openerp.web.search.SelectionField = openerp.web.search.Field.extend(/** @lends openerp.web.search.SelectionField# */{
+ // This implementation is a basic <select> field, but it may have to be
+ // altered to be more in line with the GTK client, which uses a combo box
+ // (~ jquery.autocomplete):
+ // * If an option was selected in the list, behave as currently
+ // * If something which is not in the list was entered (via the text input),
+ // the default domain should become (`ilike` string_value) but **any
+ // ``context`` or ``filter_domain`` becomes falsy, idem if ``@operator``
+ // is specified. So at least get_domain needs to be quite a bit
+ // overridden (if there's no @value and there is no filter_domain and
+ // there is no @operator, return [[name, 'ilike', str_val]]
template: 'SearchView.field.selection',
+ init: function () {
+ this._super.apply(this, arguments);
+ // prepend empty option if there is no empty option in the selection list
+ this.prepend_empty = !_(this.attrs.selection).detect(function (item) {
+ return !item[1];
+ });
+ },
get_value: function () {
- return this.$element.val();
+ var index = parseInt(this.$element.val(), 10);
+ if (isNaN(index)) { return null; }
+ var value = this.attrs.selection[index][0];
+ if (value === false) { return null; }
+ return value;
+ },
+ /**
+ * The selection field needs a default ``false`` value in case none is
+ * provided, so that selector options with a ``false`` value (convention
+ * for explicitly empty options) get selected by default rather than the
+ * first (value-holding) option in the selection.
+ *
+ * @param {Object} defaults search default values
+ */
+ render: function (defaults) {
+ if (!defaults[this.attrs.name]) {
+ defaults[this.attrs.name] = false;
+ }
+ return this._super(defaults);
}
});
openerp.web.search.BooleanField = openerp.web.search.SelectionField.extend(/** @lends openerp.web.search.BooleanField# */{
self.on_confirmed().then(function() {
def.resolve();
});
- $(self).dialog("close");
+ $(this).dialog("close");
},
Cancel: function() {
def.resolve();
- $(self).dialog("close");
+ $(this).dialog("close");
}
}
});
return self.on_confirmed();
}
};
- if ((!this.node.attrs.special && this.view.dirty_for_user) || !this.view.datarecord.id) {
+ if (!this.node.attrs.special && (this.view.dirty_for_user || !this.view.datarecord.id)) {
return this.view.recursive_save().pipe(exec_action);
} else {
return exec_action();
result.result.context = _.extend(result.result.context || {}, additional_context);
self.do_action(result.result);
});
+ },
+ focus: function () {
+ this.$input.focus();
}
});
self.save_form_view();
});
controller.$element.find(".oe_form_button_save_edit").hide();
+ } else if (view_type == "graph") {
+ self.reload_current_view()
}
self.is_started.resolve();
});
this.form_last_update.then(function() {
this.form_last_update = view.do_show();
});
+ } else if (self.viewmanager.active_view === "graph") {
+ view.do_search(this.build_domain(), this.dataset.get_context(), []);
}
},
set_value: function(value) {
});
this.searchview.on_search.add(function(domains, contexts, groupbys) {
if (self.initial_ids) {
- self.view_list.do_search.call(self, domains.concat([[["id", "in", self.initial_ids]], self.domain]),
+ self.do_search(domains.concat([[["id", "in", self.initial_ids]], self.domain]),
contexts, groupbys);
self.initial_ids = undefined;
} else {
- self.view_list.do_search.call(self, domains.concat([self.domain]), contexts, groupbys);
+ self.do_search(domains.concat([self.domain]), contexts, groupbys);
}
});
this.searchview.on_loaded.add_last(function () {
}).pipe(function() {
self.searchview.do_search();
});
-
});
this.searchview.appendTo($("#" + this.element_id + "_search"));
},
+ do_search: function(domains, contexts, groupbys) {
+ var self = this;
+ this.rpc('/web/session/eval_domain_and_context', {
+ domains: domains || [],
+ contexts: contexts || [],
+ group_by_seq: groupbys || []
+ }, function (results) {
+ self.view_list.do_search(results.domain, results.context, results.group_by);
+ });
+ },
create_row: function(data) {
var self = this;
var wdataset = new openerp.web.DataSetSearch(this, this.model, this.context, this.domain);
_(ids).each(function (id) {
self.records.remove(self.records.get(id));
});
+ self.configure_pager(self.dataset);
self.compute_aggregates();
});
},
}
$footer_cells.filter(_.sprintf('[data-field=%s]', column.id))
- .html(openerp.web.format_cell(aggregation, column));
+ .html(openerp.web.format_cell(aggregation, column, undefined, false));
});
},
get_selected_ids: function() {
if (self.groups.get_selection().length) {
return;
}
+ self.configure_pager(self.dataset);
self.compute_aggregates();
}
})
*/
},
ir_actions_act_window_close: function (action, on_closed) {
+ if (!this.dialog && on_closed) {
+ on_closed();
+ }
this.dialog_stop();
},
ir_actions_server: function (action, on_closed) {
var main_view_loaded = this._super();
var manager_ready = $.when(searchview_loaded, main_view_loaded);
- if (searchview_loaded && this.action['auto_search']) {
+ if (searchview_loaded && this.action['auto_search'] !== false) {
// schedule auto_search
manager_ready.then(this.searchview.do_search);
}
<input type="text" size="1"
t-att-name="widget.name"
t-att-id="widget.element_id"
- t-attf-class="field_#{widget.type} #{widget.element_class}"
+ t-attf-class="field_#{widget.type}"
t-attf-style="width: #{widget.field.translate ? '99' : '100'}%"
/>
<img class="oe_field_translate" t-if="widget.field.translate" src="/web/static/src/img/icons/terp-translate.png" width="16" height="16" border="0"/>
<t t-name="FieldChar.readonly">
<div
t-att-id="widget.element_id"
- t-attf-class="field_#{widget.type} #{widget.element_class}"
+ t-attf-class="field_#{widget.type}"
t-attf-style="width: #{widget.field.translate ? '99' : '100'}%">
</div>
</t>
<textarea rows="6"
t-att-name="widget.name"
t-att-id="widget.element_id"
- t-attf-class="field_#{widget.type} #{widget.element_class}"
+ t-attf-class="field_#{widget.type}"
t-attf-style="width: #{widget.field.translate ? '99' : '100'}%"
></textarea>
<img class="oe_field_translate" t-if="widget.field.translate" src="/web/static/src/img/icons/terp-translate.png" width="16" height="16" border="0"/>
<t t-name="FieldSelection">
<select
t-att-name="widget.name"
- t-att-id="widget.element_id + '_field'"
- t-attf-class="field_#{widget.type} #{widget.element_class}"
+ t-att-id="widget.element_id"
+ t-attf-class="field_#{widget.type}"
style="width: 100%">
<t t-foreach="widget.values" t-as="option">
<option><t t-esc="option[1]"/></option>
</select>
</t>
<t t-name="FieldMany2One">
- <div t-att-class="widget.element_class" class="oe-m2o">
- <input type="text" size="1" style="width: 100%;"/>
+ <div class="oe-m2o">
+ <input type="text" size="1" style="width: 100%;"
+ t-att-id="widget.element_id"/>
<span class="oe-m2o-drop-down-button">
<img src="/web/static/src/img/down-arrow.png" /></span>
<span class="oe-m2o-cm-button" t-att-id="widget.name + '_open'">
<t t-name="FieldBoolean">
<input type="checkbox"
t-att-name="widget.name"
- t-att-id="widget.element_id + '_field'"
- t-attf-class="field_#{widget.type} #{widget.element_class}"/>
+ t-att-id="widget.element_id"
+ t-attf-class="field_#{widget.type}"/>
</t>
<t t-name="FieldProgressBar">
<div t-opentag="true" class="oe-progressbar">
t-att-border="widget.readonly ? 0 : 1"
t-att-id="widget.element_id + '_field'"
t-att-name="widget.name"
- t-attf-class="field_#{widget.type} #{widget.element_class}"
+ t-attf-class="field_#{widget.type}"
t-att-width="widget.node.attrs.img_width || widget.node.attrs.width"
t-att-height="widget.node.attrs.img_height || widget.node.attrs.height"
/>
<input type="text" size="1"
t-att-name="widget.name"
t-att-id="widget.element_id + '_field'"
- t-attf-class="field_#{widget.type} #{widget.element_class}" style="width: 100%"
+ t-attf-class="field_#{widget.type}" style="width: 100%"
/>
</td>
<td class="oe-binary" nowrap="true">
</t>
<t t-name="WidgetButton">
<button type="button"
- t-attf-class="#{widget.element_class}"
t-att-title="widget.help"
style="width: 100%" class="button">
<img t-if="widget.node.attrs.icon" t-att-src="'/web/static/src/img/icons/' + widget.node.attrs.icon + '.png'" width="16" height="16"/>
<div style="white-space: nowrap;">
<select t-att-name="attrs.name" t-att-id="element_id"
t-att-autofocus="attrs.default_focus === '1' || undefined">
- <option/>
+ <option t-if="prepend_empty"/>
<t t-foreach="attrs.selection" t-as="option">
<t t-set="selected" t-value="defaults[attrs.name] === option[0]"/>
<option t-if="selected"
- t-att-value="option[0]" selected="selected">
+ t-att-value="option_index" selected="selected">
<t t-esc="option[1]"/>
</option>
- <option t-if="!selected" t-att-value="option[0]">
+ <option t-if="!selected" t-att-value="option_index">
<t t-esc="option[1]"/>
</option>
</t>
{
"name": "web calendar",
+ "category" : "Hidden",
"version": "2.0",
"depends": ['web'],
"js": [
--- /dev/null
+# Spanish (Ecuador) translation for openerp-web
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openerp-web package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openerp-web\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2011-10-07 10:38+0200\n"
+"PO-Revision-Date: 2011-10-07 15:54+0000\n"
+"Last-Translator: Cristian Salamea (Gnuthink) <ovnicraft@gmail.com>\n"
+"Language-Team: Spanish (Ecuador) <es_EC@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-10-08 05:30+0000\n"
+"X-Generator: Launchpad (build 14110)\n"
+
+#: addons/web_calendar/static/src/xml/web_calendar.xml:0
+msgid " "
+msgstr " "
--- /dev/null
+# Italian translation for openerp-web
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openerp-web package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openerp-web\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2011-10-07 10:38+0200\n"
+"PO-Revision-Date: 2011-10-08 13:39+0000\n"
+"Last-Translator: Nicola Riolini - Micronaet <Unknown>\n"
+"Language-Team: Italian <it@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-10-09 05:22+0000\n"
+"X-Generator: Launchpad (build 14110)\n"
+
+#: addons/web_calendar/static/src/xml/web_calendar.xml:0
+msgid " "
+msgstr " "
--- /dev/null
+# Dutch (Belgium) translation for openerp-web
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openerp-web package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openerp-web\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2011-10-07 10:38+0200\n"
+"PO-Revision-Date: 2011-10-07 09:05+0000\n"
+"Last-Translator: Niels Huylebroeck <Unknown>\n"
+"Language-Team: Dutch (Belgium) <nl_BE@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-10-08 05:30+0000\n"
+"X-Generator: Launchpad (build 14110)\n"
+
+#: addons/web_calendar/static/src/xml/web_calendar.xml:0
+msgid " "
+msgstr " "
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2011-09-06 12:02+0200\n"
+"POT-Creation-Date: 2011-10-07 10:38+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
},
start: function() {
this._super();
- this.rpc("/web/view/load", {"model": this.model, "view_id": this.view_id, "view_type":"calendar", 'toolbar': true}, this.on_loaded);
+ return this.rpc("/web/view/load", {"model": this.model, "view_id": this.view_id, "view_type":"calendar", 'toolbar': true}, this.on_loaded);
},
stop: function() {
scheduler.clearAll();
this.day_length = this.fields_view.arch.attrs.day_length || 8;
this.color_field = this.fields_view.arch.attrs.color;
this.fields = this.fields_view.fields;
+
+ if (!this.date_start) {
+ throw new Error("Calendar view has not defined 'date_start' attribute.");
+ }
//* Calendar Fields *
this.calendar_fields.date_start = {'name': this.date_start, 'kind': this.fields[this.date_start].type};
if (this.date_stop) {
this.calendar_fields.date_stop = {'name': this.date_stop, 'kind': this.fields[this.date_stop].type};
}
- if (!this.date_delay && !this.date_stop) {
- throw new Error("Calendar view has none of the following attributes : 'date_stop', 'date_delay'");
- }
for (var fld = 0; fld < this.fields_view.arch.children.length; fld++) {
this.info_fields.push(this.fields_view.arch.children[fld].attrs.name);
convert_event: function(evt) {
var date_start = openerp.web.str_to_datetime(evt[this.date_start]),
date_stop = this.date_stop ? openerp.web.str_to_datetime(evt[this.date_stop]) : null,
- date_delay = evt[this.date_delay] || null,
+ date_delay = evt[this.date_delay] || 1.0,
res_text = '',
res_description = [];
{
"name": "Web Chat",
+ "category" : "Hidden",
"version": "2.0",
"depends": ['web'],
"js": [
'static/src/js/web_chat.js'
],
"css": [],
-# 'active': True,
'active': False,
+ 'installable': False,
}
import time
import simplejson
-import web.common as openerpweb
+import web.common.http as openerpweb
import logging
_logger = logging.getLogger(__name__)
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2011-09-06 12:03+0200\n"
+"POT-Creation-Date: 2011-10-07 10:39+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
{
"name": "web Dashboard",
+ "category" : "Hidden",
"version": "2.0",
"depends": ['web'],
"js": [
# -*- coding: utf-8 -*-
-import web.common as openerpweb
+import web.common.http as openerpweb
WIDGET_CONTENT_PATTERN = """<!DOCTYPE html>
<html>
--- /dev/null
+# Spanish (Ecuador) translation for openerp-web
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openerp-web package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openerp-web\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2011-10-07 10:39+0200\n"
+"PO-Revision-Date: 2011-10-07 15:56+0000\n"
+"Last-Translator: Cristian Salamea (Gnuthink) <ovnicraft@gmail.com>\n"
+"Language-Team: Spanish (Ecuador) <es_EC@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-10-08 05:30+0000\n"
+"X-Generator: Launchpad (build 14110)\n"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "Reset"
+msgstr "Reset"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "Undo"
+msgstr "Deshacer"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "Add Widget"
+msgstr "Agregar Widget"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "Change layout"
+msgstr "Cambiar disposición"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "Choose dashboard layout"
+msgstr "Elegir el diseño del panel de control"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "progress:"
+msgstr "progreso:"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "%"
+msgstr "%"
--- /dev/null
+# Italian translation for openerp-web
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openerp-web package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openerp-web\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2011-10-07 10:39+0200\n"
+"PO-Revision-Date: 2011-10-07 09:00+0000\n"
+"Last-Translator: Davide Corio - agilebg.com <davide.corio@agilebg.com>\n"
+"Language-Team: Italian <it@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-10-08 05:30+0000\n"
+"X-Generator: Launchpad (build 14110)\n"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "Reset"
+msgstr "Ripristina"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "Undo"
+msgstr "Annulla"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "Add Widget"
+msgstr "Aggiungi Widget"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "Change layout"
+msgstr "Cambia layout"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "Choose dashboard layout"
+msgstr "Scegli layout dashboard"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "progress:"
+msgstr "avanzamento:"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "%"
+msgstr "%"
--- /dev/null
+# Dutch (Belgium) translation for openerp-web
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openerp-web package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openerp-web\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2011-10-07 10:39+0200\n"
+"PO-Revision-Date: 2011-10-07 09:04+0000\n"
+"Last-Translator: Niels Huylebroeck <Unknown>\n"
+"Language-Team: Dutch (Belgium) <nl_BE@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-10-08 05:30+0000\n"
+"X-Generator: Launchpad (build 14110)\n"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "Reset"
+msgstr "Reset"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "Undo"
+msgstr "Ongedaan maken"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "Add Widget"
+msgstr "Widget toevoegen"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "Change layout"
+msgstr "Layout aanpassen"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "Choose dashboard layout"
+msgstr "Dashboard layout kiezen"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "progress:"
+msgstr "vooruitgang:"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "%"
+msgstr "%"
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2011-09-06 12:02+0200\n"
+"POT-Creation-Date: 2011-10-07 10:39+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
{
"name" : "OpenERP Web installer home",
+ "category" : "Hidden",
"version" : "2.0",
"depends" : ['web'],
'active': True,
--- /dev/null
+# Spanish (Ecuador) translation for openerp-web
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openerp-web package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openerp-web\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2011-10-07 10:39+0200\n"
+"PO-Revision-Date: 2011-10-07 16:00+0000\n"
+"Last-Translator: Cristian Salamea (Gnuthink) <ovnicraft@gmail.com>\n"
+"Language-Team: Spanish (Ecuador) <es_EC@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-10-08 05:30+0000\n"
+"X-Generator: Launchpad (build 14110)\n"
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Welcome to your new OpenERP instance."
+msgstr "Bienvenido a tu nueva instancia de OpenERP"
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Remember to bookmark this page."
+msgstr "Recuerda marcar esta página"
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Remember your login:"
+msgstr "Recordar tu inicio de sesión"
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Choose the first OpenERP Application you want to install.."
+msgstr "Escoge la primea Aplicación OpenERP que deseas instalar..."
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Install"
+msgstr "Instalar"
--- /dev/null
+# Italian translation for openerp-web
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openerp-web package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openerp-web\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2011-10-07 10:39+0200\n"
+"PO-Revision-Date: 2011-10-08 13:41+0000\n"
+"Last-Translator: Nicola Riolini - Micronaet <Unknown>\n"
+"Language-Team: Italian <it@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-10-09 05:22+0000\n"
+"X-Generator: Launchpad (build 14110)\n"
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Welcome to your new OpenERP instance."
+msgstr "Benvenuto nella nuova istanza di OpenERP"
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Remember to bookmark this page."
+msgstr "Ricordarsi di aggiungere ai preferiti questa pagina"
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Remember your login:"
+msgstr "Ricordare il proprio login:"
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Choose the first OpenERP Application you want to install.."
+msgstr "Scegliere la prima applicazione OpenERP che volete installare..."
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Install"
+msgstr "Installa"
--- /dev/null
+# Dutch (Belgium) translation for openerp-web
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openerp-web package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openerp-web\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2011-10-07 10:39+0200\n"
+"PO-Revision-Date: 2011-10-07 09:07+0000\n"
+"Last-Translator: Niels Huylebroeck <Unknown>\n"
+"Language-Team: Dutch (Belgium) <nl_BE@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-10-08 05:30+0000\n"
+"X-Generator: Launchpad (build 14110)\n"
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Welcome to your new OpenERP instance."
+msgstr "Welkom bij uw nieuwe OpenERP."
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Remember to bookmark this page."
+msgstr "Gelieve een bookmark voor deze pagina te maken."
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Remember your login:"
+msgstr "Vergeet je login niet:"
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Choose the first OpenERP Application you want to install.."
+msgstr "Kies welke OpenERP Applicatie je wilt installeren..."
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Install"
+msgstr "Installeer"
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2011-09-06 12:02+0200\n"
+"POT-Creation-Date: 2011-10-07 10:39+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
$.blockUI({message:'<img src="/web/static/src/img/throbber2.gif">'});
Modules.read_slice(['id'], {}, function (records) {
- if (!(records.length === 1)) { return; }
+ if (!(records.length === 1)) { $.unblockUI(); return; }
Modules.call('state_update',
[_.pluck(records, 'id'), 'to install', ['uninstalled']],
function () {
{
"name" : "OpenERP Web Diagram",
+ "category" : "Hidden",
"version" : "2.0",
"depends" : ["base"],
"js": [
-import web.common as openerpweb
+import web.common.http as openerpweb
from web.controllers.main import View
class DiagramView(View):
--- /dev/null
+# Spanish (Ecuador) translation for openerp-web
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openerp-web package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openerp-web\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2011-10-07 10:39+0200\n"
+"PO-Revision-Date: 2011-10-07 16:02+0000\n"
+"Last-Translator: Cristian Salamea (Gnuthink) <ovnicraft@gmail.com>\n"
+"Language-Team: Spanish (Ecuador) <es_EC@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-10-08 05:30+0000\n"
+"X-Generator: Launchpad (build 14110)\n"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "New Node"
+msgstr "Nuevo Nodo"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "New Edge"
+msgstr "Nueva arista"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "Show Grid:"
+msgstr "Mostrar cuadrícula"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "First"
+msgstr "Primero"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "<<"
+msgstr "<<"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "0"
+msgstr "0"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "/"
+msgstr "/"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid ">>"
+msgstr ">>"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "Last"
+msgstr "Último"
--- /dev/null
+# Italian translation for openerp-web
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openerp-web package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openerp-web\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2011-10-07 10:39+0200\n"
+"PO-Revision-Date: 2011-10-08 13:41+0000\n"
+"Last-Translator: Nicola Riolini - Micronaet <Unknown>\n"
+"Language-Team: Italian <it@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-10-09 05:22+0000\n"
+"X-Generator: Launchpad (build 14110)\n"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "New Node"
+msgstr "Nuovo Nodo"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "New Edge"
+msgstr ""
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "Show Grid:"
+msgstr "Mostra griglia"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "First"
+msgstr "Primo"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "<<"
+msgstr "<<"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "0"
+msgstr "0"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "/"
+msgstr "/"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid ">>"
+msgstr ">>"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "Last"
+msgstr "Ultimo"
--- /dev/null
+# Dutch (Belgium) translation for openerp-web
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openerp-web package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openerp-web\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2011-10-07 10:39+0200\n"
+"PO-Revision-Date: 2011-10-07 09:08+0000\n"
+"Last-Translator: Niels Huylebroeck <Unknown>\n"
+"Language-Team: Dutch (Belgium) <nl_BE@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-10-08 05:30+0000\n"
+"X-Generator: Launchpad (build 14110)\n"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "New Node"
+msgstr "Nieuw knooppunt"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "New Edge"
+msgstr "Nieuwe verbinding"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "Show Grid:"
+msgstr "Toon raster:"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "First"
+msgstr "Begin"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "<<"
+msgstr "<<"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "0"
+msgstr "0"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "/"
+msgstr "/"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid ">>"
+msgstr ">>"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "Last"
+msgstr "Einde"
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2011-09-06 12:02+0200\n"
+"POT-Creation-Date: 2011-10-07 10:39+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
{
"name": "web Gantt",
+ "category" : "Hidden",
"version": "2.0",
"depends": ['web'],
"js": [
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2011-09-06 12:02+0200\n"
+"POT-Creation-Date: 2011-10-07 10:39+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
{
"name": "web Graph",
+ "category" : "Hidden",
"version": "2.0",
"depends": ['web'],
"js": [
"static/src/js/graph.js"],
"css": ["static/lib/dhtmlxGraph/codebase/dhtmlxchart.css"],
"active": True
-}
\ No newline at end of file
+}
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2011-09-06 12:02+0200\n"
+"POT-Creation-Date: 2011-10-07 10:39+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
openerp.web.views.add('graph', 'openerp.web_graph.GraphView');
openerp.web_graph.GraphView = openerp.web.View.extend({
- init: function(parent, dataset, view_id) {
+ init: function(parent, dataset, view_id, options) {
this._super(parent);
+ this.set_default_options(options);
this.dataset = dataset;
this.view_id = view_id;
this.ordinate = null;
this.columns = [];
this.group_field = null;
+ this.is_loaded = $.Deferred();
},
do_show: function () {
this.$element.show();
start: function() {
var self = this;
this._super();
+ var loaded;
+ if (this.embedded_view) {
+ loaded = $.when([self.embedded_view]);
+ } else {
+ loaded = this.rpc('/web/view/load', {
+ model: this.dataset.model,
+ view_id: this.view_id,
+ view_type: 'graph'
+ });
+ }
return $.when(
this.dataset.call('fields_get', []),
- this.rpc('/web/view/load', {
- model: this.dataset.model,
- view_id: this.view_id,
- view_type: 'graph'
- })).then(function (fields_result, view_result) {
+ loaded)
+ .then(function (fields_result, view_result) {
self.fields = fields_result[0];
self.fields_view = view_result[0];
self.on_loaded();
- });
+ });
},
/**
* Returns all object fields involved in the graph view
}
}, this);
this.ordinate = this.columns[0].name;
+ this.is_loaded.resolve();
},
schedule_chart: function(results) {
var self = this;
},
do_search: function(domain, context, group_by) {
- // TODO: handle non-empty group_by with read_group?
- if (!_(group_by).isEmpty()) {
- this.abscissa = group_by[0];
- } else {
- this.abscissa = this.first_field;
- }
- this.dataset.read_slice(this.list_fields(), {}, $.proxy(this, 'schedule_chart'));
+ var self = this;
+ return $.when(this.is_loaded).pipe(function() {
+ // TODO: handle non-empty group_by with read_group?
+ if (!_(group_by).isEmpty()) {
+ self.abscissa = group_by[0];
+ } else {
+ self.abscissa = self.first_field;
+ }
+ return self.dataset.read_slice(self.list_fields(), {}, $.proxy(self, 'schedule_chart'));
+ });
}
});
};
{
"name": "Hello",
+ "category" : "Hidden",
"version": "2.0",
"depends": [],
"js": ["static/*/*.js", "static/*/js/*.js"],
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2011-09-06 12:03+0200\n"
+"POT-Creation-Date: 2011-10-07 10:39+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
{
"name" : "Base Kanban",
+ "category" : "Hidden",
"version" : "2.0",
"depends" : ["web"],
"js": [
{
"name" : "OpenERP Web mobile",
+ "category" : "Hidden",
"version" : "2.0",
"depends" : [],
'active': True,
--- /dev/null
+# Spanish (Ecuador) translation for openerp-web
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openerp-web package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openerp-web\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2011-10-07 10:39+0200\n"
+"PO-Revision-Date: 2011-10-07 17:50+0000\n"
+"Last-Translator: Cristian Salamea (Gnuthink) <ovnicraft@gmail.com>\n"
+"Language-Team: Spanish (Ecuador) <es_EC@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-10-08 05:30+0000\n"
+"X-Generator: Launchpad (build 14110)\n"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "OpenERP"
+msgstr "OpenERP"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Database:"
+msgstr "Base de datos:"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Login:"
+msgstr "Iniciar sesión:"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Password:"
+msgstr "Contraseña:"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Login"
+msgstr "Iniciar sesión"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Bad username or password"
+msgstr "Usuario o contraseña incorrecta"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Favourite"
+msgstr "Favorito"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Preference"
+msgstr "Preferencia"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Applications"
+msgstr "Aplicaciones"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Options"
+msgstr "Opciones"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Logout"
+msgstr "Salir"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid ":"
+msgstr ":"
--- /dev/null
+# French translation for openerp-web
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openerp-web package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openerp-web\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2011-10-07 10:39+0200\n"
+"PO-Revision-Date: 2011-10-08 02:26+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: French <fr@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-10-09 05:22+0000\n"
+"X-Generator: Launchpad (build 14110)\n"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "OpenERP"
+msgstr ""
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Database:"
+msgstr ""
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Login:"
+msgstr ""
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Password:"
+msgstr ""
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Login"
+msgstr ""
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Bad username or password"
+msgstr ""
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Favourite"
+msgstr ""
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Preference"
+msgstr ""
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Applications"
+msgstr ""
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Options"
+msgstr ""
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Logout"
+msgstr ""
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid ":"
+msgstr ""
--- /dev/null
+# Italian translation for openerp-web
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openerp-web package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openerp-web\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2011-10-07 10:39+0200\n"
+"PO-Revision-Date: 2011-10-08 13:44+0000\n"
+"Last-Translator: Nicola Riolini - Micronaet <Unknown>\n"
+"Language-Team: Italian <it@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-10-09 05:22+0000\n"
+"X-Generator: Launchpad (build 14110)\n"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "OpenERP"
+msgstr "OpenERP"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Database:"
+msgstr "Database:"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Login:"
+msgstr "Login:"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Password:"
+msgstr "Password:"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Login"
+msgstr "Login"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Bad username or password"
+msgstr "Username o password errati"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Favourite"
+msgstr "Preferito"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Preference"
+msgstr ""
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Applications"
+msgstr "Applicazioni"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Options"
+msgstr "Opzioni"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Logout"
+msgstr "Disconnetti"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid ":"
+msgstr ":"
--- /dev/null
+# Dutch (Belgium) translation for openerp-web
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openerp-web package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openerp-web\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2011-10-07 10:39+0200\n"
+"PO-Revision-Date: 2011-10-07 09:10+0000\n"
+"Last-Translator: Niels Huylebroeck <Unknown>\n"
+"Language-Team: Dutch (Belgium) <nl_BE@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-10-08 05:30+0000\n"
+"X-Generator: Launchpad (build 14110)\n"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "OpenERP"
+msgstr "OpenERP"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Database:"
+msgstr "Database:"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Login:"
+msgstr "Login:"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Password:"
+msgstr "Wachtwoord:"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Login"
+msgstr "Login"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Bad username or password"
+msgstr "Verkeerde gebruikersnaam of wachtwoord"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Favourite"
+msgstr "Favoriet"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Preference"
+msgstr "Voorkeur"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Applications"
+msgstr "Applicaties"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Options"
+msgstr "Opties"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Logout"
+msgstr "Afmelden"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid ":"
+msgstr ":"
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2011-09-06 12:03+0200\n"
+"POT-Creation-Date: 2011-10-07 10:39+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
msgstr ""
#: addons/web_mobile/static/src/xml/web_mobile.xml:0
-msgid "Home"
+msgid "Favourite"
msgstr ""
#: addons/web_mobile/static/src/xml/web_mobile.xml:0
-msgid "Shortcuts"
+msgid "Preference"
msgstr ""
#: addons/web_mobile/static/src/xml/web_mobile.xml:0
-msgid "Menu"
+msgid "Applications"
msgstr ""
#: addons/web_mobile/static/src/xml/web_mobile.xml:0
msgstr ""
#: addons/web_mobile/static/src/xml/web_mobile.xml:0
-msgid "Preferences"
-msgstr ""
-
-#: addons/web_mobile/static/src/xml/web_mobile.xml:0
msgid ":"
msgstr ""
{
"name" : "OpenERP Web web",
+ "category" : "Hidden",
"version" : "2.0",
"depends" : [],
'active': False,
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2011-09-06 12:03+0200\n"
+"POT-Creation-Date: 2011-10-07 10:39+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
{
"name": "Tests",
+ "category" : "Hidden",
"version": "2.0",
"depends": [],
"js": ["static/src/js/*.js"],
help="Logging configuration file", metavar="FILE")
optparser.add_option_group(logging_opts)
-import web.common.dispatch
+import web.common.http
if __name__ == "__main__":
(options, args) = optparser.parse_args(sys.argv[1:])
else:
logging.basicConfig(level=getattr(logging, options.log_level.upper()))
- app = web.common.dispatch.Root(options)
+ app = web.common.http.Root(options)
if options.proxy_mode:
app = werkzeug.contrib.fixers.ProxyFix(app)