[MERGE] from trunk

bzr revid: fva@openerp.com-20121002094033-c4wwp1xbceyoxj23
This commit is contained in:
Frédéric van der Essen 2012-10-02 11:40:33 +02:00
commit b8e5de3655
259 changed files with 883 additions and 1014 deletions

View File

@ -1,7 +1,7 @@
name = 'openerp-web' name = 'openerp-web'
version = '6.1rc1' version = '7.0alpha'
description = "Web Client of OpenERP, the Enterprise Management Software" description = "OpenERP Web"
long_description = "OpenERP Web is the web client of the OpenERP, a free enterprise management software" long_description = "OpenERP Web is the web interface of OpenERP, an Open Source Business Application Suite"
author = "OpenERP SA" author = "OpenERP SA"
author_email = "info@openerp.com" author_email = "info@openerp.com"
support_email = 'support@openerp.com' support_email = 'support@openerp.com'

View File

@ -1567,13 +1567,6 @@ class Binary(openerpweb.Controller):
class Action(openerpweb.Controller): class Action(openerpweb.Controller):
_cp_path = "/web/action" _cp_path = "/web/action"
# For most actions, the type attribute and the model name are the same, but
# there are exceptions. This dict is used to remap action type attributes
# to the "real" model name when they differ.
action_mapping = {
"ir.actions.act_url": "ir.actions.url",
}
@openerpweb.jsonrequest @openerpweb.jsonrequest
def load(self, req, action_id, do_not_eval=False): def load(self, req, action_id, do_not_eval=False):
Actions = req.session.model('ir.actions.actions') Actions = req.session.model('ir.actions.actions')
@ -1597,8 +1590,7 @@ class Action(openerpweb.Controller):
if action_type == 'ir.actions.report.xml': if action_type == 'ir.actions.report.xml':
ctx.update({'bin_size': True}) ctx.update({'bin_size': True})
ctx.update(context) ctx.update(context)
action_model = self.action_mapping.get(action_type, action_type) action = req.session.model(action_type).read([action_id], False, ctx)
action = req.session.model(action_model).read([action_id], False, ctx)
if action: if action:
value = clean_action(req, action[0], do_not_eval) value = clean_action(req, action[0], do_not_eval)
return {'result': value} return {'result': value}

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:04+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:04+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:04+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:04+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:04+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:04+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
"X-Poedit-Language: Czech\n" "X-Poedit-Language: Czech\n"
#. openerp-web #. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:04+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
"Language: es\n" "Language: es\n"
#. openerp-web #. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176
@ -243,17 +243,18 @@ msgid ""
"Destination fields should only be selected once, some fields are selected " "Destination fields should only be selected once, some fields are selected "
"more than once:" "more than once:"
msgstr "" msgstr ""
"Campos deben ser seleccionados una vez, algunos campos están duplicados"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/data_import.js:386 #: addons/web/static/src/js/data_import.js:386
msgid "*Required Fields are not selected :" msgid "*Required Fields are not selected :"
msgstr "" msgstr "*Campos requieridos no están seleccionados :"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/formats.js:139 #: addons/web/static/src/js/formats.js:139
#, python-format #, python-format
msgid "(%d records)" msgid "(%d records)"
msgstr "" msgstr "(%d registros)"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/formats.js:325 #: addons/web/static/src/js/formats.js:325

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:04+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:04+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:04+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -15,8 +15,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176
@ -675,7 +675,7 @@ msgstr "Deseja remover estes registros?"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/views.js:925 #: addons/web/static/src/js/views.js:925
msgid "Warning" msgid "Warning"
msgstr "Atenção" msgstr "Aviso"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/view_list.js:716 #: addons/web/static/src/js/view_list.js:716

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:04+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:46+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:176 #: addons/web/static/src/js/chrome.js:176

View File

