[MERGE] merge with latest trunk

bzr revid: amb@tinyerp.com-20130528085853-33ak0wen7shv6af2
This commit is contained in:
Amit Bhavsar (Open ERP) 2013-05-28 14:28:53 +05:30
commit 20210d96f8
388 changed files with 3538 additions and 2049 deletions

View File

@ -13,6 +13,7 @@ This module provides the core of the OpenERP Web Client.
'auto_install': True,
'post_load': 'wsgi_postload',
'js' : [
"static/src/fixbind.js",
"static/lib/datejs/globalization/en-US.js",
"static/lib/datejs/core.js",
"static/lib/datejs/parser.js",
@ -76,6 +77,7 @@ This module provides the core of the OpenERP Web Client.
"static/test/class.js",
"static/test/registry.js",
"static/test/form.js",
"static/test/data.js",
"static/test/list-utils.js",
"static/test/formats.js",
"static/test/rpc.js",

View File

@ -643,6 +643,18 @@ class WebClient(openerpweb.Controller):
content, checksum = concat_files((f[0] for f in files), reader)
# move up all @import and @charset rules to the top
matches = []
def push(matchobj):
matches.append(matchobj.group(0))
return ''
content = re.sub(re.compile("(@charset.+;$)", re.M), push, content)
content = re.sub(re.compile("(@import.+;$)", re.M), push, content)
matches.append(content)
content = '\n'.join(matches)
return make_conditional(
req, req.make_response(content, [('Content-Type', 'text/css')]),
last_modified, checksum)
@ -1363,19 +1375,30 @@ class Binary(openerpweb.Controller):
elif dbname is None:
dbname = db_monodb(req)
if uid is None:
if not uid:
uid = openerp.SUPERUSER_ID
if not dbname:
image_data = self.placeholder(req, 'logo.png')
else:
registry = openerp.modules.registry.RegistryManager.get(dbname)
with registry.cursor() as cr:
user = registry.get('res.users').browse(cr, uid, uid)
if user.company_id.logo_web:
image_data = user.company_id.logo_web.decode('base64')
else:
image_data = self.placeholder(req, 'nologo.png')
try:
# create an empty registry
registry = openerp.modules.registry.Registry(dbname.lower())
with registry.cursor() as cr:
cr.execute("""SELECT c.logo_web
FROM res_users u
LEFT JOIN res_company c
ON c.id = u.company_id
WHERE u.id = %s
""", (uid,))
row = cr.fetchone()
if row and row[0]:
image_data = str(row[0]).decode('base64')
else:
image_data = self.placeholder(req, 'nologo.png')
except Exception:
image_data = self.placeholder(req, 'logo.png')
headers = [
('Content-Type', 'image/png'),
('Content-Length', len(image_data)),
@ -1420,7 +1443,7 @@ class Action(openerpweb.Controller):
else:
return False
class Export(View):
class Export(openerpweb.Controller):
_cp_path = "/web/export"
@openerpweb.jsonrequest
@ -1561,7 +1584,7 @@ class Export(View):
(prefix + '/' + k, prefix_string + '/' + v)
for k, v in self.fields_info(req, model, export_fields).iteritems())
#noinspection PyPropertyDefinition
class ExportFormat(object):
@property
def content_type(self):
""" Provides the format's content type """
@ -1609,7 +1632,7 @@ class Export(View):
('Content-Type', self.content_type)],
cookies={'fileToken': int(token)})
class CSVExport(Export):
class CSVExport(ExportFormat, http.Controller):
_cp_path = '/web/export/csv'
fmt = {'tag': 'csv', 'label': 'CSV'}
@ -1644,7 +1667,7 @@ class CSVExport(Export):
fp.close()
return data
class ExcelExport(Export):
class ExcelExport(ExportFormat, http.Controller):
_cp_path = '/web/export/xls'
fmt = {
'tag': 'xls',
@ -1683,7 +1706,7 @@ class ExcelExport(Export):
fp.close()
return data
class Reports(View):
class Reports(openerpweb.Controller):
_cp_path = "/web/report"
POLLING_DELAY = 0.25
TYPES_MAPPING = {

View File

@ -27,7 +27,11 @@ sys.path.insert(0, os.path.abspath('..'))
# Add any Sphinx extension module names here, as strings. They can be extensions
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
extensions = ['sphinx.ext.autodoc', 'sphinx.ext.intersphinx', 'sphinx.ext.todo', 'sphinx.ext.viewcode']
extensions = [
'sphinx.ext.autodoc', 'sphinx.ext.intersphinx',
'sphinx.ext.todo', 'sphinx.ext.viewcode',
'patchqueue'
]
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']

View File

@ -1,5 +1,7 @@
.. _module:
.. queue:: module/series
Building an OpenERP Web module
==============================
@ -19,8 +21,7 @@ A very basic OpenERP module structure will be our starting point:
├── __init__.py
└── __openerp__.py
.. literalinclude:: module/__openerp__.py
:language: python
.. patch::
This is a sufficient minimal declaration of a valid OpenERP module.
@ -41,8 +42,7 @@ module is automatically recognized as "web-enabled" if it contains a
is the extent of it. You should also change the dependency to list
``web``:
.. literalinclude:: module/__openerp__.py.1.diff
:language: diff
.. patch::
.. note::
@ -67,15 +67,13 @@ The first one is to add javascript code. It's customary to put it in
``static/src/js``, to have room for e.g. other file types, or
third-party libraries.
.. literalinclude:: module/static/src/js/first_module.js
:language: javascript
.. patch::
The client won't load any file unless specified, thus the new file
should be listed in the module's manifest file, under a new key ``js``
(a list of file names, or glob patterns):
.. literalinclude:: module/__openerp__.py.2.diff
:language: diff
.. patch::
At this point, if the module is installed and the client reloaded the
message should appear in your browser's development console.
@ -100,8 +98,7 @@ initialized, and it can't get access to the various APIs of the web
client (such as making RPC requests to the server). This is done by
providing a `javascript module`_:
.. literalinclude:: module/static/src/js/first_module.js.1.diff
:language: diff
.. patch::
If you reload the client, you'll see a message in the console exactly
as previously. The differences, though invisible at this point, are:
@ -122,17 +119,12 @@ To demonstrate, let's build a simple :doc:`client action
First, the action declaration:
.. literalinclude:: module/__openerp__.py.3.diff
:language: diff
.. literalinclude:: module/web_example.xml
:language: xml
.. patch::
then set up the :doc:`client action hook <client_action>` to register
a function (for now):
.. literalinclude:: module/static/src/js/first_module.js.2.diff
:language: diff
.. patch::
Updating the module (in order to load the XML description) and
re-starting the server should display a new menu *Example Client
@ -148,8 +140,7 @@ client action function by a :doc:`widget`. Our widget will simply use
its :js:func:`~openerp.web.Widget.start` to add some content to its
DOM:
.. literalinclude:: module/static/src/js/first_module.js.3.diff
:language: diff
.. patch::
after reloading the client (to update the javascript file), instead of
printing to the console the menu item clears the whole screen and
@ -159,15 +150,13 @@ Since we've added a class on the widget's :ref:`DOM root
<widget-dom_root>` we can now see how to add a stylesheet to a module:
first create the stylesheet file:
.. literalinclude:: module/static/src/css/web_example.css
:language: css
.. patch::
then add a reference to the stylesheet in the module's manifest (which
will require restarting the OpenERP Server to see the changes, as
usual):
.. literalinclude:: module/__openerp__.py.4.diff
:language: diff
.. patch::
the text displayed by the menu item should now be huge, and
white-on-black (instead of small and black-on-white). From there on,
@ -204,22 +193,16 @@ integration to OpenERP Web widgets.
Adding a template file is similar to adding a style sheet:
.. literalinclude:: module/static/src/xml/web_example.xml
:language: xml
.. literalinclude:: module/__openerp__.py.5.diff
:language: diff
.. patch::
The template can then easily be hooked in the widget:
.. literalinclude:: module/static/src/js/first_module.js.4.diff
:language: diff
.. patch::
And finally the CSS can be altered to style the new (and more complex)
template-generated DOM, rather than the code-generated one:
.. literalinclude:: module/static/src/css/web_example.css.1.diff
:language: diff
.. patch::
.. note::
@ -238,15 +221,13 @@ The last step (until the next one) is to add some behavior and make
our stopwatch watch. First hook some events on the buttons to toggle
the widget's state:
.. literalinclude:: module/static/src/js/first_module.js.5.diff
:language: diff
.. patch::
This demonstrates the use of the "events hash" and event delegation to
declaratively handle events on the widget's DOM. And already changes
the button displayed in the UI. Then comes some actual logic:
.. literalinclude:: module/static/src/js/first_module.js.6.diff
:language: diff
.. patch::
* An initializer (the ``init`` method) is introduced to set-up a few
internal variables: ``_start`` will hold the start of the timer (as
@ -273,6 +254,184 @@ the button displayed in the UI. Then comes some actual logic:
Starting and stopping the watch now works, and correctly tracks time
since having started the watch, neatly formatted.
Burning through the skies
-------------------------
All work so far has been "local" outside of the original impetus
provided by the client action: the widget is self-contained and, once
started, does not communicate with anything outside itself. Not only
that, but it has no persistence: if the user leaves the stopwatch
screen (to go and see his inbox, or do some well-deserved accounting,
for instance) whatever was being timed will be lost.
To prevent this irremediable loss, we can use OpenERP's support for
storing data as a model, allowing so that we don't lose our data and
can later retrieve, query and manipulate it. First let's create a
basic OpenERP model in which our data will be stored:
.. patch::
then let's add saving times to the database every time the stopwatch
is stopped, using :js:class:`the "high-level" Model API
<openerp.web.Model.call>`:
.. patch::
A look at the "Network" tab of your preferred browser's developer
tools while playing with the stopwatch will show that the save
(creation) request is indeed sent (and replied to, even though we're
ignoring the response at this point).
These saved data should now be loaded and displayed when first opening
the action, so the user can see his previously recorded times. This is
done by overloading the model's ``start`` method: the purpose of
:js:func:`~openerp.base.Widget.start()` is to perform *asynchronous*
initialization steps, so the rest of the web client knows to "wait"
and gets a readiness signal. In this case, it will fetch the data
recorded previously using the :js:class:`~openerp.web.Query` interface
and add this data to an ordered list added to the widget's template:
.. patch::
And for consistency's sake (so that the display a user leaves is
pretty much the same as the one he comes back to), newly created
records should also automatically be added to the list:
.. patch::
Note that we're only displaying the record once we know it's been
saved from the database (the ``create`` call has returned without
error).
Mic check, is this working?
---------------------------
So far, features have been implemented, code has been worked and
tentatively tried. However, there is no guarantee they will *keep
working* as new changes are performed, new features added, …
The original author (you, dear reader) could keep a notebook with a
list of workflows to check, to ensure everything keeps working. And
follow the notebook day after day, every time something is changed in
the module.
That gets repetitive after a while. And computers are good at doing
repetitive stuff, as long as you tell them how to do it.
So let's add test to the module, so that in the future the computer
can take care of ensuring what works today keeps working tomorrow.
.. note::
Here we're writing tests after having implemented the widget. This
may or may not work, we may need to alter bits and pieces of code
to get them in a testable state. An other testing methodology is
:abbr:`TDD (Test-Driven Development)` where the tests are written
first, and the code necessary to make these tests pass is written
afterwards.
Both methods have their opponents and detractors, advantages and
inconvenients. Pick the one you prefer.
The first step of :doc:`testing` is to set up the basic testing
structure:
1. Creating a javascript file
.. patch::
2. Containing a test section (and a few tests to make sure the tests
are correctly run)
.. patch::
3. Then declaring the test file in the module's manifest
.. patch::
4. And finally — after restarting OpenERP — navigating to the test
runner at ``/web/tests`` and selecting your soon-to-be-tested
module:
.. image:: module/testing_0.png
:align: center
the testing result do indeed match the test.
The simplest tests to write are for synchronous pure
functions. Synchronous means no RPC call or any other such thing
(e.g. ``setTimeout``), only direct data processing, and pure means no
side-effect: the function takes some input, manipulates it and yields
an output.
In our widget, only ``format_time`` fits the bill: it takes a duration
(in milliseconds) and returns an ``hours:minutes:second`` formatting
of it. Let's test it:
.. patch::
This series of simple tests passes with no issue. The next easy-ish
test type is to test basic DOM alterations from provided input, such
as (for our widget) updating the counter or displaying a record to the
records list: while it's not pure (it alters the DOM "in-place") it
has well-delimited side-effects and these side-effects come solely
from the provided input.
Because these methods alter the widget's DOM, the widget needs a
DOM. Looking up :doc:`a widget's lifecycle <widget>`, the widget
really only gets its DOM when adding it to the document. However a
side-effect of this is to :js:func:`~openerp.web.Widget.start` it,
which for us means going to query the user's times.
We don't have any records to get in our test, and we don't want to
test the initialization yet! So let's cheat a bit: we can manually
:js:func:`set a widget's DOM <openerp.web.Widget.setElement>`, let's
create a basic DOM matching what each method expects then call the
method:
.. patch::
The next group of patches (in terms of setup/complexity) is RPC tests:
testing components/methods which perform network calls (RPC
requests). In our module, ``start`` and ``watch_stop`` are in that
case: ``start`` fetches the user's recorded times and ``watch_stop``
creates a new record with the current watch.
By default, tests don't allow RPC requests and will generate an error
when trying to perform one:
.. image:: module/testing_1.png
:align: center
To allow them, the test case (or the test suite) has to explicitly opt
into :js:attr:`rpc support <TestOptions.rpc>` by adding the ``rpc:
'mock'`` option to the test case, and providing its own "rpc
responses":
.. patch::
.. note::
By defaut, tests cases don't load templates either. We had not
needed to perform any template rendering before here, so we must
now enable templates loading via :js:attr:`the corresponding
option <TestOptions.templates>`.
Our final test requires altering the module's code: asynchronous tests
use :doc:`deferred </async>` to know when a test ends and the other
one can start (otherwise test content will execute non-linearly and
the assertions of a test will be executed during the next test or
worse), but although ``watch_stop`` performs an asynchronous
``create`` operation it doesn't return a deferred we can synchronize
on. We simply need to return its result:
.. patch::
This makes no difference to the original code, but allows us to write
our test:
.. patch::
.. [#DOM-building] they are not alternative solutions: they work very
well together. Templates are used to build "just
DOM", sub-widgets are used to build DOM subsections

17
addons/web/doc/module/0 Normal file
View File

@ -0,0 +1,17 @@
# HG changeset patch
# Parent 0000000000000000000000000000000000000000
diff --git a/__init__.py b/__init__.py
new file mode 100644
diff --git a/__openerp__.py b/__openerp__.py
new file mode 100644
--- /dev/null
+++ b/__openerp__.py
@@ -0,0 +1,7 @@
+# __openerp__.py
+{
+ 'name': "Web Example",
+ 'description': "Basic example of a (future) web module",
+ 'category': 'Hidden',
+ 'depends': ['base'],
+}

13
addons/web/doc/module/10 Normal file
View File

@ -0,0 +1,13 @@
# HG changeset patch
# Parent 72d9d59a93fcee06ba28cf0b98a1075331dcc8f4
diff --git a/static/src/css/web_example.css b/static/src/css/web_example.css
new file mode 100644
--- /dev/null
+++ b/static/src/css/web_example.css
@@ -0,0 +1,6 @@
+.openerp .oe_web_example {
+ color: white;
+ background-color: black;
+ height: 100%;
+ font-size: 400%;
+}

11
addons/web/doc/module/11 Normal file
View File

@ -0,0 +1,11 @@
# HG changeset patch
# Parent 3ed382d9a8fe64fbb8e2bf4045e3fcd5c74c92bc
diff --git a/__openerp__.py b/__openerp__.py
--- a/__openerp__.py
+++ b/__openerp__.py
@@ -6,4 +6,5 @@
'depends': ['web'],
'data': ['web_example.xml'],
'js': ['static/src/js/first_module.js'],
+ 'css': ['static/src/css/web_example.css'],
}

28
addons/web/doc/module/12 Normal file
View File

@ -0,0 +1,28 @@
# HG changeset patch
# Parent 43f21611dacb7c2b2f3810baeeef359ad7c329f0
diff --git a/__openerp__.py b/__openerp__.py
--- a/__openerp__.py
+++ b/__openerp__.py
@@ -7,4 +7,5 @@
'data': ['web_example.xml'],
'js': ['static/src/js/first_module.js'],
'css': ['static/src/css/web_example.css'],
+ 'qweb': ['static/src/xml/web_example.xml'],
}
diff --git a/static/src/xml/web_example.xml b/static/src/xml/web_example.xml
new file mode 100644
--- /dev/null
+++ b/static/src/xml/web_example.xml
@@ -0,0 +1,11 @@
+<templates>
+<div t-name="web_example.action" class="oe_web_example oe_web_example_stopped">
+ <h4 class="oe_web_example_timer">00:00:00</h4>
+ <p class="oe_web_example_start">
+ <button type="button">Start</button>
+ </p>
+ <p class="oe_web_example_stop">
+ <button type="button">Stop</button>
+ </p>
+</div>
+</templates>

