summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabien Meghazi <fme@openerp.com>2014-04-23 14:38:08 +0200
committerFabien Meghazi <fme@openerp.com>2014-04-23 14:38:08 +0200
commit8370d3f60e83f94cc158bdfd75fa8e683f7d5beb (patch)
tree2837c8f14309b59690f816d3a7dbf8718b0cae77
parentf4a37244cac024c8af907f7ead1fae73a2985bdf (diff)
parent700763f2da05ca70a5ff0342a7e7244c2545a9c7 (diff)
[MERGE] upstream
bzr revid: fme@openerp.com-20140423123808-q58dtl8a0bb2ymlf
-rw-r--r--openerp/addons/base/i18n/ab.po4
-rw-r--r--openerp/addons/base/i18n/af.po4
-rw-r--r--openerp/addons/base/i18n/am.po4
-rw-r--r--openerp/addons/base/i18n/ar.po4
-rw-r--r--openerp/addons/base/i18n/bg.po4
-rw-r--r--openerp/addons/base/i18n/bn.po4
-rw-r--r--openerp/addons/base/i18n/bs.po4
-rw-r--r--openerp/addons/base/i18n/ca.po4
-rw-r--r--openerp/addons/base/i18n/cs.po4
-rw-r--r--openerp/addons/base/i18n/da.po4
-rw-r--r--openerp/addons/base/i18n/de.po4
-rw-r--r--openerp/addons/base/i18n/el.po4
-rw-r--r--openerp/addons/base/i18n/en_GB.po4
-rw-r--r--openerp/addons/base/i18n/es.po4
-rw-r--r--openerp/addons/base/i18n/es_AR.po4
-rw-r--r--openerp/addons/base/i18n/es_BO.po4
-rw-r--r--openerp/addons/base/i18n/es_CL.po4
-rw-r--r--openerp/addons/base/i18n/es_CR.po4
-rw-r--r--openerp/addons/base/i18n/es_DO.po4
-rw-r--r--openerp/addons/base/i18n/es_EC.po4
-rw-r--r--openerp/addons/base/i18n/es_MX.po4
-rw-r--r--openerp/addons/base/i18n/es_PE.po4
-rw-r--r--openerp/addons/base/i18n/es_VE.po4
-rw-r--r--openerp/addons/base/i18n/et.po4
-rw-r--r--openerp/addons/base/i18n/eu.po4
-rw-r--r--openerp/addons/base/i18n/fa.po4
-rw-r--r--openerp/addons/base/i18n/fa_AF.po4
-rw-r--r--openerp/addons/base/i18n/fi.po4
-rw-r--r--openerp/addons/base/i18n/fr.po4
-rw-r--r--openerp/addons/base/i18n/fr_CA.po4
-rw-r--r--openerp/addons/base/i18n/gl.po4
-rw-r--r--openerp/addons/base/i18n/gu.po4
-rw-r--r--openerp/addons/base/i18n/he.po4
-rw-r--r--openerp/addons/base/i18n/hi.po4
-rw-r--r--openerp/addons/base/i18n/hr.po4
-rw-r--r--openerp/addons/base/i18n/hu.po4
-rw-r--r--openerp/addons/base/i18n/hy.po4
-rw-r--r--openerp/addons/base/i18n/id.po4
-rw-r--r--openerp/addons/base/i18n/is.po4
-rw-r--r--openerp/addons/base/i18n/it.po4
-rw-r--r--openerp/addons/base/i18n/ja.po4
-rw-r--r--openerp/addons/base/i18n/ka.po4
-rw-r--r--openerp/addons/base/i18n/kk.po4
-rw-r--r--openerp/addons/base/i18n/ko.po4
-rw-r--r--openerp/addons/base/i18n/lt.po4
-rw-r--r--openerp/addons/base/i18n/lv.po4
-rw-r--r--openerp/addons/base/i18n/mk.po4
-rw-r--r--openerp/addons/base/i18n/mn.po4
-rw-r--r--openerp/addons/base/i18n/nb.po4
-rw-r--r--openerp/addons/base/i18n/nl.po4
-rw-r--r--openerp/addons/base/i18n/nl_BE.po4
-rw-r--r--openerp/addons/base/i18n/pl.po4
-rw-r--r--openerp/addons/base/i18n/pt.po4
-rw-r--r--openerp/addons/base/i18n/pt_BR.po4
-rw-r--r--openerp/addons/base/i18n/ro.po4
-rw-r--r--openerp/addons/base/i18n/ru.po4
-rw-r--r--openerp/addons/base/i18n/sk.po4
-rw-r--r--openerp/addons/base/i18n/sl.po4
-rw-r--r--openerp/addons/base/i18n/sq.po4
-rw-r--r--openerp/addons/base/i18n/sr.po4
-rw-r--r--openerp/addons/base/i18n/sr@latin.po4
-rw-r--r--openerp/addons/base/i18n/sv.po4
-rw-r--r--openerp/addons/base/i18n/th.po4
-rw-r--r--openerp/addons/base/i18n/tlh.po4
-rw-r--r--openerp/addons/base/i18n/tr.po4
-rw-r--r--openerp/addons/base/i18n/uk.po4
-rw-r--r--openerp/addons/base/i18n/ur.po4
-rw-r--r--openerp/addons/base/i18n/vi.po4
-rw-r--r--openerp/addons/base/i18n/zh_CN.po4
-rw-r--r--openerp/addons/base/i18n/zh_HK.po4
-rw-r--r--openerp/addons/base/i18n/zh_TW.po4
-rw-r--r--openerp/addons/base/ir/ir_attachment.py65
-rw-r--r--openerp/addons/base/ir/ir_qweb.py47
-rw-r--r--openerp/addons/base/ir/ir_qweb.xml7
-rw-r--r--openerp/addons/base/ir/ir_ui_view.py38
-rw-r--r--openerp/addons/base/module/module_data.xml6
-rw-r--r--openerp/addons/base/res/res_bank_view.xml1
-rw-r--r--openerp/addons/base/res/res_country_view.xml1
-rw-r--r--openerp/addons/base/res/res_currency.py3
-rw-r--r--openerp/addons/base/res/res_partner.py10
-rw-r--r--openerp/addons/base/res/res_partner_view.xml6
-rw-r--r--openerp/cli/__init__.py3
-rw-r--r--openerp/http.py4
-rw-r--r--openerp/modules/loading.py8
-rw-r--r--openerp/modules/registry.py9
-rw-r--r--openerp/netsvc.py2
-rw-r--r--openerp/osv/fields.py99
-rw-r--r--openerp/osv/orm.py29
-rw-r--r--openerp/release.py2
-rw-r--r--openerp/service/server.py20
-rw-r--r--openerp/sql_db.py11
-rw-r--r--openerp/tests/common.py6
-rw-r--r--openerp/tools/misc.py2
-rw-r--r--setup.py2
94 files changed, 419 insertions, 246 deletions
diff --git a/openerp/addons/base/i18n/ab.po b/openerp/addons/base/i18n/ab.po
index 86600d7723c..b607b97927a 100644
--- a/openerp/addons/base/i18n/ab.po
+++ b/openerp/addons/base/i18n/ab.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:50+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:37+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/af.po b/openerp/addons/base/i18n/af.po
index c80488b1b13..18368ca9625 100644
--- a/openerp/addons/base/i18n/af.po
+++ b/openerp/addons/base/i18n/af.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:50+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:38+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/am.po b/openerp/addons/base/i18n/am.po
index 2801a312ede..e01800e903e 100644
--- a/openerp/addons/base/i18n/am.po
+++ b/openerp/addons/base/i18n/am.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:51+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:38+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/ar.po b/openerp/addons/base/i18n/ar.po
index e9f68449cd7..94d519ede9f 100644
--- a/openerp/addons/base/i18n/ar.po
+++ b/openerp/addons/base/i18n/ar.po
@@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:51+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:38+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/bg.po b/openerp/addons/base/i18n/bg.po
index 3852489a95e..22143793621 100644
--- a/openerp/addons/base/i18n/bg.po
+++ b/openerp/addons/base/i18n/bg.po
@@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:52+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:39+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/bn.po b/openerp/addons/base/i18n/bn.po
index 7e1c406a26f..0b90f4004aa 100644
--- a/openerp/addons/base/i18n/bn.po
+++ b/openerp/addons/base/i18n/bn.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:51+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:39+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/bs.po b/openerp/addons/base/i18n/bs.po
index 9dc651dbaa1..babf20c960f 100644
--- a/openerp/addons/base/i18n/bs.po
+++ b/openerp/addons/base/i18n/bs.po
@@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:52+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:39+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/ca.po b/openerp/addons/base/i18n/ca.po
index 0aa0bdb4b00..ffc9fde2411 100644
--- a/openerp/addons/base/i18n/ca.po
+++ b/openerp/addons/base/i18n/ca.po
@@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:52+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:39+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/cs.po b/openerp/addons/base/i18n/cs.po
index 0cce21599f8..a887afb6485 100644
--- a/openerp/addons/base/i18n/cs.po
+++ b/openerp/addons/base/i18n/cs.po
@@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:53+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:40+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
"X-Poedit-Language: Czech\n"
#. module: base
diff --git a/openerp/addons/base/i18n/da.po b/openerp/addons/base/i18n/da.po
index e18790d9ea7..4de0dfda4aa 100644
--- a/openerp/addons/base/i18n/da.po
+++ b/openerp/addons/base/i18n/da.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:53+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:40+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/de.po b/openerp/addons/base/i18n/de.po
index 18616bdfb59..77d38b8c065 100644
--- a/openerp/addons/base/i18n/de.po
+++ b/openerp/addons/base/i18n/de.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:55+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:42+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/el.po b/openerp/addons/base/i18n/el.po
index 8aaa29b1d20..83bc68b4931 100644
--- a/openerp/addons/base/i18n/el.po
+++ b/openerp/addons/base/i18n/el.po
@@ -12,8 +12,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:55+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:42+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
"X-Poedit-Country: GREECE\n"
"X-Poedit-Language: Greek\n"
"X-Poedit-SourceCharset: utf-8\n"
diff --git a/openerp/addons/base/i18n/en_GB.po b/openerp/addons/base/i18n/en_GB.po
index c5b27448931..d51e067b3af 100644
--- a/openerp/addons/base/i18n/en_GB.po
+++ b/openerp/addons/base/i18n/en_GB.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:08+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:52+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/es.po b/openerp/addons/base/i18n/es.po
index 1bafe12a2ac..4df65aba682 100644
--- a/openerp/addons/base/i18n/es.po
+++ b/openerp/addons/base/i18n/es.po
@@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:04+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:49+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/es_AR.po b/openerp/addons/base/i18n/es_AR.po
index f9cf96454aa..a74699fb374 100644
--- a/openerp/addons/base/i18n/es_AR.po
+++ b/openerp/addons/base/i18n/es_AR.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:08+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:52+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/es_BO.po b/openerp/addons/base/i18n/es_BO.po
index 64115de553f..9d4ae622b5c 100644
--- a/openerp/addons/base/i18n/es_BO.po
+++ b/openerp/addons/base/i18n/es_BO.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:10+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:53+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/es_CL.po b/openerp/addons/base/i18n/es_CL.po
index f197496e566..a113e36a82e 100644
--- a/openerp/addons/base/i18n/es_CL.po
+++ b/openerp/addons/base/i18n/es_CL.po
@@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:09+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:52+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/es_CR.po b/openerp/addons/base/i18n/es_CR.po
index ed96b20642a..e5a617216b6 100644
--- a/openerp/addons/base/i18n/es_CR.po
+++ b/openerp/addons/base/i18n/es_CR.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:10+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:53+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
"Language: \n"
#. module: base
diff --git a/openerp/addons/base/i18n/es_DO.po b/openerp/addons/base/i18n/es_DO.po
index f4cf992b0dc..140f6cfa803 100644
--- a/openerp/addons/base/i18n/es_DO.po
+++ b/openerp/addons/base/i18n/es_DO.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:08+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:52+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/es_EC.po b/openerp/addons/base/i18n/es_EC.po
index 6c9d93d2c5e..5804c8e377d 100644
--- a/openerp/addons/base/i18n/es_EC.po
+++ b/openerp/addons/base/i18n/es_EC.po
@@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:12+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:54+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/es_MX.po b/openerp/addons/base/i18n/es_MX.po
index 6d49c4af121..cc4ea1ea67a 100644
--- a/openerp/addons/base/i18n/es_MX.po
+++ b/openerp/addons/base/i18n/es_MX.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:11+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:54+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/es_PE.po b/openerp/addons/base/i18n/es_PE.po
index c24a34e899b..46733d5b1c6 100644
--- a/openerp/addons/base/i18n/es_PE.po
+++ b/openerp/addons/base/i18n/es_PE.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:12+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:54+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/es_VE.po b/openerp/addons/base/i18n/es_VE.po
index 29a5b3730c6..039baabe46c 100644
--- a/openerp/addons/base/i18n/es_VE.po
+++ b/openerp/addons/base/i18n/es_VE.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:07+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:51+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/et.po b/openerp/addons/base/i18n/et.po
index d7363e67ba0..aa32b7585ab 100644
--- a/openerp/addons/base/i18n/et.po
+++ b/openerp/addons/base/i18n/et.po
@@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:53+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:40+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/eu.po b/openerp/addons/base/i18n/eu.po
index af05c90097d..517499d3839 100644
--- a/openerp/addons/base/i18n/eu.po
+++ b/openerp/addons/base/i18n/eu.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:51+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:39+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/fa.po b/openerp/addons/base/i18n/fa.po
index 4989167556c..55137dce3ab 100644
--- a/openerp/addons/base/i18n/fa.po
+++ b/openerp/addons/base/i18n/fa.po
@@ -9,8 +9,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:00+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:46+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
"X-Poedit-Country: IRAN, ISLAMIC REPUBLIC OF\n"
"X-Poedit-Language: Persian\n"
diff --git a/openerp/addons/base/i18n/fa_AF.po b/openerp/addons/base/i18n/fa_AF.po
index e189962cbd7..2673b2cc498 100644
--- a/openerp/addons/base/i18n/fa_AF.po
+++ b/openerp/addons/base/i18n/fa_AF.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:12+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:55+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/fi.po b/openerp/addons/base/i18n/fi.po
index ff4918cdeb8..93f646c46e7 100644
--- a/openerp/addons/base/i18n/fi.po
+++ b/openerp/addons/base/i18n/fi.po
@@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:54+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:41+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/fr.po b/openerp/addons/base/i18n/fr.po
index c92aee812f0..faaa7ded49a 100644
--- a/openerp/addons/base/i18n/fr.po
+++ b/openerp/addons/base/i18n/fr.po
@@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:54+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:41+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/fr_CA.po b/openerp/addons/base/i18n/fr_CA.po
index 48f2b6ec179..96217a0ed29 100644
--- a/openerp/addons/base/i18n/fr_CA.po
+++ b/openerp/addons/base/i18n/fr_CA.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:09+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:53+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/gl.po b/openerp/addons/base/i18n/gl.po
index 9356943b633..33e0ca7f8e0 100644
--- a/openerp/addons/base/i18n/gl.po
+++ b/openerp/addons/base/i18n/gl.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:55+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:42+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/gu.po b/openerp/addons/base/i18n/gu.po
index 3dbee22ae46..bb053ba30fe 100644
--- a/openerp/addons/base/i18n/gu.po
+++ b/openerp/addons/base/i18n/gu.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:56+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:42+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/he.po b/openerp/addons/base/i18n/he.po
index 9befcdeacbb..370dc41acf9 100644
--- a/openerp/addons/base/i18n/he.po
+++ b/openerp/addons/base/i18n/he.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:56+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:43+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/hi.po b/openerp/addons/base/i18n/hi.po
index be528252f0f..0df8f74590c 100644
--- a/openerp/addons/base/i18n/hi.po
+++ b/openerp/addons/base/i18n/hi.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:56+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:43+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/hr.po b/openerp/addons/base/i18n/hr.po
index 99319e85877..cd0597f7d39 100644
--- a/openerp/addons/base/i18n/hr.po
+++ b/openerp/addons/base/i18n/hr.po
@@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:03+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:48+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
"Language: hr\n"
#. module: base
diff --git a/openerp/addons/base/i18n/hu.po b/openerp/addons/base/i18n/hu.po
index b65e88f7e4e..c97b13187a0 100644
--- a/openerp/addons/base/i18n/hu.po
+++ b/openerp/addons/base/i18n/hu.po
@@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:56+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:43+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/hy.po b/openerp/addons/base/i18n/hy.po
index dd77f1732c8..e416c0e4a62 100644
--- a/openerp/addons/base/i18n/hy.po
+++ b/openerp/addons/base/i18n/hy.po
@@ -9,8 +9,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:51+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:38+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/id.po b/openerp/addons/base/i18n/id.po
index 55f984d410c..25414f99fb5 100644
--- a/openerp/addons/base/i18n/id.po
+++ b/openerp/addons/base/i18n/id.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:57+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:43+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/is.po b/openerp/addons/base/i18n/is.po
index 5cb7d77c323..125515b191f 100644
--- a/openerp/addons/base/i18n/is.po
+++ b/openerp/addons/base/i18n/is.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:57+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:43+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/it.po b/openerp/addons/base/i18n/it.po
index 0cb63de9694..28d29b79aaf 100644
--- a/openerp/addons/base/i18n/it.po
+++ b/openerp/addons/base/i18n/it.po
@@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:57+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:44+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/ja.po b/openerp/addons/base/i18n/ja.po
index c5901311c65..3af2a469283 100644
--- a/openerp/addons/base/i18n/ja.po
+++ b/openerp/addons/base/i18n/ja.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:58+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:44+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/ka.po b/openerp/addons/base/i18n/ka.po
index bc03369afe6..5dcd445e2ff 100644
--- a/openerp/addons/base/i18n/ka.po
+++ b/openerp/addons/base/i18n/ka.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:54+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:41+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/kk.po b/openerp/addons/base/i18n/kk.po
index cb5b5faa652..f1fa010812b 100644
--- a/openerp/addons/base/i18n/kk.po
+++ b/openerp/addons/base/i18n/kk.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:58+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:44+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/ko.po b/openerp/addons/base/i18n/ko.po
index 970efa7c5bb..2404dae9661 100644
--- a/openerp/addons/base/i18n/ko.po
+++ b/openerp/addons/base/i18n/ko.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:58+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:44+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/lt.po b/openerp/addons/base/i18n/lt.po
index 1e7063751bc..25d6e31e73d 100644
--- a/openerp/addons/base/i18n/lt.po
+++ b/openerp/addons/base/i18n/lt.po
@@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:59+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:45+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/lv.po b/openerp/addons/base/i18n/lv.po
index a907da4ad7e..af3d0828dc7 100644
--- a/openerp/addons/base/i18n/lv.po
+++ b/openerp/addons/base/i18n/lv.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:58+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:45+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/mk.po b/openerp/addons/base/i18n/mk.po
index 6e4e39603d0..f725d265332 100644
--- a/openerp/addons/base/i18n/mk.po
+++ b/openerp/addons/base/i18n/mk.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:59+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:45+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/mn.po b/openerp/addons/base/i18n/mn.po
index bdc3e7e37b7..78ce6ac5c69 100644
--- a/openerp/addons/base/i18n/mn.po
+++ b/openerp/addons/base/i18n/mn.po
@@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:59+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:46+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/nb.po b/openerp/addons/base/i18n/nb.po
index d75034d791d..65d8cf62e7d 100644
--- a/openerp/addons/base/i18n/nb.po
+++ b/openerp/addons/base/i18n/nb.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:00+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:46+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/nl.po b/openerp/addons/base/i18n/nl.po
index 23c7cf66791..39d1bddcd75 100644
--- a/openerp/addons/base/i18n/nl.po
+++ b/openerp/addons/base/i18n/nl.po
@@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:53+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:40+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/nl_BE.po b/openerp/addons/base/i18n/nl_BE.po
index 81590a55d18..a07fb33fb4b 100644
--- a/openerp/addons/base/i18n/nl_BE.po
+++ b/openerp/addons/base/i18n/nl_BE.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:09+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:53+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/pl.po b/openerp/addons/base/i18n/pl.po
index c851223d1b7..ca3e805d7f1 100644
--- a/openerp/addons/base/i18n/pl.po
+++ b/openerp/addons/base/i18n/pl.po
@@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:00+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:47+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/pt.po b/openerp/addons/base/i18n/pt.po
index f2ea63aa7f3..0576d40462c 100644
--- a/openerp/addons/base/i18n/pt.po
+++ b/openerp/addons/base/i18n/pt.po
@@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:01+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:47+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/pt_BR.po b/openerp/addons/base/i18n/pt_BR.po
index 7df1d214e2c..2b19ec2c486 100644
--- a/openerp/addons/base/i18n/pt_BR.po
+++ b/openerp/addons/base/i18n/pt_BR.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:07+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:51+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/ro.po b/openerp/addons/base/i18n/ro.po
index 28b33255bbc..6d29c529e44 100644
--- a/openerp/addons/base/i18n/ro.po
+++ b/openerp/addons/base/i18n/ro.po
@@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:01+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:47+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/ru.po b/openerp/addons/base/i18n/ru.po
index e49768a0f72..60c8819d04b 100644
--- a/openerp/addons/base/i18n/ru.po
+++ b/openerp/addons/base/i18n/ru.po
@@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:02+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:48+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/sk.po b/openerp/addons/base/i18n/sk.po
index 6075c9ee6d0..c03d0de6f72 100644
--- a/openerp/addons/base/i18n/sk.po
+++ b/openerp/addons/base/i18n/sk.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:03+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:49+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/sl.po b/openerp/addons/base/i18n/sl.po
index da1e8f47974..a62f242e210 100644
--- a/openerp/addons/base/i18n/sl.po
+++ b/openerp/addons/base/i18n/sl.po
@@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:04+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:49+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/sq.po b/openerp/addons/base/i18n/sq.po
index e022e19b605..a0be5625110 100644
--- a/openerp/addons/base/i18n/sq.po
+++ b/openerp/addons/base/i18n/sq.po
@@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 05:50+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:38+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/sr.po b/openerp/addons/base/i18n/sr.po
index bb354004c23..3ac25b53253 100644
--- a/openerp/addons/base/i18n/sr.po
+++ b/openerp/addons/base/i18n/sr.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:02+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:48+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/sr@latin.po b/openerp/addons/base/i18n/sr@latin.po
index 4e86d70c5bd..30a9a0af3ab 100644
--- a/openerp/addons/base/i18n/sr@latin.po
+++ b/openerp/addons/base/i18n/sr@latin.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:12+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:55+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/sv.po b/openerp/addons/base/i18n/sv.po
index 08eaa1a49f4..2975c159a09 100644
--- a/openerp/addons/base/i18n/sv.po
+++ b/openerp/addons/base/i18n/sv.po
@@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:04+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:49+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/th.po b/openerp/addons/base/i18n/th.po
index b502e37fdc1..ee2313badfc 100644
--- a/openerp/addons/base/i18n/th.po
+++ b/openerp/addons/base/i18n/th.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:05+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:50+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/tlh.po b/openerp/addons/base/i18n/tlh.po
index 5ff7e203931..199dd5d4073 100644
--- a/openerp/addons/base/i18n/tlh.po
+++ b/openerp/addons/base/i18n/tlh.po
@@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:05+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:50+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/tr.po b/openerp/addons/base/i18n/tr.po
index f373aa3c8b4..7dc68a474cf 100644
--- a/openerp/addons/base/i18n/tr.po
+++ b/openerp/addons/base/i18n/tr.po
@@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:05+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:50+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/uk.po b/openerp/addons/base/i18n/uk.po
index 0493f60ddc7..e678f952bb4 100644
--- a/openerp/addons/base/i18n/uk.po
+++ b/openerp/addons/base/i18n/uk.po
@@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:06+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:50+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/ur.po b/openerp/addons/base/i18n/ur.po
index 75aa8fc4ace..3c8880f3270 100644
--- a/openerp/addons/base/i18n/ur.po
+++ b/openerp/addons/base/i18n/ur.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:06+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:50+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/vi.po b/openerp/addons/base/i18n/vi.po
index 53c94aa43fc..68616a81d7f 100644
--- a/openerp/addons/base/i18n/vi.po
+++ b/openerp/addons/base/i18n/vi.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:07+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:51+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/zh_CN.po b/openerp/addons/base/i18n/zh_CN.po
index 69163ff7b36..6e09a983dc1 100644
--- a/openerp/addons/base/i18n/zh_CN.po
+++ b/openerp/addons/base/i18n/zh_CN.po
@@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:11+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:54+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/zh_HK.po b/openerp/addons/base/i18n/zh_HK.po
index 6f21dd44565..ea043ffc98c 100644
--- a/openerp/addons/base/i18n/zh_HK.po
+++ b/openerp/addons/base/i18n/zh_HK.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:07+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:51+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/i18n/zh_TW.po b/openerp/addons/base/i18n/zh_TW.po
index b7e8da5b200..33bfe9db460 100644
--- a/openerp/addons/base/i18n/zh_TW.po
+++ b/openerp/addons/base/i18n/zh_TW.po
@@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 06:10+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-04-17 05:53+0000\n"
+"X-Generator: Launchpad (build 16985)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
diff --git a/openerp/addons/base/ir/ir_attachment.py b/openerp/addons/base/ir/ir_attachment.py
index 186c02f00b8..8478682eb7c 100644
--- a/openerp/addons/base/ir/ir_attachment.py
+++ b/openerp/addons/base/ir/ir_attachment.py
@@ -26,6 +26,8 @@ import os
import re
from openerp import tools
+from openerp.tools.translate import _
+from openerp.exceptions import AccessError
from openerp.osv import fields,osv
from openerp import SUPERUSER_ID
@@ -71,33 +73,49 @@ class ir_attachment(osv.osv):
def _filestore(self, cr, uid, context=None):
return tools.config.filestore(cr.dbname)
+ def force_storage(self, cr, uid, context=None):
+ """Force all attachments to be stored in the currently configured storage"""
+ if not self.pool['res.users'].has_group(cr, uid, 'base.group_erp_manager'):
+ raise AccessError(_('Only administrators can execute this action.'))
+
+ location = self._storage(cr, uid, context)
+ domain = {
+ 'db': [('store_fname', '!=', False)],
+ 'file': [('db_datas', '!=', False)],
+ }[location]
+
+ ids = self.search(cr, uid, domain, context=context)
+ for attach in self.browse(cr, uid, ids, context=context):
+ attach.write({'datas': attach.datas})
+ return True
+
# 'data' field implementation
- def _full_path(self, cr, uid, location, path):
+ def _full_path(self, cr, uid, path):
# sanitize ath
path = re.sub('[.]', '', path)
path = path.strip('/\\')
return os.path.join(self._filestore(cr, uid), path)
- def _get_path(self, cr, uid, location, bin_data):
+ def _get_path(self, cr, uid, bin_data):
sha = hashlib.sha1(bin_data).hexdigest()
# retro compatibility
fname = sha[:3] + '/' + sha
- full_path = self._full_path(cr, uid, location, fname)
+ full_path = self._full_path(cr, uid, fname)
if os.path.isfile(full_path):
return fname, full_path # keep existing path
# scatter files across 256 dirs
# we use '/' in the db (even on windows)
fname = sha[:2] + '/' + sha
- full_path = self._full_path(cr, uid, location, fname)
+ full_path = self._full_path(cr, uid, fname)
dirname = os.path.dirname(full_path)
if not os.path.isdir(dirname):
os.makedirs(dirname)
return fname, full_path
- def _file_read(self, cr, uid, location, fname, bin_size=False):
- full_path = self._full_path(cr, uid, location, fname)
+ def _file_read(self, cr, uid, fname, bin_size=False):
+ full_path = self._full_path(cr, uid, fname)
r = ''
try:
if bin_size:
@@ -108,9 +126,9 @@ class ir_attachment(osv.osv):
_logger.error("_read_file reading %s",full_path)
return r
- def _file_write(self, cr, uid, location, value):
+ def _file_write(self, cr, uid, value):
bin_value = value.decode('base64')
- fname, full_path = self._get_path(cr, uid, location, bin_value)
+ fname, full_path = self._get_path(cr, uid, bin_value)
if not os.path.exists(full_path):
try:
with open(full_path, 'wb') as fp:
@@ -119,10 +137,10 @@ class ir_attachment(osv.osv):
_logger.error("_file_write writing %s", full_path)
return fname
- def _file_delete(self, cr, uid, location, fname):
+ def _file_delete(self, cr, uid, fname):
count = self.search(cr, 1, [('store_fname','=',fname)], count=True)
- if count <= 1:
- full_path = self._full_path(cr, uid, location, fname)
+ full_path = self._full_path(cr, uid, fname)
+ if count <= 1 and os.path.exists(full_path):
try:
os.unlink(full_path)
except OSError:
@@ -135,11 +153,10 @@ class ir_attachment(osv.osv):
if context is None:
context = {}
result = {}
- location = self._storage(cr, uid, context)
bin_size = context.get('bin_size')
for attach in self.browse(cr, uid, ids, context=context):
- if location != 'db' and attach.store_fname:
- result[attach.id] = self._file_read(cr, uid, location, attach.store_fname, bin_size)
+ if attach.store_fname:
+ result[attach.id] = self._file_read(cr, uid, attach.store_fname, bin_size)
else:
result[attach.id] = attach.db_datas
return result
@@ -152,15 +169,15 @@ class ir_attachment(osv.osv):
context = {}
location = self._storage(cr, uid, context)
file_size = len(value.decode('base64'))
+ attach = self.browse(cr, uid, id, context=context)
+ if attach.store_fname:
+ self._file_delete(cr, uid, attach.store_fname)
if location != 'db':
- attach = self.browse(cr, uid, id, context=context)
- if attach.store_fname:
- self._file_delete(cr, uid, location, attach.store_fname)
- fname = self._file_write(cr, uid, location, value)
+ fname = self._file_write(cr, uid, value)
# SUPERUSER_ID as probably don't have write access, trigger during create
- super(ir_attachment, self).write(cr, SUPERUSER_ID, [id], {'store_fname': fname, 'file_size': file_size}, context=context)
+ super(ir_attachment, self).write(cr, SUPERUSER_ID, [id], {'store_fname': fname, 'file_size': file_size, 'db_datas': False}, context=context)
else:
- super(ir_attachment, self).write(cr, SUPERUSER_ID, [id], {'db_datas': value, 'file_size': file_size}, context=context)
+ super(ir_attachment, self).write(cr, SUPERUSER_ID, [id], {'db_datas': value, 'file_size': file_size, 'store_fname': False}, context=context)
return True
_name = 'ir.attachment'
@@ -298,11 +315,9 @@ class ir_attachment(osv.osv):
if isinstance(ids, (int, long)):
ids = [ids]
self.check(cr, uid, ids, 'unlink', context=context)
- location = self._storage(cr, uid, context)
- if location != 'db':
- for attach in self.browse(cr, uid, ids, context=context):
- if attach.store_fname:
- self._file_delete(cr, uid, location, attach.store_fname)
+ for attach in self.browse(cr, uid, ids, context=context):
+ if attach.store_fname:
+ self._file_delete(cr, uid, attach.store_fname)
return super(ir_attachment, self).unlink(cr, uid, ids, context)
def create(self, cr, uid, values, context=None):
diff --git a/openerp/addons/base/ir/ir_qweb.py b/openerp/addons/base/ir/ir_qweb.py
index a5442dbbcad..6eb41879522 100644
--- a/openerp/addons/base/ir/ir_qweb.py
+++ b/openerp/addons/base/ir/ir_qweb.py
@@ -152,7 +152,7 @@ class QWeb(orm.AbstractModel):
"""Add a parsed template in the context. Used to preprocess templates."""
qwebcontext.templates[name] = node
- def load_document(self, document, qwebcontext):
+ def load_document(self, document, res_id, qwebcontext):
"""
Loads an XML document and installs any contained template in the engine
"""
@@ -164,9 +164,13 @@ class QWeb(orm.AbstractModel):
dom = xml.dom.minidom.parse(document)
for node in dom.documentElement.childNodes:
- if node.nodeType == self.node.ELEMENT_NODE and node.getAttribute('t-name'):
- name = str(node.getAttribute("t-name"))
- self.add_template(qwebcontext, name, node)
+ if node.nodeType == self.node.ELEMENT_NODE:
+ if node.getAttribute('t-name'):
+ name = str(node.getAttribute("t-name"))
+ self.add_template(qwebcontext, name, node)
+ if res_id and node.tagName == "t":
+ self.add_template(qwebcontext, res_id, node)
+ res_id = None
def get_template(self, name, qwebcontext):
origin_template = qwebcontext.get('__caller__') or qwebcontext['__stack__'][0]
@@ -175,7 +179,7 @@ class QWeb(orm.AbstractModel):
xml_doc = qwebcontext.loader(name)
except ValueError:
raise_qweb_exception(QWebTemplateNotFound, message="Loader could not find template %r" % name, template=origin_template)
- self.load_document(xml_doc, qwebcontext=qwebcontext)
+ self.load_document(xml_doc, isinstance(name, (int, long)) and name or None, qwebcontext=qwebcontext)
if name in qwebcontext.templates:
return qwebcontext.templates[name]
@@ -393,7 +397,12 @@ class QWeb(orm.AbstractModel):
cr = d.get('request') and d['request'].cr or None
uid = d.get('request') and d['request'].uid or None
- return self.render(cr, uid, self.eval_format(template_attributes["call"], d), d)
+ template = self.eval_format(template_attributes["call"], d)
+ try:
+ template = int(template)
+ except ValueError:
+ pass
+ return self.render(cr, uid, template, d)
def render_tag_call_assets(self, element, template_attributes, generated_attributes, qwebcontext):
""" This special 't-call' tag can be used in order to aggregate/minify javascript and css assets"""
@@ -440,8 +449,7 @@ class QWeb(orm.AbstractModel):
element, template_attributes, generated_attributes, qwebcontext, context=qwebcontext.context)
def get_converter_for(self, field_type):
- return self.pool.get('ir.qweb.field.' + field_type,
- self.pool['ir.qweb.field'])
+ return self.pool.get('ir.qweb.field.' + field_type, self.pool['ir.qweb.field'])
def get_widget_for(self, widget):
return self.pool.get('ir.qweb.widget.' + widget, self.pool['ir.qweb.widget'])
@@ -840,6 +848,8 @@ class Contact(orm.AbstractModel):
_inherit = 'ir.qweb.field.many2one'
def record_to_html(self, cr, uid, field_name, record, column, options=None, context=None):
+ if options is None:
+ options = {}
opf = options.get('fields') or ["name", "address", "phone", "mobile", "fax", "email"]
if not getattr(record, field_name):
@@ -859,6 +869,7 @@ class Contact(orm.AbstractModel):
'country_id': field_browse.country_id and field_browse.country_id.name_get()[0][1],
'email': field_browse.email,
'fields': opf,
+ 'object': field_browse,
'options': options
}
@@ -866,6 +877,26 @@ class Contact(orm.AbstractModel):
return HTMLSafe(html)
+class QwebView(orm.AbstractModel):
+ _name = 'ir.qweb.field.qweb'
+ _inherit = 'ir.qweb.field.many2one'
+
+ def record_to_html(self, cr, uid, field_name, record, column, options=None, context=None):
+ if not getattr(record, field_name):
+ return None
+
+ view = getattr(record, field_name)
+
+ if view._model._name != "ir.ui.view":
+ _logger.warning("%s.%s must be a 'ir.ui.view' model." % (record, field_name))
+ return None
+
+ ctx = (context or {}).copy()
+ ctx['object'] = record
+ html = view.render(ctx, engine='ir.qweb', context=ctx).decode('utf8')
+
+ return HTMLSafe(html)
+
class QwebWidget(osv.AbstractModel):
_name = 'ir.qweb.widget'
diff --git a/openerp/addons/base/ir/ir_qweb.xml b/openerp/addons/base/ir/ir_qweb.xml
index 25bb4ef8ef9..a21a3fcf2af 100644
--- a/openerp/addons/base/ir/ir_qweb.xml
+++ b/openerp/addons/base/ir/ir_qweb.xml
@@ -2,7 +2,12 @@
<data>
<template id="contact">
<address t-ignore="true" class="mb0" itemscope="itemscope" itemtype="http://schema.org/Organization">
- <div t-att-class="'name' not in fields and 'css_non_editable_mode_hidden'"><span itemprop="name" t-esc="name"/></div>
+ <div t-att-class="'name' not in fields and 'css_non_editable_mode_hidden'">
+ <span itemprop="name" t-esc="name"/>
+ <t t-if="options.get('country_image') and 'country_id' in fields and object.country_id and object.country_id.image">
+ <span t-field="object.country_id.image" t-field-options='{"widget": "image", "class": "country_flag"}'/>
+ </t>
+ </div>
<div itemprop="address" itemscope="itemscope" itemtype="http://schema.org/PostalAddress">
<div t-if="address and 'address' in fields" class='css_editable_mode_hidden'>
<i t-if="not options.get('no_marker')" class='fa fa-map-marker'/> <span itemprop="streetAddress" t-raw="address.replace('\n', options.get('no_tag_br') and ', ' or ('&lt;br/&gt;%s' % ('' if options.get('no_marker') else '&amp;nbsp; &amp;nbsp; ')))"/>
diff --git a/openerp/addons/base/ir/ir_ui_view.py b/openerp/addons/base/ir/ir_ui_view.py
index b6d785f5054..ea2c9d6ecbe 100644
--- a/openerp/addons/base/ir/ir_ui_view.py
+++ b/openerp/addons/base/ir/ir_ui_view.py
@@ -698,6 +698,16 @@ class view(osv.osv):
for action, operation in (('create', 'create'), ('delete', 'unlink'), ('edit', 'write')):
if not node.get(action) and not Model.check_access_rights(cr, user, operation, raise_exception=False):
node.set(action, 'false')
+ if node.tag in ('kanban'):
+ group_by_field = node.get('default_group_by')
+ if group_by_field and Model._all_columns.get(group_by_field):
+ group_by_column = Model._all_columns[group_by_field].column
+ if group_by_column._type == 'many2one':
+ group_by_model = Model.pool.get(group_by_column._obj)
+ for action, operation in (('group_create', 'create'), ('group_delete', 'unlink'), ('group_edit', 'write')):
+ if not node.get(action) and not group_by_model.check_access_rights(cr, user, operation, raise_exception=False):
+ node.set(action, 'false')
+
arch = etree.tostring(node, encoding="utf-8").replace('\t', '')
for k in fields.keys():
if k not in fields_def:
@@ -719,10 +729,13 @@ class view(osv.osv):
#------------------------------------------------------
@tools.ormcache_context(accepted_keys=('lang','inherit_branding', 'editable', 'translatable'))
def read_template(self, cr, uid, xml_id, context=None):
- if '.' not in xml_id:
- raise ValueError('Invalid template id: %r' % (xml_id,))
+ if isinstance(xml_id, (int, long)):
+ view_id = xml_id
+ else:
+ if '.' not in xml_id:
+ raise ValueError('Invalid template id: %r' % (xml_id,))
+ view_id = self.pool['ir.model.data'].xmlid_to_res_id(cr, uid, xml_id, raise_if_not_found=True)
- view_id = self.pool['ir.model.data'].xmlid_to_res_id(cr, uid, xml_id, raise_if_not_found=True)
arch = self.read_combined(cr, uid, view_id, fields=['arch'], context=context)['arch']
arch_tree = etree.fromstring(arch)
@@ -847,9 +860,6 @@ class view(osv.osv):
def render(self, cr, uid, id_or_xml_id, values=None, engine='ir.qweb', context=None):
if isinstance(id_or_xml_id, list):
id_or_xml_id = id_or_xml_id[0]
- tname = id_or_xml_id
- if isinstance(tname, (int, long)):
- tname = self.get_view_xmlid(cr, uid, tname)
if not context:
context = {}
@@ -868,7 +878,7 @@ class view(osv.osv):
def loader(name):
return self.read_template(cr, uid, name, context=context)
- return self.pool[engine].render(cr, uid, tname, qcontext, loader=loader, context=context)
+ return self.pool[engine].render(cr, uid, id_or_xml_id, qcontext, loader=loader, context=context)
#------------------------------------------------------
# Misc
@@ -956,4 +966,18 @@ class view(osv.osv):
ids = map(itemgetter(0), cr.fetchall())
return self._check_xml(cr, uid, ids)
+ def _validate_module_views(self, cr, uid, module):
+ """Validate architecture of all the views of a given module"""
+ assert not self.pool._init or module in self.pool._init_modules
+ cr.execute("""SELECT max(v.id)
+ FROM ir_ui_view v
+ LEFT JOIN ir_model_data md ON (md.model = 'ir.ui.view' AND md.res_id = v.id)
+ WHERE md.module = %s
+ GROUP BY coalesce(v.inherit_id, v.id)
+ """, (module,))
+
+ for vid, in cr.fetchall():
+ if not self._check_xml(cr, uid, [vid]):
+ self.raise_view_error(cr, uid, "Can't validate view", vid)
+
# vim:et:
diff --git a/openerp/addons/base/module/module_data.xml b/openerp/addons/base/module/module_data.xml
index 2b7fd2bdab5..ad5998b091b 100644
--- a/openerp/addons/base/module/module_data.xml
+++ b/openerp/addons/base/module/module_data.xml
@@ -85,12 +85,6 @@
<field name="sequence">11</field>
</record>
- <record model="ir.module.category" id="module_category_survey">
- <field name="name">Survey</field>
- <field name="description">Lets you create, send, share and answer to surveys.</field>
- <field name="sequence">11</field>
- </record>
-
<record model="ir.module.category" id="module_category_marketing">
<field name="name">Marketing</field>
<field name="description">Helps you manage your marketing campaigns step by step.</field>
diff --git a/openerp/addons/base/res/res_bank_view.xml b/openerp/addons/base/res/res_bank_view.xml
index 09197e37dc5..be9918be27c 100644
--- a/openerp/addons/base/res/res_bank_view.xml
+++ b/openerp/addons/base/res/res_bank_view.xml
@@ -74,6 +74,7 @@
<field name="code"/>
</group>
<field name="field_ids"/>
+ <label for="format_layout"/>
<field name="format_layout"/>
</form>
</field>
diff --git a/openerp/addons/base/res/res_country_view.xml b/openerp/addons/base/res/res_country_view.xml
index e4784c3d9ca..35eb0a592ed 100644
--- a/openerp/addons/base/res/res_country_view.xml
+++ b/openerp/addons/base/res/res_country_view.xml
@@ -32,6 +32,7 @@
<field name="code"/>
</group>
</group>
+ <label for="address_format"/>
<field name="address_format" groups="base.group_no_one" placeholder="Address format..."/>
</form>
</field>
diff --git a/openerp/addons/base/res/res_currency.py b/openerp/addons/base/res/res_currency.py
index 1419cc7ccb4..19444786935 100644
--- a/openerp/addons/base/res/res_currency.py
+++ b/openerp/addons/base/res/res_currency.py
@@ -58,7 +58,8 @@ class res_currency(osv.osv):
elif not raise_on_no_rate:
res[id] = 0
else:
- raise osv.except_osv(_('Error!'),_("No currency rate associated for currency %d for the given period" % (id)))
+ currency = self.browse(cr, uid, id, context=context)
+ raise osv.except_osv(_('Error!'),_("No currency rate associated for currency '%s' for the given period" % (currency.name)))
return res
_name = "res.currency"
diff --git a/openerp/addons/base/res/res_partner.py b/openerp/addons/base/res/res_partner.py
index 896f455a274..df8a2daf6b3 100644
--- a/openerp/addons/base/res/res_partner.py
+++ b/openerp/addons/base/res/res_partner.py
@@ -234,7 +234,7 @@ class res_partner(osv.osv, format_address):
'title': fields.many2one('res.partner.title', 'Title'),
'parent_id': fields.many2one('res.partner', 'Related Company', select=True),
'child_ids': fields.one2many('res.partner', 'parent_id', 'Contacts', domain=[('active','=',True)]), # force "active_test" domain to bypass _search() override
- 'ref': fields.char('Reference', size=64, select=1),
+ 'ref': fields.char('Contact Reference', size=64, select=1),
'lang': fields.selection(_lang_get, 'Language',
help="If the selected language is loaded in the system, all documents related to this contact will be printed in this language. If not, it will be English."),
'tz': fields.selection(_tz_get, 'Timezone', size=64,
@@ -360,6 +360,7 @@ class res_partner(osv.osv, format_address):
value = {}
value['title'] = False
if is_company:
+ value['use_parent_address'] = False
domain = {'title': [('domain', '=', 'partner')]}
else:
domain = {'title': [('domain', '=', 'contact')]}
@@ -379,9 +380,10 @@ class res_partner(osv.osv, format_address):
'was never correctly set. If an existing contact starts working for a new '
'company then a new contact should be created under that new '
'company. You can use the "Discard" button to abandon this change.')}
- parent = self.browse(cr, uid, parent_id, context=context)
- address_fields = self._address_fields(cr, uid, context=context)
- result['value'] = dict((key, value_or_id(parent[key])) for key in address_fields)
+ if use_parent_address:
+ parent = self.browse(cr, uid, parent_id, context=context)
+ address_fields = self._address_fields(cr, uid, context=context)
+ result['value'] = dict((key, value_or_id(parent[key])) for key in address_fields)
else:
result['value'] = {'use_parent_address': False}
return result
diff --git a/openerp/addons/base/res/res_partner_view.xml b/openerp/addons/base/res/res_partner_view.xml
index a0e32ab83bd..a5f04a120a7 100644
--- a/openerp/addons/base/res/res_partner_view.xml
+++ b/openerp/addons/base/res/res_partner_view.xml
@@ -158,8 +158,8 @@
<div>
<field name="use_parent_address" class="oe_edit_only oe_inline"
on_change="onchange_address(use_parent_address, parent_id)"
- attrs="{'invisible': [('parent_id','=', False),('use_parent_address','=',False)]}"/>
- <label for="use_parent_address" class="oe_edit_only" attrs="{'invisible': [('parent_id','=', False),('use_parent_address','=',False)]}"/>
+ attrs="{'invisible': ['|', ('is_company', '=', True),('parent_id', '=', False)]}"/>
+ <label for="use_parent_address" class="oe_edit_only" attrs="{'invisible': ['|', ('is_company', '=', True), ('parent_id', '=', False)]}"/>
<button name="open_parent" type="object" string="(edit company address)" class="oe_link oe_edit_only"
attrs="{'invisible': ['|',('parent_id','=', False),('use_parent_address','=',False)]}"/>
<field name="street" placeholder="Street..." attrs="{'readonly': [('use_parent_address','=',True)]}"/>
@@ -188,7 +188,7 @@
<notebook colspan="4">
<page string="Contacts" attrs="{'invisible': [('is_company','=',False), ('child_ids', '=', [])]}" autofocus="autofocus">
- <field name="child_ids" mode="kanban" context="{'default_parent_id': active_id, 'default_street': street, 'default_street2': street2, 'default_city': city, 'default_state_id': state_id, 'default_zip': zip, 'default_country_id': country_id, 'default_supplier': supplier, 'default_customer': customer}">
+ <field name="child_ids" mode="kanban" context="{'default_parent_id': active_id, 'default_street': street, 'default_street2': street2, 'default_city': city, 'default_state_id': state_id, 'default_zip': zip, 'default_country_id': country_id, 'default_supplier': supplier, 'default_customer': customer, 'default_use_parent_address': True}">
<kanban>
<field name="color"/>
<field name="name"/>
diff --git a/openerp/cli/__init__.py b/openerp/cli/__init__.py
index 7111112c026..27428369cbc 100644
--- a/openerp/cli/__init__.py
+++ b/openerp/cli/__init__.py
@@ -38,7 +38,8 @@ def main():
# The only shared option is '--addons-path=' needed to discover additional
# commands from modules
if len(args) > 1 and args[0].startswith('--addons-path=') and not args[1].startswith("-"):
- tools.config.parse_config([args[0]])
+ # parse only the addons-path, do not setup the logger...
+ tools.config._parse_config([args[0]])
args = args[1:]
# Default legacy command
diff --git a/openerp/http.py b/openerp/http.py
index c51934fb223..b98eff2cb08 100644
--- a/openerp/http.py
+++ b/openerp/http.py
@@ -604,8 +604,8 @@ class ControllerType(type):
# flag old-style methods with req as first argument
for k, v in attrs.items():
- if inspect.isfunction(v):
- spec = inspect.getargspec(v)
+ if inspect.isfunction(v) and hasattr(v, 'original_func'):
+ spec = inspect.getargspec(v.original_func)
first_arg = spec.args[1] if len(spec.args) >= 2 else None
if first_arg in ["req", "request"]:
v._first_arg_is_req = True
diff --git a/openerp/modules/loading.py b/openerp/modules/loading.py
index 5635e42e780..2b507acc0bb 100644
--- a/openerp/modules/loading.py
+++ b/openerp/modules/loading.py
@@ -3,7 +3,7 @@
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
-# Copyright (C) 2010-2013 OpenERP s.a. (<http://openerp.com>).
+# Copyright (C) 2010-2014 OpenERP s.a. (<http://openerp.com>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@@ -153,7 +153,6 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules=
loaded_modules.append(package.name)
if hasattr(package, 'init') or hasattr(package, 'update') or package.state in ('to install', 'to upgrade'):
init_module_models(cr, package.name, models)
- registry._init_modules.add(package.name)
status['progress'] = float(index) / len(graph)
# Can't put this line out of the loop: ir.module.module will be
@@ -182,6 +181,10 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules=
migrations.migrate_module(package, 'post')
+ registry._init_modules.add(package.name)
+ # validate all the views at a whole
+ registry['ir.ui.view']._validate_module_views(cr, SUPERUSER_ID, module_name)
+
if has_demo:
# launch tests only in demo mode, allowing tests to use demo data.
if tools.config.options['test_enable']:
@@ -207,6 +210,7 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules=
if hasattr(package, kind):
delattr(package, kind)
+ registry._init_modules.add(package.name)
cr.commit()
# The query won't be valid for models created later (i.e. custom model
diff --git a/openerp/modules/registry.py b/openerp/modules/registry.py
index ef6aaf19d5a..eb591c53521 100644
--- a/openerp/modules/registry.py
+++ b/openerp/modules/registry.py
@@ -199,7 +199,7 @@ class Registry(Mapping):
def leave_test_mode(self):
""" Leave the test mode. """
assert self.test_cr is not None
- self.test_cr.close(force=True) # close the cursor for real
+ self.test_cr.force_close()
self.test_cr = None
RegistryManager.leave_test_mode()
@@ -207,13 +207,14 @@ class Registry(Mapping):
""" Return a new cursor for the database. The cursor itself may be used
as a context manager to commit/rollback and close automatically.
"""
- if self.test_cr is not None:
+ cr = self.test_cr
+ if cr is not None:
# While in test mode, we use one special cursor across requests. The
# test cursor uses a reentrant lock to serialize accesses. The lock
# is granted here by cursor(), and automatically released by the
# cursor itself in its method close().
- self.test_cr.acquire()
- return self.test_cr
+ cr.acquire()
+ return cr
return self._db.cursor()
class DummyRLock(object):
diff --git a/openerp/netsvc.py b/openerp/netsvc.py
index d762eb5006f..15f02645d52 100644
--- a/openerp/netsvc.py
+++ b/openerp/netsvc.py
@@ -86,7 +86,7 @@ class PostgreSQLHandler(logging.Handler):
if traceback:
msg = "%s\n%s" % (msg, traceback)
level = logging.getLevelName(record.levelno)
- val = (ct_uid, ct_uid, 'server', dbname, record.name, level, msg, record.pathname, record.lineno, record.funcName)
+ val = (ct_uid, ct_uid, 'server', ct_db, record.name, level, msg, record.pathname, record.lineno, record.funcName)
cr.execute("""
INSERT INTO ir_logging(create_date, write_date, create_uid, write_uid, type, dbname, name, level, message, path, line, func)
VALUES (NOW() at time zone 'UTC', NOW() at time zone 'UTC', %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
diff --git a/openerp/osv/fields.py b/openerp/osv/fields.py
index f60e83726c4..439463b962a 100644
--- a/openerp/osv/fields.py
+++ b/openerp/osv/fields.py
@@ -344,6 +344,30 @@ class date(_column):
exc_info=True)
return (context_today or today).strftime(tools.DEFAULT_SERVER_DATE_FORMAT)
+ @staticmethod
+ def date_to_datetime(model, cr, uid, userdate, context=None):
+ """ Convert date values expressed in user's timezone to
+ server-side UTC timestamp, assuming a default arbitrary
+ time of 12:00 AM - because a time is needed.
+
+ :param str userdate: date string in in user time zone
+ :return: UTC datetime string for server-side use
+ """
+ user_date = DT.datetime.strptime(userdate, tools.DEFAULT_SERVER_DATE_FORMAT)
+ if context and context.get('tz'):
+ tz_name = context['tz']
+ else:
+ tz_name = model.pool.get('res.users').read(cr, SUPERUSER_ID, uid, ['tz'])['tz']
+ if tz_name:
+ utc = pytz.timezone('UTC')
+ context_tz = pytz.timezone(tz_name)
+ user_datetime = user_date + DT.timedelta(hours=12.0)
+ local_timestamp = context_tz.localize(user_datetime, is_dst=False)
+ user_datetime = local_timestamp.astimezone(utc)
+ return user_datetime.strftime(tools.DEFAULT_SERVER_DATETIME_FORMAT)
+ return user_date.strftime(tools.DEFAULT_SERVER_DATETIME_FORMAT)
+
+
class datetime(_column):
_type = 'datetime'
@@ -1191,42 +1215,69 @@ class function(_column):
return self._fnct_search(obj, cr, uid, obj, name, args, context=context)
def postprocess(self, cr, uid, obj, field, value=None, context=None):
+ return self._postprocess_batch(cr, uid, obj, field, {0: value}, context=context)[0]
+
+ def _postprocess_batch(self, cr, uid, obj, field, values, context=None):
+ if not values:
+ return values
+
if context is None:
context = {}
- result = value
- field_type = obj._columns[field]._type
- if field_type == "many2one":
- # make the result a tuple if it is not already one
- if isinstance(value, (int,long)) and hasattr(obj._columns[field], 'relation'):
- obj_model = obj.pool[obj._columns[field].relation]
- dict_names = dict(obj_model.name_get(cr, SUPERUSER_ID, [value], context))
- result = (value, dict_names[value])
- if field_type == 'binary':
- if context.get('bin_size'):
- # client requests only the size of binary fields
- result = get_nice_size(value)
- elif not context.get('bin_raw'):
- result = sanitize_binary_value(value)
+ field_type = obj._columns[field]._type
+ new_values = dict(values)
- if field_type == "integer" and value > xmlrpclib.MAXINT:
+ if field_type == "integer":
# integer/long values greater than 2^31-1 are not supported
# in pure XMLRPC, so we have to pass them as floats :-(
# This is not needed for stored fields and non-functional integer
# fields, as their values are constrained by the database backend
# to the same 32bits signed int limit.
- result = __builtin__.float(value)
- return result
+ for rid, value in values.iteritems():
+ if value and value > xmlrpclib.MAXINT:
+ new_values[rid] = __builtin__.float(value)
+
+ elif field_type == 'binary':
+ if context.get('bin_size'):
+ # client requests only the size of binary fields
+ for rid, value in values.iteritems():
+ if value:
+ new_values[rid] = get_nice_size(value)
+ elif not context.get('bin_raw'):
+ for rid, value in values.iteritems():
+ if value:
+ new_values[rid] = sanitize_binary_value(value)
+
+ elif field_type == "many2one" and hasattr(obj._columns[field], 'relation'):
+ # make the result a tuple if it is not already one
+ if all(isinstance(value, (int, long)) for value in values.values() if value):
+ obj_model = obj.pool[obj._columns[field].relation]
+ ids = [i for i in values.values() if i]
+ dict_names = dict(obj_model.name_get(cr, SUPERUSER_ID, ids, context))
+ for rid, value in values.iteritems():
+ if value:
+ new_values[rid] = (value, dict_names[value])
+
+ return new_values
def get(self, cr, obj, ids, name, uid=False, context=None, values=None):
result = self._fnct(obj, cr, uid, ids, name, self._arg, context)
- for id in ids:
- if self._multi and id in result:
- for field, value in result[id].iteritems():
- if value:
- result[id][field] = self.postprocess(cr, uid, obj, field, value, context)
- elif result.get(id):
- result[id] = self.postprocess(cr, uid, obj, name, result[id], context)
+ if self._multi:
+ swap = {}
+ for rid, values in result.iteritems():
+ for f, v in values.iteritems():
+ if f not in name:
+ continue
+ swap.setdefault(f, {})[rid] = v
+
+ for field, values in swap.iteritems():
+ new_values = self._postprocess_batch(cr, uid, obj, field, values, context)
+ for rid, value in new_values.iteritems():
+ result[rid][field] = value
+
+ else:
+ result = self._postprocess_batch(cr, uid, obj, name, result, context)
+
return result
def set(self, cr, obj, id, name, value, user=None, context=None):
diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py
index b545f593559..a198e013746 100644
--- a/openerp/osv/orm.py
+++ b/openerp/osv/orm.py
@@ -1915,6 +1915,31 @@ class BaseModel(object):
}
return result
+ def get_formview_id(self, cr, uid, id, context=None):
+ """ Return an view id to open the document with. This method is meant to be
+ overridden in addons that want to give specific view ids for example.
+
+ :param int id: id of the document to open
+ """
+ return False
+
+ def get_formview_action(self, cr, uid, id, context=None):
+ """ Return an action to open the document. This method is meant to be
+ overridden in addons that want to give specific view ids for example.
+
+ :param int id: id of the document to open
+ """
+ view_id = self.get_formview_id(cr, uid, id, context=context)
+ return {
+ 'type': 'ir.actions.act_window',
+ 'res_model': self._name,
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'views': [(view_id, 'form')],
+ 'target': 'current',
+ 'res_id': id,
+ }
+
def _view_look_dom_arch(self, cr, uid, node, view_id, context=None):
return self.pool['ir.ui.view'].postprocess_and_fields(
cr, uid, self._name, node, view_id, context=context)
@@ -2332,7 +2357,7 @@ class BaseModel(object):
del data['id']
return data
- def read_group(self, cr, uid, domain, fields, groupby, offset=0, limit=None, context={}, orderby=False, lazy=True):
+ def read_group(self, cr, uid, domain, fields, groupby, offset=0, limit=None, context=None, orderby=False, lazy=True):
"""
Get the list of records in list view grouped by the given ``groupby`` fields
@@ -2364,6 +2389,8 @@ class BaseModel(object):
:raise AccessError: * if user has no read rights on the requested object
* if user tries to bypass access rules for read on the requested object
"""
+ if context is None:
+ context = {}
self.check_access_rights(cr, uid, 'read')
query = self._where_calc(cr, uid, domain, context=context)
fields = fields or self._columns.keys()
diff --git a/openerp/release.py b/openerp/release.py
index 1a9c863660c..99de8e00bde 100644
--- a/openerp/release.py
+++ b/openerp/release.py
@@ -30,7 +30,7 @@ RELEASE_LEVELS_DISPLAY = {ALPHA: ALPHA,
# properly comparable using normal operarors, for example:
# (6,1,0,'beta',0) < (6,1,0,'candidate',1) < (6,1,0,'candidate',2)
# (6,1,0,'candidate',2) < (6,1,0,'final',0) < (6,1,2,'final',0)
-version_info = (8, 0, 0, ALPHA, 1)
+version_info = (7, 'saas~4', 0, FINAL, 0)
version = '.'.join(map(str, version_info[:2])) + RELEASE_LEVELS_DISPLAY[version_info[3]] + str(version_info[4] or '')
series = serie = major_version = '.'.join(map(str, version_info[:2]))
diff --git a/openerp/service/server.py b/openerp/service/server.py
index 76b415eb01e..72e130edf8b 100644
--- a/openerp/service/server.py
+++ b/openerp/service/server.py
@@ -280,7 +280,7 @@ class ThreadedServer(CommonServer):
t.start()
_logger.info('HTTP service (werkzeug) running on %s:%s', self.interface, self.port)
- def start(self):
+ def start(self, stop=False):
_logger.debug("Setting signal handlers")
if os.name == 'posix':
signal.signal(signal.SIGINT, self.signal_handler)
@@ -291,8 +291,15 @@ class ThreadedServer(CommonServer):
elif os.name == 'nt':
import win32api
win32api.SetConsoleCtrlHandler(lambda sig: self.signal_handler(sig, None), 1)
- self.cron_spawn()
- self.http_spawn()
+
+ test_mode = config['test_enable'] or config['test_file']
+ if not stop or test_mode:
+ # some tests need the http deamon to be available...
+ self.http_spawn()
+
+ if not stop:
+ # only relevant if we are not in "--stop-after-init" mode
+ self.cron_spawn()
def stop(self):
""" Shutdown the WSGI server. Wait for non deamon threads.
@@ -329,7 +336,7 @@ class ThreadedServer(CommonServer):
The first SIGINT or SIGTERM signal will initiate a graceful shutdown while
a second one if any will force an immediate exit.
"""
- self.start()
+ self.start(stop=stop)
rc = preload_registries(preload)
@@ -552,8 +559,6 @@ class PreforkServer(CommonServer):
raise
def start(self):
- # Empty the cursor pool, we dont want them to be shared among forked workers.
- openerp.sql_db.close_all()
# wakeup pipe, python doesnt throw EINTR when a syscall is interrupted
# by a signal simulating a pseudo SA_RESTART. We write to a pipe in the
# signal handler to overcome this behaviour
@@ -602,6 +607,9 @@ class PreforkServer(CommonServer):
self.stop()
return rc
+ # Empty the cursor pool, we dont want them to be shared among forked workers.
+ openerp.sql_db.close_all()
+
_logger.debug("Multiprocess starting")
while 1:
try:
diff --git a/openerp/sql_db.py b/openerp/sql_db.py
index fcc60e7b6f3..3e401347a18 100644
--- a/openerp/sql_db.py
+++ b/openerp/sql_db.py
@@ -399,12 +399,13 @@ class TestCursor(Cursor):
def release(self):
self._lock.release()
- def close(self, force=False):
- if force:
- super(TestCursor, self).close()
- elif not self._closed:
+ def force_close(self):
+ super(TestCursor, self).close()
+
+ def close(self):
+ if not self._closed:
self.rollback() # for stuff that has not been committed
- self.release()
+ self.release()
def autocommit(self, on):
_logger.debug("TestCursor.autocommit(%r) does nothing", on)
diff --git a/openerp/tests/common.py b/openerp/tests/common.py
index 7cc753e810b..e881959a31b 100644
--- a/openerp/tests/common.py
+++ b/openerp/tests/common.py
@@ -233,6 +233,7 @@ class HttpCase(TransactionCase):
_logger.info("phantom_run execution finished")
def _wait_remaining_requests(self):
+ t0 = int(time.time())
for thread in threading.enumerate():
if thread.name.startswith('openerp.service.http.request.'):
while thread.isAlive():
@@ -240,6 +241,11 @@ class HttpCase(TransactionCase):
# and would prevent the forced shutdown.
thread.join(0.05)
time.sleep(0.05)
+ t1 = int(time.time())
+ if t0 != t1:
+ _logger.info('remaining requests')
+ openerp.tools.misc.dumpstacks()
+ t0 = t1
def phantom_jsfile(self, jsfile, timeout=60, **kw):
options = {
diff --git a/openerp/tools/misc.py b/openerp/tools/misc.py
index bb61fe2e7a2..d63e2a987e9 100644
--- a/openerp/tools/misc.py
+++ b/openerp/tools/misc.py
@@ -1171,7 +1171,7 @@ class ConstantMapping(Mapping):
return self._value
-def dumpstacks(sig, frame):
+def dumpstacks(sig=None, frame=None):
""" Signal handler: dump a stack trace for each existing thread."""
code = []
diff --git a/setup.py b/setup.py
index 21a6e6ad089..2d427786dbd 100644
--- a/setup.py
+++ b/setup.py
@@ -171,7 +171,7 @@ setuptools.setup(
'python-openid',
'pytz',
'pyusb >= 1.0.0b1',
- 'pywebdav <= 0.9.4',
+ 'pywebdav < 0.9.8',
'pyyaml',
'qrcode',
'reportlab', # windows binary pypi.python.org/pypi/reportlab