@ -234,22 +234,20 @@ instance.web.Loading = instance.web.Widget.extend({
this._super(parent); this._super(parent);
this.count = 0; this.count = 0;
this.blocked_ui = false; this.blocked_ui = false;
var self = this; this.session.on("request", this, this.request_call);
this.request_call = function() { this.session.on("response", this, this.response_call);
self.on_rpc_event(1); this.session.on("error", this, this.response_call);
};
this.response_call = function() {
self.on_rpc_event(-1);
};
this.session.on_rpc_request.add_first(this.request_call);
this.session.on_rpc_response.add_last(this.response_call);
}, },
destroy: function() { destroy: function() {
this.session.on_rpc_request.remove(this.request_call);
this.session.on_rpc_response.remove(this.response_call);
this.on_rpc_event(-this.count); this.on_rpc_event(-this.count);
this._super(); this._super();
}, },
request_call: function() {
this.on_rpc_event(1);
},
response_call: function() {
this.on_rpc_event(-1);
},
on_rpc_event : function(increment) { on_rpc_event : function(increment) {
var self = this; var self = this;
if (!this.count && increment === 1) { if (!this.count && increment === 1) {

View File

@ -972,6 +972,11 @@ instance.web.Registry = instance.web.Class.extend({
}); });
instance.web.JsonRPC = instance.web.CallbackEnabled.extend({ instance.web.JsonRPC = instance.web.CallbackEnabled.extend({
triggers: {
'request': 'Request sent',
'response': 'Response received',
'error': 'HTTP Error response or timeout received',
},
/** /**
* @constructs instance.web.JsonRPC * @constructs instance.web.JsonRPC
* @extends instance.web.CallbackEnabled * @extends instance.web.CallbackEnabled
@ -1310,12 +1315,12 @@ instance.web.JsonRPC = instance.web.CallbackEnabled.extend({
id: _.uniqueId('r') id: _.uniqueId('r')
}; };
var deferred = $.Deferred(); var deferred = $.Deferred();
this.on_rpc_request(); this.trigger('request', url, payload);
var aborter = params.aborter; var aborter = params.aborter;
delete params.aborter; delete params.aborter;
var request = this.rpc_function(url, payload).then( var request = this.rpc_function(url, payload).then(
function (response, textStatus, jqXHR) { function (response, textStatus, jqXHR) {
self.on_rpc_response(); self.trigger('response', response);
if (!response.error) { if (!response.error) {
if (url.url === '/web/session/eval_domain_and_context') { if (url.url === '/web/session/eval_domain_and_context') {
self.test_eval(params, response.result); self.test_eval(params, response.result);
@ -1328,7 +1333,7 @@ instance.web.JsonRPC = instance.web.CallbackEnabled.extend({
} }
}, },
function(jqXHR, textStatus, errorThrown) { function(jqXHR, textStatus, errorThrown) {
self.on_rpc_response(); self.trigger('error');
var error = { var error = {
code: -32098, code: -32098,
message: "XmlHttpRequestError " + errorThrown, message: "XmlHttpRequestError " + errorThrown,
@ -1436,10 +1441,6 @@ instance.web.JsonRPC = instance.web.CallbackEnabled.extend({
return deferred; return deferred;
} }
}, },
on_rpc_request: function() {
},
on_rpc_response: function() {
},
on_rpc_error: function(error) { on_rpc_error: function(error) {
}, },
get_url: function (file) { get_url: function (file) {

View File

@ -107,7 +107,7 @@ instance.web.Query = instance.web.Class.extend({
* Performs a groups read according to the provided grouping criterion * Performs a groups read according to the provided grouping criterion
* *
* @param {String|Array<String>} grouping * @param {String|Array<String>} grouping
* @returns {jQuery.Deferred<Array<openerp.web.data.Group>> | null} * @returns {jQuery.Deferred<Array<openerp.web.QueryGroup>> | null}
*/ */
group_by: function (grouping) { group_by: function (grouping) {
if (grouping === undefined) { if (grouping === undefined) {
@ -130,7 +130,7 @@ instance.web.Query = instance.web.Class.extend({
orderby: instance.web.serialize_sort(this._order_by) || false orderby: instance.web.serialize_sort(this._order_by) || false
}).pipe(function (results) { }).pipe(function (results) {
return _(results).map(function (result) { return _(results).map(function (result) {
return new instance.web.data.Group( return new instance.web.QueryGroup(
self._model.name, grouping[0], result); self._model.name, grouping[0], result);
}); });
}); });
@ -194,7 +194,54 @@ instance.web.Query = instance.web.Class.extend({
} }
}); });
instance.web.Model = instance.web.Class.extend(/** @lends openerp.web.Model# */{ instance.web.QueryGroup = instance.web.Class.extend({
init: function (model, grouping_field, read_group_group) {
// In cases where group_by_no_leaf and no group_by, the result of
// read_group has aggregate fields but no __context or __domain.
// Create default (empty) values for those so that things don't break
var fixed_group = _.extend(
{__context: {group_by: []}, __domain: []},
read_group_group);
var aggregates = {};
_(fixed_group).each(function (value, key) {
if (key.indexOf('__') === 0
|| key === grouping_field
|| key === grouping_field + '_count') {
return;
}
aggregates[key] = value || 0;
});
this.model = new instance.web.Model(
model, fixed_group.__context, fixed_group.__domain);
var group_size = fixed_group[grouping_field + '_count'] || fixed_group.__count || 0;
var leaf_group = fixed_group.__context.group_by.length === 0;
this.attributes = {
folded: !!(fixed_group.__fold),
grouped_on: grouping_field,
// if terminal group (or no group) and group_by_no_leaf => use group.__count
length: group_size,
value: fixed_group[grouping_field],
// A group is open-able if it's not a leaf in group_by_no_leaf mode
has_children: !(leaf_group && fixed_group.__context['group_by_no_leaf']),
aggregates: aggregates
};
},
get: function (key) {
return this.attributes[key];
},
subgroups: function () {
return this.model.query().group_by(this.model.context().group_by);
},
query: function () {
return this.model.query.apply(this.model, arguments);
}
});
instance.web.Model = instance.web.Class.extend({
/** /**
* @constructs instance.web.Model * @constructs instance.web.Model
* @extends instance.web.Class * @extends instance.web.Class
@ -302,145 +349,7 @@ instance.web.Model = instance.web.Class.extend(/** @lends openerp.web.Model# */{
}, },
}); });
instance.web.Traverser = instance.web.Class.extend(/** @lends openerp.web.Traverser# */{ instance.web.DataGroup = instance.web.CallbackEnabled.extend({
/**
* @constructs instance.web.Traverser
* @extends instance.web.Class
*
* @param {instance.web.Model} model instance this traverser is bound to
*/
init: function (model) {
this._model = model;
this._index = 0;
},
/**
* Gets and sets the current index
*
* @param {Number} [idx]
* @returns {Number} current index
*/
index: function (idx) {
if (idx) { this._index = idx; }
return this._index;
},
/**
* Returns the model this traverser is currently bound to
*
* @returns {openerp.web.Model}
*/
model: function () {
return this._model;
},
/**
* Fetches the size of the backing model's match
*
* @returns {Deferred<Number>} deferred count
*/
size: function () {
return this._model.query().count();
},
/**
* Record at the current index for the collection, fails if there is no
* record at the current index.
*
* @returns {Deferred<>}
*/
current: function (fields) {
return this._model.query(fields).first().pipe(function (record) {
if (record == null) {
return $.Deferred()
.reject('No record at index' + this._index)
.promise();
}
return record;
});
},
next: function (fields) {
var self = this;
this._index++;
return this.size().pipe(function (s) {
if (self._index >= s) {
self._index = 0;
}
return self.current(fields);
});
},
previous: function (fields) {
var self = this;
this._index--;
if (this._index < 0) {
return this.size().pipe(function (s) {
self._index = s-1;
return self.current(fields);
});
}
return this.current(fields);
}
});
/**
* Utility objects, should never need to be instantiated from outside of this
* module
*
* @namespace
*/
instance.web.data = {
Group: instance.web.Class.extend(/** @lends openerp.web.data.Group# */{
/**
* @constructs instance.web.data.Group
* @extends instance.web.Class
*/
init: function (model, grouping_field, read_group_group) {
// In cases where group_by_no_leaf and no group_by, the result of
// read_group has aggregate fields but no __context or __domain.
// Create default (empty) values for those so that things don't break
var fixed_group = _.extend(
{__context: {group_by: []}, __domain: []},
read_group_group);
var aggregates = {};
_(fixed_group).each(function (value, key) {
if (key.indexOf('__') === 0
|| key === grouping_field
|| key === grouping_field + '_count') {
return;
}
aggregates[key] = value || 0;
});
this.model = new instance.web.Model(
model, fixed_group.__context, fixed_group.__domain);
var group_size = fixed_group[grouping_field + '_count'] || fixed_group.__count || 0;
var leaf_group = fixed_group.__context.group_by.length === 0;
this.attributes = {
folded: !!(fixed_group.__fold),
grouped_on: grouping_field,
// if terminal group (or no group) and group_by_no_leaf => use group.__count
length: group_size,
value: fixed_group[grouping_field],
// A group is open-able if it's not a leaf in group_by_no_leaf mode
has_children: !(leaf_group && fixed_group.__context['group_by_no_leaf']),
aggregates: aggregates
};
},
get: function (key) {
return this.attributes[key];
},
subgroups: function () {
return this.model.query().group_by(this.model.context().group_by);
},
query: function () {
return this.model.query.apply(this.model, arguments);
}
})
};
instance.web.DataGroup = instance.web.CallbackEnabled.extend( /** @lends openerp.web.DataGroup# */{
/** /**
* Management interface between views and grouped collections of OpenERP * Management interface between views and grouped collections of OpenERP
* records. * records.
@ -472,50 +381,47 @@ instance.web.DataGroup = instance.web.CallbackEnabled.extend( /** @lends opener
}, },
list: function (fields, ifGroups, ifRecords) { list: function (fields, ifGroups, ifRecords) {
var self = this; var self = this;
$.when(this.model.query(fields) var query = this.model.query(fields).order_by(this.sort).group_by(this.group_by);
.order_by(this.sort) $.when(query).then(function (querygroups) {
.group_by(this.group_by)).then(function (groups) { // leaf node
if (!groups) { if (!querygroups) {
ifRecords(_.extend( var ds = new instance.web.DataSetSearch(self, self.model.name, self.model.context(), self.model.domain());
new instance.web.DataSetSearch( ds._sort = self.sort;
self, self.model.name, ifRecords(ds);
self.model.context(),
self.model.domain()),
{_sort: self.sort}));
return; return;
} }
ifGroups(_(groups).map(function (group) { // internal node
var child_datagroups = _(querygroups).map(function (group) {
var child_context = _.extend( var child_context = _.extend(
{}, self.model.context(), group.model.context()); {}, self.model.context(), group.model.context());
return _.extend( var child_dg = new instance.web.DataGroup(
new instance.web.DataGroup( self, self.model.name, group.model.domain(),
self, self.model.name, group.model.domain(), child_context, group.model._context.group_by,
child_context, group.model._context.group_by, self.level + 1);
self.level + 1), child_dg.sort = self.sort;
{ // copy querygroup properties
__context: child_context, child_dg.__context = child_context;
__domain: group.model.domain(), child_dg.__domain = group.model.domain();
folded: group.get('folded'), child_dg.folded = group.get('folded');
grouped_on: group.get('grouped_on'), child_dg.grouped_on = group.get('grouped_on');
length: group.get('length'), child_dg.length = group.get('length');
value: group.get('value'), child_dg.value = group.get('value');
openable: group.get('has_children'), child_dg.openable = group.get('has_children');
aggregates: group.get('aggregates') child_dg.aggregates = group.get('aggregates');
}, {sort: self.sort}); return child_dg;
})); });
ifGroups(child_datagroups);
}); });
} }
}); });
instance.web.ContainerDataGroup = instance.web.DataGroup.extend({ });
instance.web.GrouplessDataGroup = instance.web.DataGroup.extend({ });
instance.web.StaticDataGroup = instance.web.GrouplessDataGroup.extend( /** @lends openerp.web.StaticDataGroup# */ { instance.web.StaticDataGroup = instance.web.DataGroup.extend({
/** /**
* A specialization of groupless data groups, relying on a single static * A specialization of data groups, relying on a single static
* dataset as its records provider. * dataset as its records provider.
* *
* @constructs instance.web.StaticDataGroup * @constructs instance.web.StaticDataGroup
* @extends instance.web.GrouplessDataGroup * @extends instance.web.DataGroup
* @param {openep.web.DataSetStatic} dataset a static dataset backing the groups * @param {openep.web.DataSetStatic} dataset a static dataset backing the groups
*/ */
init: function (dataset) { init: function (dataset) {
@ -526,10 +432,9 @@ instance.web.StaticDataGroup = instance.web.GrouplessDataGroup.extend( /** @lend
} }
}); });
instance.web.DataSet = instance.web.CallbackEnabled.extend( /** @lends openerp.web.DataSet# */{ instance.web.DataSet = instance.web.CallbackEnabled.extend({
/** /**
* DateaManagement interface between views and the collection of selected * Collection of OpenERP records, used to share records and the current selection between views.
* OpenERP records (represents the view's state?)
* *
* @constructs instance.web.DataSet * @constructs instance.web.DataSet
* @extends instance.web.CallbackEnabled * @extends instance.web.CallbackEnabled
@ -646,15 +551,10 @@ instance.web.DataSet = instance.web.CallbackEnabled.extend( /** @lends openerp.
* Creates a new record in db * Creates a new record in db
* *
* @param {Object} data field values to set on the new record * @param {Object} data field values to set on the new record
* @param {Function} callback function called with operation result
* @param {Function} error_callback function called in case of creation error
* @returns {$.Deferred} * @returns {$.Deferred}
*/ */
create: function(data, callback, error_callback) { create: function(data) {
return this._model.call('create', return this._model.call('create', [data], {context: this._model.context()});
[data], {context: this._model.context()})
.pipe(function (r) { return {result: r}; })
.then(callback, error_callback);
}, },
/** /**
* Saves the provided data in an existing db record * Saves the provided data in an existing db record
@ -665,24 +565,17 @@ instance.web.DataSet = instance.web.CallbackEnabled.extend( /** @lends openerp.
* @param {Function} error_callback function called in case of write error * @param {Function} error_callback function called in case of write error
* @returns {$.Deferred} * @returns {$.Deferred}
*/ */
write: function (id, data, options, callback, error_callback) { write: function (id, data, options) {
options = options || {}; options = options || {};
return this._model.call('write', return this._model.call('write', [[id], data], {context: this._model.context(options.context)});
[[id], data], {context: this._model.context(options.context)})
.pipe(function (r) { return {result: r}})
.then(callback, error_callback);
}, },
/** /**
* Deletes an existing record from the database * Deletes an existing record from the database
* *
* @param {Number|String} ids identifier of the record to delete * @param {Number|String} ids identifier of the record to delete
* @param {Function} callback function called with operation result
* @param {Function} error_callback function called in case of deletion error
*/ */
unlink: function(ids, callback, error_callback) { unlink: function(ids) {
return this._model.call('unlink', return this._model.call('unlink', [ids], {context: this._model.context()});
[ids], {context: this._model.context()})
.then(callback, error_callback);
}, },
/** /**
* Calls an arbitrary RPC method * Calls an arbitrary RPC method
@ -703,43 +596,35 @@ instance.web.DataSet = instance.web.CallbackEnabled.extend( /** @lends openerp.
* @param {Array} [args] * @param {Array} [args]
* @param {Number} [domain_index] index of a domain to evaluate in the args array * @param {Number} [domain_index] index of a domain to evaluate in the args array
* @param {Number} [context_index] index of a context to evaluate in the args array * @param {Number} [context_index] index of a context to evaluate in the args array
* @param {Function} callback
* @param {Function} error_callback
* @returns {$.Deferred} * @returns {$.Deferred}
*/ */
call_and_eval: function (method, args, domain_index, context_index, callback, error_callback) { call_and_eval: function (method, args, domain_index, context_index) {
return instance.session.rpc('/web/dataset/call', { return instance.session.rpc('/web/dataset/call', {
model: this.model, model: this.model,
method: method, method: method,
domain_id: domain_index == undefined ? null : domain_index, domain_id: domain_index == undefined ? null : domain_index,
context_id: context_index == undefined ? null : context_index, context_id: context_index == undefined ? null : context_index,
args: args || [] args: args || []
}, callback, error_callback); });
}, },
/** /**
* Calls a button method, usually returning some sort of action * Calls a button method, usually returning some sort of action
* *
* @param {String} method * @param {String} method
* @param {Array} [args] * @param {Array} [args]
* @param {Function} callback
* @param {Function} error_callback
* @returns {$.Deferred} * @returns {$.Deferred}
*/ */
call_button: function (method, args, callback, error_callback) { call_button: function (method, args) {
return this._model.call_button(method, args) return this._model.call_button(method, args);
.then(callback, error_callback);
}, },
/** /**
* Fetches the "readable name" for records, based on intrinsic rules * Fetches the "readable name" for records, based on intrinsic rules
* *
* @param {Array} ids * @param {Array} ids
* @param {Function} callback
* @returns {$.Deferred} * @returns {$.Deferred}
*/ */
name_get: function(ids, callback) { name_get: function(ids) {
return this._model.call('name_get', return this._model.call('name_get', [ids], {context: this._model.context()});
[ids], {context: this._model.context()})
.then(callback);
}, },
/** /**
* *
@ -750,28 +635,24 @@ instance.web.DataSet = instance.web.CallbackEnabled.extend( /** @lends openerp.
* @param {Function} callback function to call with name_search result * @param {Function} callback function to call with name_search result
* @returns {$.Deferred} * @returns {$.Deferred}
*/ */
name_search: function (name, domain, operator, limit, callback) { name_search: function (name, domain, operator, limit) {
return this._model.call('name_search', { return this._model.call('name_search', {
name: name || '', name: name || '',
args: domain || false, args: domain || false,
operator: operator || 'ilike', operator: operator || 'ilike',
context: this._model.context(), context: this._model.context(),
limit: limit || 0 limit: limit || 0
}).then(callback); });
}, },
/** /**
* @param name * @param name
* @param callback
*/ */
name_create: function(name, callback) { name_create: function(name) {
return this._model.call('name_create', return this._model.call('name_create', [name], {context: this._model.context()});
[name], {context: this._model.context()})
.then(callback);
}, },
exec_workflow: function (id, signal, callback) { exec_workflow: function (id, signal) {
return this._model.exec_workflow(id, signal) return this._model.exec_workflow(id, signal)
.pipe(function (result) { return { result: result }; }) .pipe(function (result) { return { result: result }; });
.then(callback);
}, },
get_context: function(request_context) { get_context: function(request_context) {
return this._model.context(request_context); return this._model.context(request_context);
@ -824,6 +705,7 @@ instance.web.DataSet = instance.web.CallbackEnabled.extend( /** @lends openerp.
}); });
}, },
}); });
instance.web.DataSetStatic = instance.web.DataSet.extend({ instance.web.DataSetStatic = instance.web.DataSet.extend({
init: function(parent, model, context, ids) { init: function(parent, model, context, ids) {
this._super(parent, model, context); this._super(parent, model, context);
@ -854,7 +736,8 @@ instance.web.DataSetStatic = instance.web.DataSet.extend({
this.set_ids(_.without.apply(null, [this.ids].concat(ids))); this.set_ids(_.without.apply(null, [this.ids].concat(ids)));
} }
}); });
instance.web.DataSetSearch = instance.web.DataSet.extend(/** @lends openerp.web.DataSetSearch */{
instance.web.DataSetSearch = instance.web.DataSet.extend({
/** /**
* @constructs instance.web.DataSetSearch * @constructs instance.web.DataSetSearch
* @extends instance.web.DataSet * @extends instance.web.DataSet
@ -904,7 +787,7 @@ instance.web.DataSetSearch = instance.web.DataSet.extend(/** @lends openerp.web
}, },
unlink: function(ids, callback, error_callback) { unlink: function(ids, callback, error_callback) {
var self = this; var self = this;
return this._super(ids, function(result) { return this._super(ids).then(function(result) {
self.ids = _(self.ids).difference(ids); self.ids = _(self.ids).difference(ids);
if (self._length) { if (self._length) {
self._length -= 1; self._length -= 1;
@ -913,9 +796,7 @@ instance.web.DataSetSearch = instance.web.DataSet.extend(/** @lends openerp.web
self.index = self.index <= self.ids.length - 1 ? self.index = self.index <= self.ids.length - 1 ?
self.index : (self.ids.length > 0 ? self.ids.length -1 : 0); self.index : (self.ids.length > 0 ? self.ids.length -1 : 0);
} }
if (callback) });
callback(result);
}, error_callback);
}, },
size: function () { size: function () {
if (this._length !== undefined) { if (this._length !== undefined) {
@ -924,6 +805,7 @@ instance.web.DataSetSearch = instance.web.DataSet.extend(/** @lends openerp.web
return this._super(); return this._super();
} }
}); });
instance.web.BufferedDataSet = instance.web.DataSetStatic.extend({ instance.web.BufferedDataSet = instance.web.DataSetStatic.extend({
virtual_id_prefix: "one2many_v_id_", virtual_id_prefix: "one2many_v_id_",
debug_mode: true, debug_mode: true,
@ -938,16 +820,14 @@ instance.web.BufferedDataSet = instance.web.DataSetStatic.extend({
on_default_get: function(res) { on_default_get: function(res) {
this.last_default_get = res; this.last_default_get = res;
}, },
create: function(data, callback, error_callback) { create: function(data) {
var cached = {id:_.uniqueId(this.virtual_id_prefix), values: data, var cached = {id:_.uniqueId(this.virtual_id_prefix), values: data,
defaults: this.last_default_get}; defaults: this.last_default_get};
this.to_create.push(_.extend(_.clone(cached), {values: _.clone(cached.values)})); this.to_create.push(_.extend(_.clone(cached), {values: _.clone(cached.values)}));
this.cache.push(cached); this.cache.push(cached);
var prom = $.Deferred().then(callback); return $.Deferred().resolve(cached.id).promise();
prom.resolve({result: cached.id});
return prom.promise();
}, },
write: function (id, data, options, callback) { write: function (id, data, options) {
var self = this; var self = this;
var record = _.detect(this.to_create, function(x) {return x.id === id;}); var record = _.detect(this.to_create, function(x) {return x.id === id;});
record = record || _.detect(this.to_write, function(x) {return x.id === id;}); record = record || _.detect(this.to_write, function(x) {return x.id === id;});
@ -973,9 +853,7 @@ instance.web.BufferedDataSet = instance.web.DataSetStatic.extend({
$.extend(cached.values, record.values); $.extend(cached.values, record.values);
if (dirty) if (dirty)
this.on_change(); this.on_change();
var to_return = $.Deferred().then(callback); return $.Deferred().resolve(true).promise();
to_return.resolve({result: true});
return to_return.promise();
}, },
unlink: function(ids, callback, error_callback) { unlink: function(ids, callback, error_callback) {
var self = this; var self = this;
@ -999,7 +877,8 @@ instance.web.BufferedDataSet = instance.web.DataSetStatic.extend({
this.cache = []; this.cache = [];
this.delete_all = false; this.delete_all = false;
}, },
on_change: function() {}, on_change: function() {
},
read_ids: function (ids, fields, options) { read_ids: function (ids, fields, options) {
var self = this; var self = this;
var to_get = []; var to_get = [];
@ -1071,7 +950,7 @@ instance.web.BufferedDataSet = instance.web.DataSetStatic.extend({
} }
return completion.promise(); return completion.promise();
}, },
call_button: function (method, args, callback, error_callback) { call_button: function (method, args) {
var id = args[0][0], index; var id = args[0][0], index;
for(var i=0, len=this.cache.length; i<len; ++i) { for(var i=0, len=this.cache.length; i<len; ++i) {
var record = this.cache[i]; var record = this.cache[i];
@ -1082,7 +961,7 @@ instance.web.BufferedDataSet = instance.web.DataSetStatic.extend({
break; break;
} }
} }
return this._super(method, args, callback, error_callback); return this._super(method, args);
}, },
alter_ids: function(n_ids) { alter_ids: function(n_ids) {
this._super(n_ids); this._super(n_ids);
@ -1114,23 +993,23 @@ instance.web.ProxyDataSet = instance.web.DataSetSearch.extend({
return this._super.apply(this, arguments); return this._super.apply(this, arguments);
} }
}, },
create: function(data, callback, error_callback) { create: function(data) {
if (this.create_function) { if (this.create_function) {
return this.create_function(data, this._super).then(callback, error_callback); return this.create_function(data, this._super);
} else { } else {
return this._super.apply(this, arguments); return this._super.apply(this, arguments);
} }
}, },
write: function (id, data, options, callback, error_callback) { write: function (id, data, options) {
if (this.write_function) { if (this.write_function) {
return this.write_function(id, data, options, this._super).then(callback, error_callback); return this.write_function(id, data, options, this._super);
} else { } else {
return this._super.apply(this, arguments); return this._super.apply(this, arguments);
} }
}, },
unlink: function(ids, callback, error_callback) { unlink: function(ids) {
if (this.unlink_function) { if (this.unlink_function) {
return this.unlink_function(ids, this._super).then(callback, error_callback); return this.unlink_function(ids, this._super);
} else { } else {
return this._super.apply(this, arguments); return this._super.apply(this, arguments);
} }
@ -1183,7 +1062,7 @@ instance.web.CompoundDomain = instance.web.Class.extend({
} }
}); });
instance.web.DropMisordered = instance.web.Class.extend(/** @lends openerp.web.DropMisordered# */{ instance.web.DropMisordered = instance.web.Class.extend({
/** /**
* @constructs instance.web.DropMisordered * @constructs instance.web.DropMisordered
* @extends instance.web.Class * @extends instance.web.Class

View File

@ -138,6 +138,9 @@ instance.web.format_value = function (value, descriptor, value_if_empty) {
return value[1]; return value[1];
case 'one2many': case 'one2many':
case 'many2many': case 'many2many':
if (typeof value === 'string') {
return value;
}
return _.str.sprintf(_t("(%d records)"), value.length); return _.str.sprintf(_t("(%d records)"), value.length);
case 'datetime': case 'datetime':
if (typeof(value) == "string") if (typeof(value) == "string")

View File

@ -1493,16 +1493,13 @@ instance.web.search.ManyToOneField = instance.web.search.CharField.extend({
if (value.length === 2 && _.isString(value[1])) { if (value.length === 2 && _.isString(value[1])) {
return $.when(facet_from(this, value)); return $.when(facet_from(this, value));
} }
if (value.length > 1) { assert(value.length <= 1,
// more than one search_default m2o id? Should we OR them? _("M2O search fields do not currently handle multiple default values"));
throw new Error(
_("M2O search fields do not currently handle multiple default values"));
}
// there are many cases of {search_default_$m2ofield: [id]}, need // there are many cases of {search_default_$m2ofield: [id]}, need
// to handle this as if it were a single value. // to handle this as if it were a single value.
value = value[0]; value = value[0];
} }
return this.model.call('name_get', [value], {}).pipe(function (names) { return this.model.call('name_get', [value]).pipe(function (names) {
if (_(names).isEmpty()) { return null; } if (_(names).isEmpty()) { return null; }
return facet_from(self, names[0]); return facet_from(self, names[0]);
}) })

View File

@ -13,6 +13,7 @@ instance.web.form = {};
* Properties: * Properties:
* - display_invalid_fields : if true, all fields where is_valid() return true should * - display_invalid_fields : if true, all fields where is_valid() return true should
* be displayed as invalid. * be displayed as invalid.
* - actual_mode : the current mode of the field manager. Can be "view", "edit" or "create".
* Events: * Events:
* - view_content_has_changed : when the values of the fields have changed. When * - view_content_has_changed : when the values of the fields have changed. When
* this event is triggered all fields should reprocess their modifiers. * this event is triggered all fields should reprocess their modifiers.
@ -30,15 +31,19 @@ instance.web.form.FieldManagerMixin = {
* Must return the asked field as in fields_get. * Must return the asked field as in fields_get.
*/ */
get_field: function(field_name) {}, get_field: function(field_name) {},
/**
* Returns true when the view is in create mode.
*/
is_create_mode: function() {},
/** /**
* Returns the current value of a field present in the view. See the get_value() method * Returns the current value of a field present in the view. See the get_value() method
* method in FieldInterface for further information. * method in FieldInterface for further information.
*/ */
get_field_value: function(field_name) {}, get_field_value: function(field_name) {},
/**
Gives new values for the fields contained in the view. The new values could not be setted
right after the call to this method. Setting new values can trigger on_changes.
@param (dict) values A dictonnary with key = field name and value = new value.
@return (Deferred) Is resolved after all the values are setted.
*/
set_values: function(values) {},
}; };
instance.web.views.add('form', 'instance.web.FormView'); instance.web.views.add('form', 'instance.web.FormView');
@ -83,6 +88,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
this.default_focus_button = null; this.default_focus_button = null;
this.fields_registry = instance.web.form.widgets; this.fields_registry = instance.web.form.widgets;
this.tags_registry = instance.web.form.tags; this.tags_registry = instance.web.form.tags;
this.widgets_registry = instance.web.form.custom_widgets;
this.has_been_loaded = $.Deferred(); this.has_been_loaded = $.Deferred();
this.translatable_fields = []; this.translatable_fields = [];
_.defaults(this.options, { _.defaults(this.options, {
@ -134,6 +140,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
this.rendering_engine.set_fields_registry(this.fields_registry); this.rendering_engine.set_fields_registry(this.fields_registry);
this.rendering_engine.set_tags_registry(this.tags_registry); this.rendering_engine.set_tags_registry(this.tags_registry);
this.rendering_engine.set_widgets_registry(this.widgets_registry);
if (!this.extract_qweb_template(data)) { if (!this.extract_qweb_template(data)) {
this.rendering_engine.set_fields_view(data); this.rendering_engine.set_fields_view(data);
var $dest = this.$el.hasClass("oe_form_container") ? this.$el : this.$el.find('.oe_form_container'); var $dest = this.$el.hasClass("oe_form_container") ? this.$el : this.$el.find('.oe_form_container');
@ -180,6 +187,14 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
instance.web.bus.trigger('click', e); instance.web.bus.trigger('click', e);
} }
}); });
//bounce effect on red button when click on statusbar.
this.$el.find(".oe_form_field_status:not(.oe_form_status_clickable)").on('click', function (e) {
if((self.get("actual_mode") == "view")) {
var $button = self.$el.find(".oe_highlight:not(.oe_form_invisible)").css({'float':'left','clear':'none'});
$button.effect('bounce', {distance:18, times: 5}, 150);
e.stopPropagation();
}
});
return $.when(); return $.when();
}, },
@ -588,24 +603,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
on_processed_onchange: function(result, processed) { on_processed_onchange: function(result, processed) {
try { try {
if (result.value) { if (result.value) {
for (var f in result.value) { this._internal_set_values(result.value, processed);
if (!result.value.hasOwnProperty(f)) { continue; }
var field = this.fields[f];
// If field is not defined in the view, just ignore it
if (field) {
var value_ = result.value[f];
if (field.get_value() != value_) {
field._inhibit_on_change_flag = true;
field.set_value(value_);
field._inhibit_on_change_flag = false;
field._dirty_flag = true;
if (!_.contains(processed, field.name)) {
this.do_onchange(field, processed);
}
}
}
}
this.on_form_changed();
} }
if (!_.isEmpty(result.warning)) { if (!_.isEmpty(result.warning)) {
instance.web.dialog($(QWeb.render("CrashManager.warning", result.warning)), { instance.web.dialog($(QWeb.render("CrashManager.warning", result.warning)), {
@ -636,6 +634,33 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
return $.Deferred().reject(); return $.Deferred().reject();
} }
}, },
_internal_set_values: function(values, exclude) {
exclude = exclude || [];
for (var f in values) {
if (!values.hasOwnProperty(f)) { continue; }
var field = this.fields[f];
// If field is not defined in the view, just ignore it
if (field) {
var value_ = values[f];
if (field.get_value() != value_) {
field._inhibit_on_change_flag = true;
field.set_value(value_);
field._inhibit_on_change_flag = false;
field._dirty_flag = true;
if (!_.contains(exclude, field.name)) {
this.do_onchange(field, exclude);
}
}
}
}
this.on_form_changed();
},
set_values: function(values) {
var self = this;
return this.on_change_mutex.exec(function() {
self._internal_set_values(values);
});
},
/** /**
* Ask the view to switch to view mode if possible. The view may not do it * Ask the view to switch to view mode if possible. The view may not do it
* if the current record is not yet saved. It will then stay in create mode. * if the current record is not yet saved. It will then stay in create mode.
@ -676,17 +701,11 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
self.$buttons.find('.oe_form_buttons_edit').hide(); self.$buttons.find('.oe_form_buttons_edit').hide();
self.$buttons.find('.oe_form_buttons_view').show(); self.$buttons.find('.oe_form_buttons_view').show();
self.$sidebar.show(); self.$sidebar.show();
_.each(this.fields,function(field){
field.set({"force_readonly": true});
});
} else { } else {
self.$el.removeClass('oe_form_readonly').addClass('oe_form_editable'); self.$el.removeClass('oe_form_readonly').addClass('oe_form_editable');
self.$buttons.find('.oe_form_buttons_edit').show(); self.$buttons.find('.oe_form_buttons_edit').show();
self.$buttons.find('.oe_form_buttons_view').hide(); self.$buttons.find('.oe_form_buttons_view').hide();
self.$sidebar.hide(); self.$sidebar.hide();
_.each(this.fields,function(field){
field.set({"force_readonly": false});
});
this.autofocus(); this.autofocus();
} }
}, },
@ -862,7 +881,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
* @param {Object} r result of the write function. * @param {Object} r result of the write function.
*/ */
on_saved: function(r) { on_saved: function(r) {
if (!r.result) { if (!r) {
// should not happen in the server, but may happen for internal purpose // should not happen in the server, but may happen for internal purpose
return $.Deferred().reject(); return $.Deferred().reject();
} else { } else {
@ -885,11 +904,11 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
* at the beginning of the dataset instead of the end * at the beginning of the dataset instead of the end
*/ */
on_created: function(r, prepend_on_create) { on_created: function(r, prepend_on_create) {
if (!r.result) { if (!r) {
// should not happen in the server, but may happen for internal purpose // should not happen in the server, but may happen for internal purpose
return $.Deferred().reject(); return $.Deferred().reject();
} else { } else {
this.datarecord.id = r.result; this.datarecord.id = r;
if (!prepend_on_create) { if (!prepend_on_create) {
this.dataset.alter_ids(this.dataset.ids.concat([this.datarecord.id])); this.dataset.alter_ids(this.dataset.ids.concat([this.datarecord.id]));
this.dataset.index = this.dataset.ids.length - 1; this.dataset.index = this.dataset.ids.length - 1;
@ -996,7 +1015,8 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
|| field.get('invisible') || field.get('invisible')
|| field.get("readonly") || field.get("readonly")
|| field.field.type === 'one2many' || field.field.type === 'one2many'
|| field.field.type === 'many2many') { || field.field.type === 'many2many'
|| field.field.type === 'binary') {
return false; return false;
} }
var displayed = value; var displayed = value;
@ -1086,9 +1106,6 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
get_field: function(field_name) { get_field: function(field_name) {
return this.fields_view.fields[field_name]; return this.fields_view.fields[field_name];
}, },
is_create_mode: function() {
return this.get("actual_mode") === "create";
},
get_field_value: function(field_name) { get_field_value: function(field_name) {
return this.fields[field_name].get_value(); return this.fields[field_name].get_value();
}, },
@ -1125,6 +1142,9 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt
set_fields_registry: function(fields_registry) { set_fields_registry: function(fields_registry) {
this.fields_registry = fields_registry; this.fields_registry = fields_registry;
}, },
set_widgets_registry: function(widgets_registry) {
this.widgets_registry = widgets_registry;
},
// Backward compatibility tools, current default version: v6.1 // Backward compatibility tools, current default version: v6.1
process_version: function() { process_version: function() {
if (this.version < 7.0) { if (this.version < 7.0) {
@ -1149,6 +1169,7 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt
this.fields_to_init = []; this.fields_to_init = [];
this.tags_to_init = []; this.tags_to_init = [];
this.widgets_to_init = [];
this.labels = {}; this.labels = {};
this.process(this.$form); this.process(this.$form);
@ -1178,6 +1199,12 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt
var w = new (obj)(self.view, instance.web.xml_to_json($elem[0])); var w = new (obj)(self.view, instance.web.xml_to_json($elem[0]));
w.replace($elem); w.replace($elem);
}); });
_.each(this.widgets_to_init, function($elem) {
var widget_type = $elem.attr("type");
var obj = self.widgets_registry.get_object(widget_type);
var w = new (obj)(self.view, instance.web.xml_to_json($elem[0]));
w.replace($elem);
});
// TODO: return a deferred // TODO: return a deferred
}, },
render_element: function(template /* dictionaries */) { render_element: function(template /* dictionaries */) {
@ -1220,6 +1247,10 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt
return $tag; return $tag;
} }
}, },
process_widget: function($widget) {
this.widgets_to_init.push($widget);
return $widget;
},
process_sheet: function($sheet) { process_sheet: function($sheet) {
var $new_sheet = this.render_element('FormRenderingSheet', $sheet.getAttributes()); var $new_sheet = this.render_element('FormRenderingSheet', $sheet.getAttributes());
this.handle_common_properties($new_sheet, $sheet); this.handle_common_properties($new_sheet, $sheet);
@ -1646,22 +1677,42 @@ instance.web.form.InvisibilityChanger = instance.web.Class.extend(instance.web.P
}, },
}); });
/**
Base class for all fields, custom widgets and buttons to be displayed in the form view.
Properties:
- effective_readonly: when it is true, the widget is displayed as readonly. Vary depending
the values of the "readonly" property and the "mode" property on the field manager.
*/
instance.web.form.FormWidget = instance.web.Widget.extend(instance.web.form.InvisibilityChangerMixin, { instance.web.form.FormWidget = instance.web.Widget.extend(instance.web.form.InvisibilityChangerMixin, {
/** /**
* @constructs instance.web.form.FormWidget * @constructs instance.web.form.FormWidget
* @extends instance.web.Widget * @extends instance.web.Widget
* *
* @param view * @param field_manager
* @param node * @param node
*/ */
init: function(view, node) { init: function(field_manager, node) {
this._super(view); this._super(field_manager);
this.view = view; this.view = field_manager;
this.field_manager = field_manager;
this.node = node; this.node = node;
this.modifiers = JSON.parse(this.node.attrs.modifiers || '{}'); this.modifiers = JSON.parse(this.node.attrs.modifiers || '{}');
instance.web.form.InvisibilityChangerMixin.init.call(this, view, this.modifiers.invisible); instance.web.form.InvisibilityChangerMixin.init.call(this, this.field_manager, this.modifiers.invisible);
this.view.on("view_content_has_changed", this, this.process_modifiers); this.field_manager.on("view_content_has_changed", this, this.process_modifiers);
this.set({required: this.modifiers['required'] === true});
// some events to make the property "effective_readonly" sync automatically with "readonly" and
// "mode" on field_manager
var self = this;
this.set({"readonly": this.modifiers['readonly'] === true});
var test_effective_readonly = function() {
self.set({"effective_readonly": self.get("readonly") || self.field_manager.get("actual_mode") === "view"});
};
this.on("change:readonly", this, test_effective_readonly);
this.field_manager.on("change:actual_mode", this, test_effective_readonly);
test_effective_readonly.call(this);
}, },
renderElement: function() { renderElement: function() {
this._super(); this._super();
@ -1771,8 +1822,8 @@ instance.web.form.FormWidget = instance.web.Widget.extend(instance.web.form.Invi
instance.web.form.WidgetButton = instance.web.form.FormWidget.extend({ instance.web.form.WidgetButton = instance.web.form.FormWidget.extend({
template: 'WidgetButton', template: 'WidgetButton',
init: function(view, node) { init: function(field_manager, node) {
this._super(view, node); this._super(field_manager, node);
this.force_disabled = false; this.force_disabled = false;
this.string = (this.node.attrs.string || '').replace(/_/g, ''); this.string = (this.node.attrs.string || '').replace(/_/g, '');
if (JSON.parse(this.node.attrs.default_focus || "0")) { if (JSON.parse(this.node.attrs.default_focus || "0")) {
@ -1857,10 +1908,6 @@ instance.web.form.WidgetButton = instance.web.form.FormWidget.extend({
/** /**
* Interface to be implemented by fields. * Interface to be implemented by fields.
* *
* Properties:
* - readonly: boolean. If set to true the field should appear in readonly mode.
* - force_readonly: boolean, When it is true, the field should always appear
* in read only mode, no matter what the value of the "readonly" property can be.
* Events: * Events:
* - changed_value: triggered when the value of the field has changed. This can be due * - changed_value: triggered when the value of the field has changed. This can be due
* to a user interaction or a call to set_value(). * to a user interaction or a call to set_value().
@ -1937,8 +1984,6 @@ instance.web.form.FieldInterface = {
* Abstract class for classes implementing FieldInterface. * Abstract class for classes implementing FieldInterface.
* *
* Properties: * Properties:
* - effective_readonly: when it is true, the widget is displayed as readonly. Vary depending
* the values of the "readonly" property and the "force_readonly" property on the field manager.
* - value: useful property to hold the value of the field. By default, set_value() and get_value() * - value: useful property to hold the value of the field. By default, set_value() and get_value()
* set and retrieve the value property. Changing the value property also triggers automatically * set and retrieve the value property. Changing the value property also triggers automatically
* a 'changed_value' event that inform the view to trigger on_changes. * a 'changed_value' event that inform the view to trigger on_changes.
@ -1955,25 +2000,13 @@ instance.web.form.AbstractField = instance.web.form.FormWidget.extend(instance.w
init: function(field_manager, node) { init: function(field_manager, node) {
var self = this var self = this
this._super(field_manager, node); this._super(field_manager, node);
this.field_manager = field_manager;
this.name = this.node.attrs.name; this.name = this.node.attrs.name;
this.field = this.field_manager.get_field(this.name); this.field = this.field_manager.get_field(this.name);
this.widget = this.node.attrs.widget; this.widget = this.node.attrs.widget;
this.string = this.node.attrs.string || this.field.string || this.name; this.string = this.node.attrs.string || this.field.string || this.name;
this.options = JSON.parse(this.node.attrs.options || '{}'); this.options = JSON.parse(this.node.attrs.options || '{}');
this.set({'value': false}); this.set({'value': false});
this.set({required: this.modifiers['required'] === true});
// some events to make the property "effective_readonly" sync automatically with "readonly" and
// "force_readonly"
this.set({"readonly": this.modifiers['readonly'] === true});
this.set({"force_readonly": false});
var test_effective_readonly = function() {
self.set({"effective_readonly": self.get("readonly") || !!self.get("force_readonly")});
};
this.on("change:readonly", this, test_effective_readonly);
this.on("change:force_readonly", this, test_effective_readonly);
test_effective_readonly.call(this);
this.on("change:value", this, function() { this.on("change:value", this, function() {
this.trigger('changed_value'); this.trigger('changed_value');
this._check_css_flags(); this._check_css_flags();
@ -2030,7 +2063,7 @@ instance.web.form.AbstractField = instance.web.form.FormWidget.extend(instance.w
}, },
_check_css_flags: function() { _check_css_flags: function() {
if (this.field.translate) { if (this.field.translate) {
this.$el.find('.oe_field_translate').toggle(!this.field_manager.is_create_mode()); this.$el.find('.oe_field_translate').toggle(this.field_manager.get('actual_mode') !== "create");
} }
if (!this.disable_utility_classes) { if (!this.disable_utility_classes) {
if (this.field_manager.get('display_invalid_fields')) { if (this.field_manager.get('display_invalid_fields')) {
@ -2054,10 +2087,10 @@ instance.web.form.AbstractField = instance.web.form.FormWidget.extend(instance.w
}); });
/** /**
* A mixin to apply on any field that has to completely re-render when its readonly state * A mixin to apply on any FormWidget that has to completely re-render when its readonly state
* switch. * switch.
*/ */
instance.web.form.ReinitializeFieldMixin = { instance.web.form.ReinitializeWidgetMixin = {
/** /**
* Default implementation of start(), use it or call explicitly initialize_field(). * Default implementation of start(), use it or call explicitly initialize_field().
*/ */
@ -2070,10 +2103,8 @@ instance.web.form.ReinitializeFieldMixin = {
this.destroy_content(); this.destroy_content();
this.renderElement(); this.renderElement();
this.initialize_content(); this.initialize_content();
this.render_value();
}); });
this.initialize_content(); this.initialize_content();
this.render_value();
}, },
/** /**
* Called to destroy anything that could have been created previously, called before a * Called to destroy anything that could have been created previously, called before a
@ -2084,11 +2115,25 @@ instance.web.form.ReinitializeFieldMixin = {
* Called to initialize the content. * Called to initialize the content.
*/ */
initialize_content: function() {}, initialize_content: function() {},
};
/**
* A mixin to apply on any field that has to completely re-render when its readonly state
* switch.
*/
instance.web.form.ReinitializeFieldMixin = _.extend({}, instance.web.form.ReinitializeWidgetMixin, {
initialize_field: function() {
instance.web.form.ReinitializeWidgetMixin.initialize_field.call(this);
this.on("change:effective_readonly", this, function() {
this.render_value();
});
this.render_value();
},
/** /**
* Called to render the value. Should also be explicitly called at the end of a set_value(). * Called to render the value. Should also be explicitly called at the end of a set_value().
*/ */
render_value: function() {}, render_value: function() {},
}; });
instance.web.form.FieldChar = instance.web.form.AbstractField.extend(instance.web.form.ReinitializeFieldMixin, { instance.web.form.FieldChar = instance.web.form.AbstractField.extend(instance.web.form.ReinitializeFieldMixin, {
template: 'FieldChar', template: 'FieldChar',
@ -2670,7 +2715,7 @@ instance.web.form.CompletionFieldMixin = {
values.push({ values.push({
label: _t("Search More..."), label: _t("Search More..."),
action: function() { action: function() {
dataset.name_search(search_val, self.build_domain(), 'ilike', false, function(data) { dataset.name_search(search_val, self.build_domain(), 'ilike', false).then(function(data) {
self._search_create_popup("search", data); self._search_create_popup("search", data);
}); });
}, },
@ -2711,7 +2756,7 @@ instance.web.form.CompletionFieldMixin = {
}; };
if (self.options.quick_create === undefined || self.options.quick_create) { if (self.options.quick_create === undefined || self.options.quick_create) {
new instance.web.DataSet(this, this.field.relation, self.build_context()) new instance.web.DataSet(this, this.field.relation, self.build_context())
.name_create(name, function(data) { .name_create(name).then(function(data) {
self.add_id(data[0]); self.add_id(data[0]);
}).fail(function(error, event) { }).fail(function(error, event) {
event.preventDefault(); event.preventDefault();
@ -2996,7 +3041,7 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc
} }
if (! no_recurse) { if (! no_recurse) {
var dataset = new instance.web.DataSetStatic(this, this.field.relation, self.build_context()); var dataset = new instance.web.DataSetStatic(this, this.field.relation, self.build_context());
dataset.name_get([self.get("value")], function(data) { dataset.name_get([self.get("value")]).then(function(data) {
self.display_value["" + self.get("value")] = data[0][1]; self.display_value["" + self.get("value")] = data[0][1];
self.render_value(true); self.render_value(true);
}); });
@ -3439,7 +3484,7 @@ instance.web.form.One2ManyViewManager = instance.web.ViewManager.extend({
title: _t("Open: ") + self.o2m.string, title: _t("Open: ") + self.o2m.string,
create_function: function(data) { create_function: function(data) {
return self.o2m.dataset.create(data).then(function(r) { return self.o2m.dataset.create(data).then(function(r) {
self.o2m.dataset.set_ids(self.o2m.dataset.ids.concat([r.result])); self.o2m.dataset.set_ids(self.o2m.dataset.ids.concat([r]));
self.o2m.dataset.on_change(); self.o2m.dataset.on_change();
}); });
}, },
@ -3529,7 +3574,7 @@ instance.web.form.One2ManyListView = instance.web.ListView.extend({
alternative_form_view: self.o2m.field.views ? self.o2m.field.views["form"] : undefined, alternative_form_view: self.o2m.field.views ? self.o2m.field.views["form"] : undefined,
create_function: function(data, callback, error_callback) { create_function: function(data, callback, error_callback) {
return self.o2m.dataset.create(data).then(function(r) { return self.o2m.dataset.create(data).then(function(r) {
self.o2m.dataset.set_ids(self.o2m.dataset.ids.concat([r.result])); self.o2m.dataset.set_ids(self.o2m.dataset.ids.concat([r]));
self.o2m.dataset.on_change(); self.o2m.dataset.on_change();
}).then(callback, error_callback); }).then(callback, error_callback);
}, },
@ -3554,7 +3599,7 @@ instance.web.form.One2ManyListView = instance.web.ListView.extend({
pop.show_element(self.o2m.field.relation, id, self.o2m.build_context(), { pop.show_element(self.o2m.field.relation, id, self.o2m.build_context(), {
title: _t("Open: ") + self.o2m.string, title: _t("Open: ") + self.o2m.string,
write_function: function(id, data) { write_function: function(id, data) {
return self.o2m.dataset.write(id, data, {}, function(r) { return self.o2m.dataset.write(id, data, {}).then(function() {
self.o2m.reload_current_view(); self.o2m.reload_current_view();
}); });
}, },
@ -4507,10 +4552,10 @@ instance.web.form.FieldReference = instance.web.form.AbstractField.extend(instan
initialize_content: function() { initialize_content: function() {
var self = this; var self = this;
this.selection = new instance.web.form.FieldSelection(this, { attrs: { this.selection = new instance.web.form.FieldSelection(this, { attrs: {
name: 'selection' name: 'selection',
modifiers: JSON.stringify({readonly: this.get('effective_readonly')}),
}}); }});
this.selection.view = this.view; this.selection.view = this.view;
this.selection.set({force_readonly: this.get('effective_readonly')});
this.selection.on("change:value", this, this.on_selection_changed); this.selection.on("change:value", this, this.on_selection_changed);
this.selection.setElement(this.$(".oe_form_view_reference_selection")); this.selection.setElement(this.$(".oe_form_view_reference_selection"));
this.selection.renderElement(); this.selection.renderElement();
@ -4520,10 +4565,10 @@ instance.web.form.FieldReference = instance.web.form.AbstractField.extend(instan
.on('blurred', null, function () {self.trigger('blurred')}); .on('blurred', null, function () {self.trigger('blurred')});
this.m2o = new instance.web.form.FieldMany2One(this, { attrs: { this.m2o = new instance.web.form.FieldMany2One(this, { attrs: {
name: 'm2o' name: 'm2o',
modifiers: JSON.stringify({readonly: this.get('effective_readonly')}),
}}); }});
this.m2o.view = this.view; this.m2o.view = this.view;
this.m2o.set({force_readonly: this.get("effective_readonly")});
this.m2o.on("change:value", this, this.data_changed); this.m2o.on("change:value", this, this.data_changed);
this.m2o.setElement(this.$(".oe_form_view_reference_m2o")); this.m2o.setElement(this.$(".oe_form_view_reference_m2o"));
this.m2o.renderElement(); this.m2o.renderElement();
@ -4928,6 +4973,9 @@ instance.web.form.tags = new instance.web.Registry({
'button' : 'instance.web.form.WidgetButton', 'button' : 'instance.web.form.WidgetButton',
}); });
instance.web.form.custom_widgets = new instance.web.Registry({
});
}; };
// vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax: // vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax:

View File

@ -989,7 +989,7 @@ instance.web.ListView.List = instance.web.Class.extend( /** @lends instance.web.
// to get a correctly displayable value in the field // to get a correctly displayable value in the field
var model = ref_match[1], var model = ref_match[1],
id = parseInt(ref_match[2], 10); id = parseInt(ref_match[2], 10);
new instance.web.DataSet(this.view, model).name_get([id], function(names) { new instance.web.DataSet(this.view, model).name_get([id]).then(function(names) {
if (!names.length) { return; } if (!names.length) { return; }
record.set(column.id, names[0][1]); record.set(column.id, names[0][1]);
}); });
@ -1005,11 +1005,33 @@ instance.web.ListView.List = instance.web.Class.extend( /** @lends instance.web.
// and let the various registered events handle refreshing the // and let the various registered events handle refreshing the
// row // row
new instance.web.DataSet(this.view, column.relation) new instance.web.DataSet(this.view, column.relation)
.name_get([value], function (names) { .name_get([value]).then(function (names) {
if (!names.length) { return; } if (!names.length) { return; }
record.set(column.id, names[0]); record.set(column.id, names[0]);
}); });
} }
} else if (column.type === 'many2many') {
value = record.get(column.id);
// non-resolved (string) m2m values are arrays
if (value instanceof Array && !_.isEmpty(value)) {
var ids;
// they come in two shapes:
if (value[0] instanceof Array) {
var command = value[0];
// 1. an array of m2m commands (usually (6, false, ids))
if (command[0] !== 6) {
throw new Error(_t("Unknown m2m command ") + command[0]);
}
ids = command[2];
} else {
// 2. an array of ids
ids = value;
}
new instance.web.Model(column.relation)
.call('name_get', [ids]).then(function (names) {
record.set(column.id, _(names).pluck(1).join(', '));
})
}
} }
return column.format(record.toForm().data, { return column.format(record.toForm().data, {
model: this.dataset.model, model: this.dataset.model,
@ -1052,11 +1074,7 @@ instance.web.ListView.List = instance.web.Class.extend( /** @lends instance.web.
var row = cells.join(''); var row = cells.join('');
this.$current this.$current
.children('tr:not([data-id])').remove().end() .children('tr:not([data-id])').remove().end()
.append(new Array(count - this.records.length + 1).join(row)).click( .append(new Array(count - this.records.length + 1).join(row));
function() {
$('button.oe_list_add').effect('bounce', {distance: 18, times: 5}, 150);
}
);
}, },
/** /**
* Gets the ids of all currently selected records, if any * Gets the ids of all currently selected records, if any
@ -2056,16 +2074,20 @@ instance.web.list.Button = instance.web.list.Column.extend({
* Return an actual ``<button>`` tag * Return an actual ``<button>`` tag
*/ */
format: function (row_data, options) { format: function (row_data, options) {
return _.template('<button type="button" title="<%-title%>" <%=additional_attributes%> >' + options = options || {};
'<img src="<%-prefix%>/web/static/src/img/icons/<%-icon%>.png" alt="<%-alt%>"/>' + var attrs = {};
'</button>', { if (options.process_modifiers !== false) {
title: this.string || '', attrs = this.modifiers_for(row_data);
additional_attributes: isNaN(row_data["id"].value) && instance.web.BufferedDataSet.virtual_id_regex.test(row_data["id"].value) ? }
'disabled="disabled" class="oe_list_button_disabled"' : '', if (attrs.invisible) { return ''; }
prefix: instance.session.prefix,
icon: this.icon, return QWeb.render('ListView.row.button', {
alt: this.string || '' widget: this,
}); prefix: instance.session.prefix,
disabled: attrs.readonly
|| isNaN(row_data.id.value)
|| instance.web.BufferedDataSet.virtual_id_regex.test(row_data.id.value)
});
} }
}); });
instance.web.list.Boolean = instance.web.list.Column.extend({ instance.web.list.Boolean = instance.web.list.Column.extend({

View File

@ -930,12 +930,10 @@ instance.web.Sidebar = instance.web.Widget.extend({
var view = this.getParent(); var view = this.getParent();
this.sections = [ this.sections = [
{ 'name' : 'print', 'label' : _t('Print'), }, { 'name' : 'print', 'label' : _t('Print'), },
{ 'name' : 'files', 'label' : _t('Attachment(s)'), },
{ 'name' : 'other', 'label' : _t('More'), } { 'name' : 'other', 'label' : _t('More'), }
]; ];
this.items = { this.items = {
'print' : [], 'print' : [],
'files' : [],
'other' : [] 'other' : []
}; };
this.fileupload_id = _.uniqueId('oe_fileupload'); this.fileupload_id = _.uniqueId('oe_fileupload');
@ -1217,11 +1215,11 @@ instance.web.View = instance.web.Widget.extend({
} }
} }
args.push(context); args.push(context);
return dataset.call_button(action_data.name, args, handler); return dataset.call_button(action_data.name, args).then(handler);
} else if (action_data.type=="action") { } else if (action_data.type=="action") {
return this.rpc('/web/action/load', { action_id: action_data.name, context: context, do_not_eval: true}, handler); return this.rpc('/web/action/load', { action_id: action_data.name, context: context, do_not_eval: true}, handler);
} else { } else {
return dataset.exec_workflow(record_id, action_data.name, handler); return dataset.exec_workflow(record_id, action_data.name).then(handler);
} }
}, },
/** /**

View File

@ -577,7 +577,7 @@
<tr> <tr>
<th t-foreach="fields_view" t-as="field" <th t-foreach="fields_view" t-as="field"
t-if="!field.attrs.modifiers.tree_invisible"> t-if="!field.attrs.modifiers.tree_invisible">
<t t-esc="fields[field.attrs.name].string" /> <t t-esc="field_value.attrs.string || fields[field.attrs.name].string" />
</th> </th>
</tr> </tr>
</thead> </thead>
@ -650,11 +650,9 @@
</table> </table>
<div t-name="ListView.buttons" class="oe_list_buttons"> <div t-name="ListView.buttons" class="oe_list_buttons">
<t t-if="!widget.no_leaf and widget.options.action_buttons !== false and widget.options.addable and widget.is_action_enabled('create')"> <t t-if="!widget.no_leaf and widget.options.action_buttons !== false and widget.options.addable and widget.is_action_enabled('create')">
<div name="oe_list_add_div"> <button type="button" class="oe_button oe_list_add oe_highlight">
<button type="button" class="oe_button oe_list_add oe_highlight"> <t t-esc="widget.options.addable"/>
<t t-esc="widget.options.addable"/> </button>
</button>
</div>
</t> </t>
</div> </div>
<t t-name="ListView.pager"> <t t-name="ListView.pager">
@ -695,7 +693,7 @@
</td> </td>
</tr> </tr>
<t t-extend="ListView.buttons"> <t t-extend="ListView.buttons">
<t t-jquery="div.oe_list_add_div" t-operation="after"> <t t-jquery="button.oe_list_add" t-operation="after">
<button class="oe_button oe_list_save oe_highlight" <button class="oe_button oe_list_save oe_highlight"
type="button">Save</button> type="button">Save</button>
<span class="oe_alternative"> <span class="oe_alternative">
@ -704,6 +702,11 @@
</span> </span>
</t> </t>
</t> </t>
<button t-name="ListView.row.button" type="button"
t-att-title="widget.string" t-att-disabled="disabled || undefined"
t-att-class="disabled ? 'oe_list_button_disabled' : undefined"
><img t-attf-src="#{prefix}/web/static/src/img/icons/#{widget.icon}.png"
t-att-alt="widget.string" /></button>
<t t-extend="ListView.row"> <t t-extend="ListView.row">
<!-- adds back padding to row being rendered after edition, if necessary <!-- adds back padding to row being rendered after edition, if necessary
(if not deletable add back padding), otherwise the row being added is (if not deletable add back padding), otherwise the row being added is

View File

@ -91,7 +91,7 @@ $(document).ready(function () {
ok(_.isEmpty(r.kwargs)); ok(_.isEmpty(r.kwargs));
}); });
}); });
t.test('name_get', function (openerp) { t.test('name_get').then(function (openerp) {
var ds = new openerp.web.DataSet({session: openerp.session}, 'mod'); var ds = new openerp.web.DataSet({session: openerp.session}, 'mod');
t.expect(ds.name_get([1, 2], null), function (r) { t.expect(ds.name_get([1, 2], null), function (r) {
strictEqual(r.method, 'name_get'); strictEqual(r.method, 'name_get');

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
"X-Poedit-Language: Czech\n" "X-Poedit-Language: Czech\n"
#. openerp-web #. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -15,8 +15,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
"Language: es\n" "Language: es\n"
#. openerp-web #. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11
@ -25,114 +25,114 @@ msgstr "Calendario"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:70 #: addons/web_calendar/static/src/js/calendar.js:70
msgid "Filter" msgid "Filter"
msgstr "" msgstr "Filtro"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:144 #: addons/web_calendar/static/src/js/calendar.js:144
msgid "Today" msgid "Today"
msgstr "" msgstr "Hoy"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:145 #: addons/web_calendar/static/src/js/calendar.js:145
msgid "Day" msgid "Day"
msgstr "" msgstr "Día"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:146 #: addons/web_calendar/static/src/js/calendar.js:146
msgid "Week" msgid "Week"
msgstr "" msgstr "Semana"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:147 #: addons/web_calendar/static/src/js/calendar.js:147
msgid "Month" msgid "Month"
msgstr "" msgstr "Mes"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:148 #: addons/web_calendar/static/src/js/calendar.js:148
msgid "New event" msgid "New event"
msgstr "" msgstr "Nuevo evento"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:149 #: addons/web_calendar/static/src/js/calendar.js:149
msgid "Save" msgid "Save"
msgstr "" msgstr "Guardar"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:150 #: addons/web_calendar/static/src/js/calendar.js:150
msgid "Cancel" msgid "Cancel"
msgstr "" msgstr "Cancelar"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:151 #: addons/web_calendar/static/src/js/calendar.js:151
msgid "Details" msgid "Details"
msgstr "" msgstr "Detalles"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:152 #: addons/web_calendar/static/src/js/calendar.js:152
msgid "Edit" msgid "Edit"
msgstr "" msgstr "Editar"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:153 #: addons/web_calendar/static/src/js/calendar.js:153
msgid "Delete" msgid "Delete"
msgstr "" msgstr "Borrar"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:155 #: addons/web_calendar/static/src/js/calendar.js:155
msgid "Event will be deleted permanently, are you sure?" msgid "Event will be deleted permanently, are you sure?"
msgstr "" msgstr "Evento será borrado permanentemente, estás seguro ?"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:156 #: addons/web_calendar/static/src/js/calendar.js:156
#: addons/web_calendar/static/src/js/calendar.js:169 #: addons/web_calendar/static/src/js/calendar.js:169
msgid "Description" msgid "Description"
msgstr "" msgstr "Descripción"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:157 #: addons/web_calendar/static/src/js/calendar.js:157
msgid "Time period" msgid "Time period"
msgstr "" msgstr "Periodo de tiempo"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:158 #: addons/web_calendar/static/src/js/calendar.js:158
msgid "Full day" msgid "Full day"
msgstr "" msgstr "Día completo"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:161 #: addons/web_calendar/static/src/js/calendar.js:161
msgid "Do you want to edit the whole set of repeated events?" msgid "Do you want to edit the whole set of repeated events?"
msgstr "" msgstr "Desea editar los demás eventos repetidos ?"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:162 #: addons/web_calendar/static/src/js/calendar.js:162
msgid "Repeat event" msgid "Repeat event"
msgstr "" msgstr "Repetir eventos"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:163 #: addons/web_calendar/static/src/js/calendar.js:163
msgid "Disabled" msgid "Disabled"
msgstr "" msgstr "Inhabilitado"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:164 #: addons/web_calendar/static/src/js/calendar.js:164
msgid "Enabled" msgid "Enabled"
msgstr "" msgstr "Habilitado"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:167 #: addons/web_calendar/static/src/js/calendar.js:167
#: addons/web_calendar/static/src/js/calendar.js:175 #: addons/web_calendar/static/src/js/calendar.js:175
msgid "Agenda" msgid "Agenda"
msgstr "" msgstr "Agenda"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:168 #: addons/web_calendar/static/src/js/calendar.js:168
msgid "Date" msgid "Date"
msgstr "" msgstr "Fecha"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:172 #: addons/web_calendar/static/src/js/calendar.js:172
msgid "Year" msgid "Year"
msgstr "" msgstr "Año"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/xml/web_calendar.xml:5 #: addons/web_calendar/static/src/xml/web_calendar.xml:5

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n" "X-Launchpad-Export-Date: 2012-09-28 04:47+0000\n"
"X-Generator: Launchpad (build 15944)\n" "X-Generator: Launchpad (build 16043)\n"
#. openerp-web #. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11 #: addons/web_calendar/static/src/js/calendar.js:11

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