View File

@ -1,15 +1,17 @@
--- web_example/static/src/js/first_module.js
+++ web_example/static/src/js/first_module.js
@@ -1,11 +1,7 @@
// static/src/js/first_module.js
# HG changeset patch
# Parent ae3b427c96b532794a65357b3f075129cc991276
diff --git a/static/src/js/first_module.js b/static/src/js/first_module.js
--- a/static/src/js/first_module.js
+++ b/static/src/js/first_module.js
@@ -2,10 +2,6 @@
openerp.web_example = function (instance) {
instance.web.client_actions.add('example.action', 'instance.web_example.Action');
instance.web_example.Action = instance.web.Widget.extend({
+ template: 'web_example.action'
- className: 'oe_web_example',
- start: function () {
- this.$el.text("Hello, world!");
- return this._super();
- }
+ template: 'web_example.action'
});
};

View File

@ -1,7 +1,9 @@
--- web_example/static/src/css/web_example.css
+++ web_example/static/src/css/web_example.css
@@ -1,6 +1,13 @@
.openerp .oe_web_example {
# HG changeset patch
# Parent e2d2e1a4cc2d2496aebeb05d94768384427c9e8b
diff --git a/static/src/css/web_example.css b/static/src/css/web_example.css
--- a/static/src/css/web_example.css
+++ b/static/src/css/web_example.css
@@ -2,5 +2,12 @@
color: white;
background-color: black;
height: 100%;

View File

@ -1,7 +1,9 @@
--- web_example/static/src/js/first_module.js
+++ web_example/static/src/js/first_module.js
@@ -1,7 +1,19 @@
// static/src/js/first_module.js
# HG changeset patch
# Parent 2645d7a09dcba7f6d6074a33252c16c03c56fdf3
diff --git a/static/src/js/first_module.js b/static/src/js/first_module.js
--- a/static/src/js/first_module.js
+++ b/static/src/js/first_module.js
@@ -2,6 +2,18 @@
openerp.web_example = function (instance) {
instance.web.client_actions.add('example.action', 'instance.web_example.Action');
instance.web_example.Action = instance.web.Widget.extend({

View File

@ -1,12 +1,9 @@
--- web_example/static/src/js/first_module.js
+++ web_example/static/src/js/first_module.js
@@ -1,19 +1,52 @@
// static/src/js/first_module.js
openerp.web_example = function (instance) {
instance.web.client_actions.add('example.action', 'instance.web_example.Action');
instance.web_example.Action = instance.web.Widget.extend({
template: 'web_example.action',
events: {
# HG changeset patch
# Parent 2921a545adc3406d3139be7951f3225e94493466
diff --git a/static/src/js/first_module.js b/static/src/js/first_module.js
--- a/static/src/js/first_module.js
+++ b/static/src/js/first_module.js
@@ -7,13 +7,46 @@ openerp.web_example = function (instance
'click .oe_web_example_start button': 'watch_start',
'click .oe_web_example_stop button': 'watch_stop'
},

19
addons/web/doc/module/18 Normal file
View File

@ -0,0 +1,19 @@
# HG changeset patch
# Parent e0cc13c2b2ec4d6f6bfdb033b189a32e44106f2e
diff --git a/__init__.py b/__init__.py
--- a/__init__.py
+++ b/__init__.py
@@ -0,0 +1,13 @@
+# __init__.py
+from openerp.osv import orm, fields
+
+
+class Times(orm.Model):
+ _name = 'web_example.stopwatch'
+
+ _columns = {
+ 'time': fields.integer("Time", required=True,
+ help="Measured time in milliseconds"),
+ 'user_id': fields.many2one('res.users', "User", required=True,
+ help="User who registered the measurement")
+ }

52
addons/web/doc/module/19 Normal file
View File

@ -0,0 +1,52 @@
# HG changeset patch
# Parent 05797cc75b49634e640f44b24347f2905b464022
diff --git a/static/src/js/first_module.js b/static/src/js/first_module.js
--- a/static/src/js/first_module.js
+++ b/static/src/js/first_module.js
@@ -12,11 +12,13 @@ openerp.web_example = function (instance
this._start = null;
this._watch = null;
},
- update_counter: function () {
+ current: function () {
+ // Subtracting javascript dates returns the difference in milliseconds
+ return new Date() - this._start;
+ },
+ update_counter: function (time) {
var h, m, s;
- // Subtracting javascript dates returns the difference in milliseconds
- var diff = new Date() - this._start;
- s = diff / 1000;
+ s = time / 1000;
m = Math.floor(s / 60);
s -= 60*m;
h = Math.floor(m / 60);
@@ -29,18 +31,24 @@ openerp.web_example = function (instance
.removeClass('oe_web_example_stopped');
this._start = new Date();
// Update the UI to the current time
- this.update_counter();
+ this.update_counter(this.current());
// Update the counter at 30 FPS (33ms/frame)
- this._watch = setInterval(
- this.proxy('update_counter'),
+ this._watch = setInterval(function () {
+ this.update_counter(this.current());
+ }.bind(this),
33);
},
watch_stop: function () {
clearInterval(this._watch);
- this.update_counter();
+ var time = this.current();
+ this.update_counter(time);
this._start = this._watch = null;
this.$el.removeClass('oe_web_example_started')
.addClass('oe_web_example_stopped');
+ new instance.web.Model('web_example.stopwatch').call('create', [{
+ user_id: instance.session.uid,
+ time: time,
+ }]);
},
destroy: function () {
if (this._watch) {

12
addons/web/doc/module/2 Normal file
View File

@ -0,0 +1,12 @@
# HG changeset patch
# Parent 8a986919a3e22cd7cca51210820c09d4545dc60d
diff --git a/__openerp__.py b/__openerp__.py
--- a/__openerp__.py
+++ b/__openerp__.py
@@ -3,5 +3,5 @@
'name': "Web Example",
'description': "Basic example of a (future) web module",
'category': 'Hidden',
- 'depends': ['base'],
+ 'depends': ['web'],
}

64
addons/web/doc/module/20 Normal file
View File

@ -0,0 +1,64 @@
Index: web_example/static/src/js/first_module.js
===================================================================
--- web_example.orig/static/src/js/first_module.js
+++ web_example/static/src/js/first_module.js
@@ -11,20 +11,36 @@ openerp.web_example = function (instance
this._super.apply(this, arguments);
this._start = null;
this._watch = null;
+ this.model = new instance.web.Model('web_example.stopwatch');
+ },
+ start: function () {
+ var display = this.display_record.bind(this);
+ return this.model.query()
+ .filter([['user_id', '=', instance.session.uid]])
+ .all().done(function (records) {
+ _(records).each(display);
+ });
},
current: function () {
// Subtracting javascript dates returns the difference in milliseconds
return new Date() - this._start;
},
- update_counter: function (time) {
+ display_record: function (record) {
+ $('<li>')
+ .text(this.format_time(record.time))
+ .appendTo(this.$('.oe_web_example_saved'));
+ },
+ format_time: function (time) {
var h, m, s;
s = time / 1000;
m = Math.floor(s / 60);
s -= 60*m;
h = Math.floor(m / 60);
m -= 60*h;
- this.$('.oe_web_example_timer').text(
- _.str.sprintf("%02d:%02d:%02d", h, m, s));
+ return _.str.sprintf("%02d:%02d:%02d", h, m, s);
+ },
+ update_counter: function (time) {
+ this.$('.oe_web_example_timer').text(this.format_time(time));
},
watch_start: function () {
this.$el.addClass('oe_web_example_started')
@@ -45,7 +61,7 @@ openerp.web_example = function (instance
this._start = this._watch = null;
this.$el.removeClass('oe_web_example_started')
.addClass('oe_web_example_stopped');
- new instance.web.Model('web_example.stopwatch').call('create', [{
+ this.model.call('create', [{
user_id: instance.session.uid,
time: time,
}]);
Index: web_example/static/src/xml/web_example.xml
===================================================================
--- web_example.orig/static/src/xml/web_example.xml
+++ web_example/static/src/xml/web_example.xml
@@ -7,5 +7,6 @@
<p class="oe_web_example_stop">
<button type="button">Stop</button>
</p>
+ <ol class="oe_web_example_saved"></ol>
</div>
</templates>

27
addons/web/doc/module/21 Normal file
View File

@ -0,0 +1,27 @@
Index: web_example/static/src/js/first_module.js
===================================================================
--- web_example.orig/static/src/js/first_module.js
+++ web_example/static/src/js/first_module.js
@@ -55,16 +55,20 @@ openerp.web_example = function (instance
33);
},
watch_stop: function () {
+ var self = this;
clearInterval(this._watch);
var time = this.current();
this.update_counter(time);
this._start = this._watch = null;
this.$el.removeClass('oe_web_example_started')
.addClass('oe_web_example_stopped');
- this.model.call('create', [{
+ var record = {
user_id: instance.session.uid,
time: time,
- }]);
+ };
+ this.model.call('create', [record]).done(function () {
+ self.display_record(record);
+ });
},
destroy: function () {
if (this._watch) {

6
addons/web/doc/module/22 Normal file
View File

@ -0,0 +1,6 @@
Index: web_example/static/src/tests/timer.js
===================================================================
--- /dev/null
+++ web_example/static/src/tests/timer.js
@@ -0,0 +1 @@
+

14
addons/web/doc/module/23 Normal file
View File

@ -0,0 +1,14 @@
Index: web_example/static/src/tests/timer.js
===================================================================
--- web_example.orig/static/src/tests/timer.js
+++ web_example/static/src/tests/timer.js
@@ -1 +1,8 @@
-
+openerp.testing.section('timer', function (test) {
+ test('successful test', function () {
+ ok(true, "should work");
+ });
+ test('unsuccessful test', function () {
+ ok(false, "shoud fail");
+ });
+});

10
addons/web/doc/module/24 Normal file
View File

@ -0,0 +1,10 @@
Index: web_example/__openerp__.py
===================================================================
--- web_example.orig/__openerp__.py
+++ web_example/__openerp__.py
@@ -8,4 +8,5 @@
'js': ['static/src/js/first_module.js'],
'css': ['static/src/css/web_example.css'],
'qweb': ['static/src/xml/web_example.xml'],
+ 'test': ['static/src/tests/timer.js'],
}

55
addons/web/doc/module/25 Normal file
View File

@ -0,0 +1,55 @@
Index: web_example/static/src/tests/timer.js
===================================================================
--- web_example.orig/static/src/tests/timer.js
+++ web_example/static/src/tests/timer.js
@@ -1,8 +1,45 @@
openerp.testing.section('timer', function (test) {
- test('successful test', function () {
- ok(true, "should work");
- });
- test('unsuccessful test', function () {
- ok(false, "shoud fail");
+ test('format_time', function (instance) {
+ var w = new instance.web_example.Action();
+
+ strictEqual(
+ w.format_time(0),
+ '00:00:00');
+ strictEqual(
+ w.format_time(543),
+ '00:00:00',
+ "should round sub-second times down to zero");
+ strictEqual(
+ w.format_time(5340),
+ '00:00:05',
+ "should floor sub-second extents to the previous second");
+ strictEqual(
+ w.format_time(60000),
+ '00:01:00');
+ strictEqual(
+ w.format_time(3600000),
+ '01:00:00');
+ strictEqual(
+ w.format_time(86400000),
+ '24:00:00');
+ strictEqual(
+ w.format_time(604800000),
+ '168:00:00');
+
+ strictEqual(
+ w.format_time(22733958),
+ '06:18:53');
+ strictEqual(
+ w.format_time(41676639),
+ '11:34:36');
+ strictEqual(
+ w.format_time(57802094),
+ '16:03:22');
+ strictEqual(
+ w.format_time(73451828),
+ '20:24:11');
+ strictEqual(
+ w.format_time(84092336),
+ '23:21:32');
});
});

38
addons/web/doc/module/26 Normal file
View File

@ -0,0 +1,38 @@
Index: web_example/static/src/tests/timer.js
===================================================================
--- web_example.orig/static/src/tests/timer.js
+++ web_example/static/src/tests/timer.js
@@ -42,4 +42,33 @@ openerp.testing.section('timer', functio
w.format_time(84092336),
'23:21:32');
});
+ test('update_counter', function (instance, $fixture) {
+ var w = new instance.web_example.Action();
+ // $fixture is a DOM tree whose content gets cleaned up before
+ // each test, so we can add whatever we need to it
+ $fixture.append('<div class="oe_web_example_timer">');
+ // Then set it on the widget
+ w.setElement($fixture);
+
+ // Update the counter with a known value
+ w.update_counter(22733958);
+ // And check the DOM matches
+ strictEqual($fixture.text(), '06:18:53');
+
+ w.update_counter(73451828)
+ strictEqual($fixture.text(), '20:24:11');
+ });
+ test('display_record', function (instance, $fixture) {
+ var w = new instance.web_example.Action();
+ $fixture.append('<ol class="oe_web_example_saved">')
+ w.setElement($fixture);
+
+ w.display_record({time: 41676639});
+ w.display_record({time: 84092336});
+
+ var $lis = $fixture.find('li');
+ strictEqual($lis.length, 2, "should have printed 2 records");
+ strictEqual($lis[0].textContent, '11:34:36');
+ strictEqual($lis[1].textContent, '23:21:32');
+ });
});

28
addons/web/doc/module/27 Normal file
View File

@ -0,0 +1,28 @@
Index: web_example/static/src/tests/timer.js
===================================================================
--- web_example.orig/static/src/tests/timer.js
+++ web_example/static/src/tests/timer.js
@@ -71,4 +71,23 @@ openerp.testing.section('timer', functio
strictEqual($lis[0].textContent, '11:34:36');
strictEqual($lis[1].textContent, '23:21:32');
});
+ test('start', {templates: true, rpc: 'mock', asserts: 3}, function (instance, $fixture, mock) {
+ // Rather odd-looking shortcut for search+read in a single RPC call
+ mock('/web/dataset/search_read', function () {
+ // ignore parameters, just return a pair of records.
+ return {records: [
+ {time: 22733958},
+ {time: 84092336}
+ ]};
+ });
+
+ var w = new instance.web_example.Action();
+ return w.appendTo($fixture)
+ .then(function () {
+ var $lis = $fixture.find('li');
+ strictEqual($lis.length, 2);
+ strictEqual($lis[0].textContent, '06:18:53');
+ strictEqual($lis[1].textContent, '23:21:32');
+ });
+ });
});

13
addons/web/doc/module/28 Normal file
View File

@ -0,0 +1,13 @@
Index: web_example/static/src/js/first_module.js
===================================================================
--- web_example.orig/static/src/js/first_module.js
+++ web_example/static/src/js/first_module.js
@@ -66,7 +66,7 @@ openerp.web_example = function (instance
user_id: instance.session.uid,
time: time,
};
- this.model.call('create', [record]).done(function () {
+ return this.model.call('create', [record]).done(function () {
self.display_record(record);
});
},

37
addons/web/doc/module/29 Normal file
View File

@ -0,0 +1,37 @@
Index: web_example/static/src/tests/timer.js
===================================================================
--- web_example.orig/static/src/tests/timer.js
+++ web_example/static/src/tests/timer.js
@@ -90,4 +90,32 @@ openerp.testing.section('timer', functio
strictEqual($lis[1].textContent, '23:21:32');
});
});
+ test('watch_stop', {templates: true, rpc: 'mock', asserts: 3}, function (instance, $fix, mock) {
+ var created = false;
+ mock('web_example.stopwatch:create', function (args, kwargs) {
+ created = true;
+ // return a fake id (unused)
+ return 42;
+ });
+ mock('/web/dataset/search_read', function () {
+ return {records: []};
+ });
+
+ var w = new instance.web_example.Action();
+ return w.appendTo($fix)
+ .then(function () {
+ // Virtual start point 5s before 'now'
+ w._start = new Date() - 5000;
+ return w.watch_stop();
+ })
+ .done(function () {
+ ok(created, "should have called create()");
+ strictEqual($fix.find('.oe_web_example_timer').text(),
+ '00:00:05',
+ "should have updated the timer");
+ strictEqual($fix.find('li')[0].textContent,
+ '00:00:05',
+ "should have added the new time to the list");
+ });
+ });
});

9
addons/web/doc/module/3 Normal file
View File

@ -0,0 +1,9 @@
# HG changeset patch
# Parent dcf661a5eef8f82503831bdb8e6c9d2f9beb285e
diff --git a/static/src/js/first_module.js b/static/src/js/first_module.js
new file mode 100644
--- /dev/null
+++ b/static/src/js/first_module.js
@@ -0,0 +1,2 @@
+// static/src/js/first_module.js
+console.log("Debug statement: file loaded");

11
addons/web/doc/module/4 Normal file
View File

@ -0,0 +1,11 @@
# HG changeset patch
# Parent 139dae60de67efa0017f5032f71ab774685c5507
diff --git a/__openerp__.py b/__openerp__.py
--- a/__openerp__.py
+++ b/__openerp__.py
@@ -4,4 +4,5 @@
'description': "Basic example of a (future) web module",
'category': 'Hidden',
'depends': ['web'],
+ 'js': ['static/src/js/first_module.js'],
}

11
addons/web/doc/module/5 Normal file
View File

@ -0,0 +1,11 @@
# HG changeset patch
# Parent c8ae7646cce3f271698c844eb2d67f9a8719650d
diff --git a/static/src/js/first_module.js b/static/src/js/first_module.js
--- a/static/src/js/first_module.js
+++ b/static/src/js/first_module.js
@@ -1,2 +1,4 @@
// static/src/js/first_module.js
-console.log("Debug statement: file loaded");
+openerp.web_example = function (instance) {
+ console.log("Module loaded");
+};

29
addons/web/doc/module/6 Normal file
View File

@ -0,0 +1,29 @@
# HG changeset patch
# Parent 0026cb80097a724db8d36371bc00da993a51a06f
diff --git a/__openerp__.py b/__openerp__.py
--- a/__openerp__.py
+++ b/__openerp__.py
@@ -4,5 +4,6 @@
'description': "Basic example of a (future) web module",
'category': 'Hidden',
'depends': ['web'],
+ 'data': ['web_example.xml'],
'js': ['static/src/js/first_module.js'],
}
diff --git a/web_example.xml b/web_example.xml
new file mode 100644
--- /dev/null
+++ b/web_example.xml
@@ -0,0 +1,11 @@
+<!-- web_example/web_example.xml -->
+<openerp>
+ <data>
+ <record model="ir.actions.client" id="action_client_example">
+ <field name="name">Example Client Action</field>
+ <field name="tag">example.action</field>
+ </record>
+ <menuitem action="action_client_example"
+ id="menu_client_example"/>
+ </data>
+</openerp>

View File

@ -1,5 +1,8 @@
--- web_example/static/src/js/first_module.js
+++ web_example/static/src/js/first_module.js
# HG changeset patch
# Parent d987c9edd884de1de30f2ceb70d2e554474b8dd1
diff --git a/static/src/js/first_module.js b/static/src/js/first_module.js
--- a/static/src/js/first_module.js
+++ b/static/src/js/first_module.js
@@ -1,4 +1,7 @@
// static/src/js/first_module.js
openerp.web_example = function (instance) {

View File

@ -1,5 +1,8 @@
--- web_example/static/src/js/first_module.js
+++ web_example/static/src/js/first_module.js
# HG changeset patch
# Parent 6a1a7240ea0e63182f60abb1eb5c631089d56dbe
diff --git a/static/src/js/first_module.js b/static/src/js/first_module.js
--- a/static/src/js/first_module.js
+++ b/static/src/js/first_module.js
@@ -1,7 +1,11 @@
// static/src/js/first_module.js
openerp.web_example = function (instance) {

View File

@ -1,7 +0,0 @@
# __openerp__.py
{
'name': "Web Example",
'description': "Basic example of a (future) web module",
'category': 'Hidden',
'depends': ['base'],
}

View File

@ -1,11 +0,0 @@
--- web_example/__openerp__.py
+++ web_example/__openerp__.py
@@ -1,7 +1,7 @@
# __openerp__.py
{
'name': "Web Example",
'description': "Basic example of a (future) web module",
'category': 'Hidden',
- 'depends': ['base'],
+ 'depends': ['web'],
}

View File

@ -1,11 +0,0 @@
--- web_example/__openerp__.py
+++ web_example/__openerp__.py
@@ -1,7 +1,8 @@
# __openerp__.py
{
'name': "Web Example",
'description': "Basic example of a (future) web module",
'category': 'Hidden',
'depends': ['web'],
+ 'js': ['static/src/js/first_module.js'],
}

View File

@ -1,12 +0,0 @@
--- web_example/__openerp__.py
+++ web_example/__openerp__.py
@@ -1,8 +1,9 @@
# __openerp__.py
{
'name': "Web Example",
'description': "Basic example of a (future) web module",
'category': 'Hidden',
'depends': ['web'],
+ 'data': ['web_example.xml'],
'js': ['static/src/js/first_module.js'],
}

View File

@ -1,13 +0,0 @@
--- web_example/__openerp__.py
+++ web_example/__openerp__.py
@@ -1,9 +1,10 @@
# __openerp__.py
{
'name': "Web Example",
'description': "Basic example of a (future) web module",
'category': 'Hidden',
'depends': ['web'],
'data': ['web_example.xml'],
'js': ['static/src/js/first_module.js'],
+ 'css': ['static/src/css/web_example.css'],
}

View File

@ -1,14 +0,0 @@
--- web_example/__openerp__.py
+++ web_example/__openerp__.py
@@ -1,10 +1,11 @@
# __openerp__.py
{
'name': "Web Example",
'description': "Basic example of a (future) web module",
'category': 'Hidden',
'depends': ['web'],
'data': ['web_example.xml'],
'js': ['static/src/js/first_module.js'],
'css': ['static/src/css/web_example.css'],
+ 'qweb': ['static/src/xml/web_example.xml'],
}

View File

@ -0,0 +1,27 @@
0
2
3
4
5
6
8
9
10
11
12
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

View File

@ -1,6 +0,0 @@
.openerp .oe_web_example {
color: white;
background-color: black;
height: 100%;
font-size: 400%;
}

View File

@ -1,2 +0,0 @@
// static/src/js/first_module.js
console.log("Debug statement: file loaded");

View File

@ -1,8 +0,0 @@
--- web_example/static/src/js/first_module.js
+++ web_example/static/src/js/first_module.js
@@ -1,2 +1,4 @@
// static/src/js/first_module.js
-console.log("Debug statement: file loaded");
+openerp.web_example = function (instance) {
+ console.log("Module loaded");
+};

View File

@ -1,11 +0,0 @@
<templates>
<div t-name="web_example.action" class="oe_web_example oe_web_example_stopped">
<h4 class="oe_web_example_timer">00:00:00</h4>
<p class="oe_web_example_start">
<button type="button">Start</button>
</p>
<p class="oe_web_example_stop">
<button type="button">Stop</button>
</p>
</div>
</templates>

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

View File

@ -1,11 +0,0 @@
<!-- web_example/web_example.xml -->
<openerp>
<data>
<record model="ir.actions.client" id="action_client_example">
<field name="name">Example Client Action</field>
<field name="tag">example.action</field>
</record>
<menuitem action="action_client_example"
id="menu_client_example"/>
</data>
</openerp>

View File

@ -329,6 +329,8 @@ a test case (or its containing test suite) through
:js:attr:`~TestOptions.rpc`, and can be one of two modes: ``mock`` or
``rpc``.
.. _testing-rpc-mock:
Mock RPC
++++++++

View File

@ -93,7 +93,7 @@ The DOM root can also be defined programmatically by overridding
Any override to :js:func:`~openerp.web.Widget.renderElement` which
does not call its ``_super`` **must** call
:js:func:`~openerp.web.Widget.setElement` with whatever it
generated or the widget's behavior is undefined.r
generated or the widget's behavior is undefined.
.. note::

View File

@ -19,6 +19,7 @@ import time
import traceback
import urlparse
import uuid
import errno
import babel.core
import simplejson
@ -200,7 +201,7 @@ class JsonRequest(WebRequest):
_logger.debug("--> %s.%s\n%s", method.im_class.__name__, method.__name__, pprint.pformat(self.jsonrequest))
response['id'] = self.jsonrequest.get('id')
response["result"] = method(self, **self.params)
except session.AuthenticationError:
except session.AuthenticationError, e:
se = serialize_exception(e)
error = {
'code': 100,
@ -354,17 +355,31 @@ def httprequest(f):
addons_module = {}
addons_manifest = {}
controllers_class = []
controllers_class_path = {}
controllers_object = {}
controllers_object_path = {}
controllers_path = {}
class ControllerType(type):
def __init__(cls, name, bases, attrs):
super(ControllerType, cls).__init__(name, bases, attrs)
controllers_class.append(("%s.%s" % (cls.__module__, cls.__name__), cls))
name_class = ("%s.%s" % (cls.__module__, cls.__name__), cls)
controllers_class.append(name_class)
path = attrs.get('_cp_path')
if path not in controllers_class_path:
controllers_class_path[path] = name_class
class Controller(object):
__metaclass__ = ControllerType
def __new__(cls, *args, **kwargs):
subclasses = [c for c in cls.__subclasses__() if c._cp_path == cls._cp_path]
if subclasses:
name = "%s (extended by %s)" % (cls.__name__, ', '.join(sub.__name__ for sub in subclasses))
cls = type(name, tuple(reversed(subclasses)), {})
return object.__new__(cls)
#----------------------------------------------------------
# Session context manager
#----------------------------------------------------------
@ -476,8 +491,15 @@ def session_path():
except Exception:
username = "unknown"
path = os.path.join(tempfile.gettempdir(), "oe-sessions-" + username)
if not os.path.exists(path):
try:
os.mkdir(path, 0700)
except OSError as exc:
if exc.errno == errno.EEXIST:
# directory exists: ensure it has the correct permissions
# this will fail if the directory is not owned by the current user
os.chmod(path, 0700)
else:
raise
return path
class Root(object):
@ -541,7 +563,7 @@ class Root(object):
controllers and configure them. """
for addons_path in openerp.modules.module.ad_paths:
for module in sorted(os.listdir(addons_path)):
for module in sorted(os.listdir(str(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')
@ -557,10 +579,11 @@ class Root(object):
addons_manifest[module] = manifest
self.statics['/%s/static' % module] = path_static
for k, v in controllers_class:
if k not in controllers_object:
o = v()
controllers_object[k] = o
for k, v in controllers_class_path.items():
if k not in controllers_object_path and hasattr(v[1], '_cp_path'):
o = v[1]()
controllers_object[v[0]] = o
controllers_object_path[k] = o
if hasattr(o, '_cp_path'):
controllers_path[o._cp_path] = o
@ -591,6 +614,9 @@ class Root(object):
elif exposed == 'http':
_logger.debug("Dispatch http to %s %s %s", ps, c, method_name)
return lambda request: HttpRequest(request).dispatch(method)
if method_name != "index":
method_name = "index"
continue
ps, _slash, method_name = ps.rpartition('/')
if not ps and method_name:
ps = '/'

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:36+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:06+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:36+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:06+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:36+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:06+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:36+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:06+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:36+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:06+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:36+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:06+0000\n"
"X-Generator: Launchpad (build 16598)\n"
"X-Poedit-Language: Czech\n"
#. module: web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:06+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:06+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:07+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:07+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:07+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:07+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:38+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:07+0000\n"
"X-Generator: Launchpad (build 16598)\n"
"Language: es\n"
#. module: web

View File

@ -9,13 +9,13 @@ msgstr ""
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
"PO-Revision-Date: 2012-11-29 19:48+0000\n"
"Last-Translator: Jose Ernesto Mendez <tecnologia@obsdr.com>\n"
"Last-Translator: Open Business Solutions, SRL. <tecnologia@obsdr.com>\n"
"Language-Team: Spanish (Dominican Republic) <es_DO@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: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:07+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:38+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:07+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:38+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:07+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,22 +14,22 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:06+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:133
#, python-format
msgid "Default language:"
msgstr "Vaikimisi keel"
msgstr "Vaikimisi keel:"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/coresetup.js:588
#, python-format
msgid "%d minutes ago"
msgstr "%d minuti eest"
msgstr "%d minutit tagasi"
#. module: web
#. openerp-web
@ -75,7 +75,7 @@ msgstr "Ülemsalasõna"
#: code:addons/web/static/src/xml/base.xml:274
#, python-format
msgid "Change Master Password"
msgstr "Ülemsalasõna Muutmine"
msgstr "Muuda ülemsalasõna"
#. module: web
#. openerp-web
@ -126,7 +126,7 @@ msgstr "Andmebaasi Varundamine"
#: code:addons/web/static/src/js/views.js:507
#, python-format
msgid "%(view_type)s view"
msgstr ""
msgstr "%(view_type)s vaade"
#. module: web
#. openerp-web
@ -141,7 +141,7 @@ msgstr "%s ei ole kehtiv kuupäev"
#: code:addons/web/static/src/xml/base.xml:1835
#, python-format
msgid "Here is a preview of the file we could not import:"
msgstr ""
msgstr "Siin on ülevaade failist mida me ei saa importida:"
#. module: web
#. openerp-web
@ -213,14 +213,14 @@ msgstr "Viimase muudatuse kuupäev:"
#: code:addons/web/static/src/js/search.js:1558
#, python-format
msgid "M2O search fields do not currently handle multiple default values"
msgstr ""
msgstr "M2O otsing väljad ei saa hetkel hakkama mitme vaikeväärtused"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:1227
#, python-format
msgid "Widget type '%s' is not implemented"
msgstr ""
msgstr "Vidina tüüp '% s' ei ole rakendatud"
#. module: web
#. openerp-web
@ -249,7 +249,7 @@ msgstr ""
#: code:addons/web/static/src/js/formats.js:286
#, python-format
msgid "'%s' is not a correct time"
msgstr ""
msgstr "'% s' ei ole õige aeg"
#. module: web
#. openerp-web
@ -277,7 +277,7 @@ msgstr "Manus:"
#: code:addons/web/static/src/xml/base.xml:1689
#, python-format
msgid "Fields to export"
msgstr ""
msgstr "Väljad eksportimiseks"
#. module: web
#. openerp-web
@ -305,7 +305,7 @@ msgstr "umbes kuu eest"
#: code:addons/web/static/src/xml/base.xml:1598
#, python-format
msgid "Custom Filters"
msgstr ""
msgstr "Kohandatud Filtrid"
#. module: web
#. openerp-web
@ -355,7 +355,7 @@ msgstr "Muuda Salasõna"
#: code:addons/web/static/src/js/view_form.js:3445
#, python-format
msgid "View type '%s' is not supported in One2Many."
msgstr ""
msgstr "Vaate tüüp '% s' ei ole toetatud One2Manys."
#. module: web
#. openerp-web
@ -363,7 +363,7 @@ msgstr ""
#: code:addons/web/static/src/js/view_list.js:2209
#, python-format
msgid "Download"
msgstr ""
msgstr "Lae alla"
#. module: web
#. openerp-web
@ -384,7 +384,7 @@ msgstr "Grupp"
#: code:addons/web/static/src/xml/base.xml:930
#, python-format
msgid "Unhandled widget"
msgstr ""
msgstr "Töötlemata vidin"
#. module: web
#. openerp-web
@ -418,7 +418,7 @@ msgstr "...Toimub üleslaadimine..."
#: code:addons/web/static/src/xml/base.xml:1766
#, python-format
msgid "Import"
msgstr "Import"
msgstr "Impordi"
#. module: web
#. openerp-web
@ -439,7 +439,7 @@ msgstr "Faili üleslaadimine"
#: code:addons/web/static/src/js/view_form.js:3838
#, python-format
msgid "Action Button"
msgstr ""
msgstr "Tegevus Nupp"
#. module: web
#. openerp-web
@ -503,7 +503,7 @@ msgstr "Vaata Logi (perm_read)"
#: code:addons/web/static/src/js/view_form.js:1057
#, python-format
msgid "Set Default"
msgstr ""
msgstr "Määra vaikimisi"
#. module: web
#. openerp-web
@ -573,7 +573,7 @@ msgstr ""
#: code:addons/web/static/src/js/view_form.js:2359
#, python-format
msgid "Resource error"
msgstr ""
msgstr "Ressurss vigane"
#. module: web
#. openerp-web
@ -587,7 +587,7 @@ msgstr "ei ole"
#: code:addons/web/static/src/xml/base.xml:553
#, python-format
msgid "Print Workflow"
msgstr ""
msgstr "Trüki Töövoog"
#. module: web
#. openerp-web
@ -835,7 +835,7 @@ msgstr "Filtri nimi"
#: code:addons/web/static/src/xml/base.xml:1471
#, python-format
msgid "-- Actions --"
msgstr ""
msgstr "-- Toimingud --"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:36+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:06+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:06+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:06+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web
@ -2052,7 +2052,7 @@ msgstr "Nopea lisäys"
#: code:addons/web/static/src/xml/base.xml:1803
#, python-format
msgid "Latin 1"
msgstr ""
msgstr "Latin 1-merkistö"
#. module: web
#. openerp-web
@ -2368,6 +2368,7 @@ msgstr "Virheellinen arvo kentälle %(fieldname)s: [%(value)s] is %(message)s"
#, python-format
msgid "The o2m record must be saved before an action can be used"
msgstr ""
"One to many yksikkö pitää tallentaa ennen kuin toimenpide voidaan suorittaa"
#. module: web
#. openerp-web
@ -2596,7 +2597,7 @@ msgstr "Luo tietokanta"
#: code:addons/web/static/src/xml/base.xml:423
#, python-format
msgid "GNU Affero General Public License"
msgstr ""
msgstr "GNU Affero General Public Licence"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:06+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:07+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web
@ -291,7 +291,7 @@ msgstr ""
#: code:addons/web/static/src/js/view_form.js:4908
#, python-format
msgid "File Upload"
msgstr ""
msgstr "Téléversement de fichier"
#. module: web
#. openerp-web
@ -319,7 +319,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:422
#, python-format
msgid "OpenERP SA Company"
msgstr ""
msgstr "la compagnie OpenERP SA"
#. module: web
#. openerp-web
@ -411,7 +411,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:1279
#, python-format
msgid "...Upload in progress..."
msgstr ""
msgstr "…Téléversement en cours…"
#. module: web
#. openerp-web
@ -432,7 +432,7 @@ msgstr ""
#: code:addons/web/static/src/js/view_form.js:4888
#, python-format
msgid "File upload"
msgstr ""
msgstr "Téléversement de fichier"
#. module: web
#. openerp-web
@ -587,7 +587,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:553
#, python-format
msgid "Print Workflow"
msgstr ""
msgstr "Imprimer le flux de travail"
#. module: web
#. openerp-web
@ -864,6 +864,7 @@ msgstr ""
#, python-format
msgid "Can't send email to invalid e-mail address"
msgstr ""
"Impossible d'envoyer un courriel à une adresse electronique incorrecte"
#. module: web
#. openerp-web
@ -1352,7 +1353,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:444
#, python-format
msgid "Edit Company data"
msgstr ""
msgstr "Modifier les données de la compagnie"
#. module: web
#. openerp-web
@ -1611,7 +1612,7 @@ msgstr ""
#: code:addons/web/static/src/js/view_form.js:4908
#, python-format
msgid "There was a problem while uploading your file"
msgstr ""
msgstr "Il y a eu un problème lors du téléversement du fichier"
#. module: web
#. openerp-web
@ -1865,7 +1866,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:1249
#, python-format
msgid "Uploading ..."
msgstr ""
msgstr "Téléversement…"
#. module: web
#. openerp-web
@ -2053,7 +2054,7 @@ msgstr ""
#: code:addons/web/static/src/js/views.js:1217
#, python-format
msgid "Uploading..."
msgstr ""
msgstr "Téléversement en cours..."
#. module: web
#. openerp-web
@ -2418,7 +2419,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:552
#, python-format
msgid "Edit Workflow"
msgstr ""
msgstr "Modifier le flux de travail"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:06+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web
@ -2765,9 +2765,6 @@ msgstr "Filtros"
#~ msgid "Could not find current view declaration"
#~ msgstr "Non se pudo atopar a declaración da vista actual"
#~ msgid "Customize"
#~ msgstr "Persoalizar"
#~ msgid "Reports"
#~ msgstr "Informes"
@ -2858,3 +2855,6 @@ msgstr "Filtros"
#~ msgid "Activate the developper mode"
#~ msgstr "Activar modo de desenvolvedor"
#~ msgid "Customize"
#~ msgstr "Personalizar"

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:06+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:06+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:07+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:06+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:06+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:06+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:06+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:06+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:06+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:06+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

File diff suppressed because it is too large Load Diff

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:06+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:06+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:06+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:06+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:06+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
"PO-Revision-Date: 2012-11-26 12:19+0000\n"
"PO-Revision-Date: 2013-04-23 12:42+0000\n"
"Last-Translator: Els Van Vossel (Agaplan) <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: 2013-04-13 05:38+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:07+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web
@ -59,7 +59,7 @@ msgstr "is kleiner dan of gelijk aan"
#: code:addons/web/static/src/js/chrome.js:408
#, python-format
msgid "Please enter your previous password"
msgstr ""
msgstr "Geef uw vorige wachtwoord in"
#. module: web
#. openerp-web
@ -82,7 +82,7 @@ msgstr "Hoofdwachtwoord wijzigen"
#: code:addons/web/static/src/js/chrome.js:507
#, python-format
msgid "Do you really want to delete the database: %s ?"
msgstr ""
msgstr "Weet u zeker dat u de database %s wilt verwijderen?"
#. module: web
#. openerp-web
@ -96,7 +96,7 @@ msgstr "%(field)s zoeken op: %(value)s"
#: code:addons/web/static/src/js/chrome.js:553
#, python-format
msgid "Access Denied"
msgstr ""
msgstr "Geen toegang"
#. module: web
#. openerp-web
@ -249,7 +249,7 @@ msgstr "(geen string)"
#: code:addons/web/static/src/js/formats.js:286
#, python-format
msgid "'%s' is not a correct time"
msgstr ""
msgstr "'%s' is geen geldige tijd"
#. module: web
#. openerp-web
@ -355,7 +355,7 @@ msgstr "Wachtwoord wijzigen"
#: code:addons/web/static/src/js/view_form.js:3445
#, python-format
msgid "View type '%s' is not supported in One2Many."
msgstr ""
msgstr "Weergavetype '%s' wordt niet ondersteund in One2Many."
#. module: web
#. openerp-web
@ -370,7 +370,7 @@ msgstr "Downloaden"
#: code:addons/web/static/src/js/formats.js:270
#, python-format
msgid "'%s' is not a correct datetime"
msgstr ""
msgstr "'%s' is geen geldige datum/tijd"
#. module: web
#. openerp-web
@ -398,7 +398,7 @@ msgstr "Selectie:"
#: code:addons/web/static/src/js/view_form.js:867
#, python-format
msgid "The following fields are invalid:"
msgstr ""
msgstr "De volgende velden zijn ongeldig:"
#. module: web
#: code:addons/web/controllers/main.py:843
@ -425,7 +425,7 @@ msgstr "Importeren"
#: code:addons/web/static/src/js/chrome.js:559
#, python-format
msgid "Could not restore the database"
msgstr ""
msgstr "Kan de database niet herstellen"
#. module: web
#. openerp-web
@ -539,7 +539,7 @@ msgstr "Niet ondersteunde operator %s in domein %s"
#: code:addons/web/static/src/js/formats.js:246
#, python-format
msgid "'%s' is not a correct float"
msgstr ""
msgstr "'%s' is geen correcte float"
#. module: web
#. openerp-web
@ -567,7 +567,7 @@ msgstr "Maken en bewerken..."
#: code:addons/web/static/src/js/pyeval.js:730
#, python-format
msgid "Unknown nonliteral type "
msgstr ""
msgstr "Onbekend nonliteral type "
#. module: web
#. openerp-web
@ -595,7 +595,7 @@ msgstr "Workflow afdrukken"
#: code:addons/web/static/src/js/chrome.js:411
#, python-format
msgid "Please confirm your new password"
msgstr ""
msgstr "Bevestig uw nieuwe wachtwoord"
#. module: web
#. openerp-web
@ -616,7 +616,7 @@ msgstr "Bezoek voor meer informatie"
#: code:addons/web/static/src/xml/base.xml:1857
#, python-format
msgid "Add All Info..."
msgstr ""
msgstr "Alle info toevoegen"
#. module: web
#. openerp-web
@ -637,14 +637,14 @@ msgstr "Bij wijzigen:"
#: code:addons/web/static/src/js/views.js:919
#, python-format
msgid "Model %s fields"
msgstr ""
msgstr "Model %s velden"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_list.js:908
#, python-format
msgid "Setting 'id' attribute on existing record %s"
msgstr ""
msgstr "'id'-attribuut instellen voor bestaand record %s"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:06+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web
@ -43,7 +43,7 @@ msgstr "Trwa pobieranie...<br />Bądź cierpliwy."
#: code:addons/web/static/src/js/search.js:1991
#, python-format
msgid "%(field)s %(operator)s \"%(value)s\""
msgstr ""
msgstr "%(field)s %(operator)s \"%(value)s\""
#. module: web
#. openerp-web
@ -126,7 +126,7 @@ msgstr "Kopia zapasowa bazy danych"
#: code:addons/web/static/src/js/views.js:507
#, python-format
msgid "%(view_type)s view"
msgstr ""
msgstr "Widok %(view_type)s"
#. module: web
#. openerp-web
@ -243,7 +243,7 @@ msgstr "Formularz"
#: code:addons/web/static/src/xml/base.xml:1333
#, python-format
msgid "(no string)"
msgstr ""
msgstr "(no string)"
#. module: web
#. openerp-web
@ -320,7 +320,7 @@ msgstr "Typ przycisku:"
#: code:addons/web/static/src/xml/base.xml:422
#, python-format
msgid "OpenERP SA Company"
msgstr ""
msgstr "OpenERP SA Company"
#. module: web
#. openerp-web
@ -497,7 +497,7 @@ msgstr "Musisz wybrać co najmniej jeden rekord."
#: code:addons/web/static/src/xml/base.xml:538
#, python-format
msgid "View Log (perm_read)"
msgstr ""
msgstr "Widok Log (perm_read)"
#. module: web
#. openerp-web
@ -553,7 +553,7 @@ msgstr "Odtworzone"
#: code:addons/web/static/src/js/view_list.js:409
#, python-format
msgid "%d-%d of %d"
msgstr ""
msgstr "%d-%d of %d"
#. module: web
#. openerp-web
@ -718,7 +718,7 @@ msgstr "Poprzednie hasło:"
#: code:addons/web/static/src/js/formats.js:113
#, python-format
msgid "Bytes,Kb,Mb,Gb,Tb,Pb,Eb,Zb,Yb"
msgstr ""
msgstr "Bajty,Kb,Mb,Gb,Tb,Pb,Eb,Zb,Yb"
#. module: web
#. openerp-web
@ -861,7 +861,7 @@ msgstr "Przełącz układ formularza"
#: code:addons/web/static/src/xml/base.xml:424
#, python-format
msgid "OpenERP.com"
msgstr ""
msgstr "OpenERP.com"
#. module: web
#. openerp-web
@ -971,7 +971,7 @@ msgstr "Dane formularza nie mogą być usunięte"
#: code:addons/web/static/src/xml/base.xml:536
#, python-format
msgid "Debug View#"
msgstr ""
msgstr "Widok debugowania#"
#. module: web
#. openerp-web
@ -1019,14 +1019,14 @@ msgstr "Zapisz listę pól"
#: code:addons/web/doc/module/static/src/xml/web_example.xml:5
#, python-format
msgid "Start"
msgstr ""
msgstr "Start"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views.js:877
#, python-format
msgid "View Log (%s)"
msgstr ""
msgstr "Widok Log (%s)"
#. module: web
#. openerp-web
@ -1054,7 +1054,7 @@ msgstr "Wybrany plik przekracza maksymalny rozmiar %s."
#: code:addons/web/static/src/xml/base.xml:635
#, python-format
msgid "/web/binary/upload_attachment"
msgstr ""
msgstr "/web/binary/upload_attachment"
#. module: web
#. openerp-web
@ -1109,7 +1109,7 @@ msgstr "'%s' nie jest poprawną datą"
#: code:addons/web/static/src/xml/base.xml:936
#, python-format
msgid "(nolabel)"
msgstr ""
msgstr "(nolabel)"
#. module: web
#. openerp-web
@ -1170,7 +1170,7 @@ msgstr "Nieznany operator %s w domenie %s"
#: code:addons/web/static/src/js/view_form.js:426
#, python-format
msgid "%d / %d"
msgstr ""
msgstr "%d / %d"
#. module: web
#. openerp-web
@ -1246,7 +1246,7 @@ msgstr "Logowanie"
#: code:addons/web/static/src/xml/base.xml:423
#, python-format
msgid "Licenced under the terms of"
msgstr ""
msgstr "Licencjonowane na zasadach"
#. module: web
#. openerp-web
@ -1346,7 +1346,7 @@ msgstr "Metoda:"
#: code:addons/web/static/src/js/view_list.js:1454
#, python-format
msgid "%(page)d/%(page_count)d"
msgstr ""
msgstr "%(page)d/%(page_count)d"
#. module: web
#. openerp-web
@ -1399,7 +1399,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:396
#, python-format
msgid "99+"
msgstr ""
msgstr "99+"
#. module: web
#. openerp-web
@ -1606,7 +1606,7 @@ msgstr "Usuwanie bazy"
#: code:addons/web/static/src/xml/base.xml:448
#, python-format
msgid "Powered by"
msgstr ""
msgstr "Zasilane przez"
#. module: web
#. openerp-web
@ -1628,7 +1628,7 @@ msgstr "Pojawił się problem przy wysyłaniu pliku"
#: code:addons/web/static/src/xml/base.xml:561
#, python-format
msgid "XML ID:"
msgstr ""
msgstr "XML ID:"
#. module: web
#. openerp-web
@ -1721,7 +1721,7 @@ msgstr "Linie do pominięcia"
#: code:addons/web/static/src/js/view_form.js:2883
#, python-format
msgid "Create \"<strong>%s</strong>\""
msgstr ""
msgstr "Utwórz \"<strong>%s</strong>\""
#. module: web
#. openerp-web
@ -1735,7 +1735,7 @@ msgstr "Wprowadź pola do zapisu w pliku eksportu..."
#: code:addons/web/static/src/xml/base.xml:421
#, python-format
msgid "Copyright © 2004-TODAY OpenERP SA. All Rights Reserved."
msgstr ""
msgstr "Copyright © 2004-DZISIAJ OpenERP SA. All Rights Reserved."
#. module: web
#. openerp-web
@ -1764,7 +1764,7 @@ msgstr "Import się nie udał z powodu:"
#: code:addons/web/static/src/xml/base.xml:542
#, python-format
msgid "JS Tests"
msgstr ""
msgstr "Testy JS"
#. module: web
#. openerp-web
@ -2049,7 +2049,7 @@ msgstr "Szybkie dodawanie"
#: code:addons/web/static/src/xml/base.xml:1803
#, python-format
msgid "Latin 1"
msgstr ""
msgstr "Latin 1"
#. module: web
#. openerp-web
@ -2083,7 +2083,7 @@ msgstr "Pobierz dane demonstracyjne:"
#: code:addons/web/static/src/xml/base.xml:618
#, python-format
msgid "Created by :"
msgstr ""
msgstr "Utworzone przez:"
#. module: web
#. openerp-web
@ -2216,7 +2216,7 @@ msgstr "Przycisk"
#: code:addons/web/static/src/xml/base.xml:421
#, python-format
msgid "OpenERP is a trademark of the"
msgstr ""
msgstr "OpenERP jest znakiem handlowym"
#. module: web
#. openerp-web
@ -2385,7 +2385,7 @@ msgstr "Stosuj domyślnie"
#: code:addons/web/static/src/js/view_list.js:1363
#, python-format
msgid "%s (%d)"
msgstr ""
msgstr "%s (%d)"
#. module: web
#. openerp-web
@ -2420,7 +2420,7 @@ msgstr "Edytuj czynność"
#: code:addons/web/static/src/xml/base.xml:558
#, python-format
msgid "ID:"
msgstr ""
msgstr "ID:"
#. module: web
#. openerp-web
@ -2448,7 +2448,7 @@ msgstr "Na pewno chcesz usunąć ten załącznik?"
#: code:addons/web/static/src/js/views.js:894
#, python-format
msgid "Technical Translation"
msgstr ""
msgstr "Tłumaczenie techniczne"
#. module: web
#. openerp-web
@ -2462,7 +2462,7 @@ msgstr "Pole:"
#: code:addons/web/static/src/xml/base.xml:623
#, python-format
msgid "Modified by :"
msgstr ""
msgstr "Zmodyfikowane przez:"
#. module: web
#. openerp-web
@ -2594,7 +2594,7 @@ msgstr "Utwórz bazę danych"
#: code:addons/web/static/src/xml/base.xml:423
#, python-format
msgid "GNU Affero General Public License"
msgstr ""
msgstr "GNU Affero General Public License"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:06+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -15,8 +15,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:07+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:06+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web
@ -469,7 +469,7 @@ msgstr "Faceți o pauză de cafea,<br /> pentru că se încarcă..."
#: code:addons/web/static/src/xml/base.xml:416
#, python-format
msgid "Activate the developer mode"
msgstr "Activeaza modulul programare"
msgstr "Activează modulul programare"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:06+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:07+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:07+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:36+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:06+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:38+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:07+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:07+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-04-13 05:37+0000\n"
"X-Generator: Launchpad (build 16564)\n"
"X-Launchpad-Export-Date: 2013-05-10 06:07+0000\n"
"X-Generator: Launchpad (build 16598)\n"
#. module: web
#. openerp-web

Some files were not shown because too many files have changed in this diff Show More