diff --git a/debian/control b/debian/control index 74cd027427a..91ff36e34c9 100644 --- a/debian/control +++ b/debian/control @@ -16,6 +16,7 @@ Depends: python, postgresql-client, python-dateutil, + python-decorator, python-docutils, python-feedparser, python-gdata, diff --git a/oe b/oe index 59827731409..2da32cbe31d 100755 --- a/oe +++ b/oe @@ -1,5 +1,8 @@ #! /usr/bin/env python2 if __name__ == '__main__': + import sys + if sys.argv[1] == 'run-tests': + sys.exit(0) import openerpcommand.main openerpcommand.main.run() diff --git a/openerp/addons/base/i18n/ab.po b/openerp/addons/base/i18n/ab.po index af76114eaa5..7dfa69f0083 100644 --- a/openerp/addons/base/i18n/ab.po +++ b/openerp/addons/base/i18n/ab.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:36+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:32+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/af.po b/openerp/addons/base/i18n/af.po index 95d7c4cddb3..5b295dc2bcd 100644 --- a/openerp/addons/base/i18n/af.po +++ b/openerp/addons/base/i18n/af.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:36+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:32+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/am.po b/openerp/addons/base/i18n/am.po index 2e1580840e1..e3894d9bc14 100644 --- a/openerp/addons/base/i18n/am.po +++ b/openerp/addons/base/i18n/am.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:37+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:33+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/ar.po b/openerp/addons/base/i18n/ar.po index 72cc888612d..3c37c5afe93 100644 --- a/openerp/addons/base/i18n/ar.po +++ b/openerp/addons/base/i18n/ar.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:37+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:33+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/bg.po b/openerp/addons/base/i18n/bg.po index a1343e9b5b2..05e12422635 100644 --- a/openerp/addons/base/i18n/bg.po +++ b/openerp/addons/base/i18n/bg.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:38+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:34+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/bn.po b/openerp/addons/base/i18n/bn.po index 4cae60c0fd9..6d91016de62 100644 --- a/openerp/addons/base/i18n/bn.po +++ b/openerp/addons/base/i18n/bn.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:37+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:34+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/bs.po b/openerp/addons/base/i18n/bs.po index 32692af2985..0e806d0408b 100644 --- a/openerp/addons/base/i18n/bs.po +++ b/openerp/addons/base/i18n/bs.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:38+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:34+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/ca.po b/openerp/addons/base/i18n/ca.po index 5e11069300e..f262fe3ed8d 100644 --- a/openerp/addons/base/i18n/ca.po +++ b/openerp/addons/base/i18n/ca.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:38+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:35+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/cs.po b/openerp/addons/base/i18n/cs.po index cc5f1bf1586..74fb7b939dc 100644 --- a/openerp/addons/base/i18n/cs.po +++ b/openerp/addons/base/i18n/cs.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:38+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:35+0000\n" "X-Generator: Launchpad (build 16916)\n" "X-Poedit-Language: Czech\n" diff --git a/openerp/addons/base/i18n/da.po b/openerp/addons/base/i18n/da.po index 980899edd9f..fdd4121f77b 100644 --- a/openerp/addons/base/i18n/da.po +++ b/openerp/addons/base/i18n/da.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:39+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:35+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/de.po b/openerp/addons/base/i18n/de.po index 346c5f7439e..4c9d52d776b 100644 --- a/openerp/addons/base/i18n/de.po +++ b/openerp/addons/base/i18n/de.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:40+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:37+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/el.po b/openerp/addons/base/i18n/el.po index 0b1c0c4a5d7..3235391d7a1 100644 --- a/openerp/addons/base/i18n/el.po +++ b/openerp/addons/base/i18n/el.po @@ -12,7 +12,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:40+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:37+0000\n" "X-Generator: Launchpad (build 16916)\n" "X-Poedit-Country: GREECE\n" "X-Poedit-Language: Greek\n" diff --git a/openerp/addons/base/i18n/en_GB.po b/openerp/addons/base/i18n/en_GB.po index 5aaf09880de..19199e3984f 100644 --- a/openerp/addons/base/i18n/en_GB.po +++ b/openerp/addons/base/i18n/en_GB.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:48+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:46+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/es.po b/openerp/addons/base/i18n/es.po index 5290f4cb519..94dd68dd4fb 100644 --- a/openerp/addons/base/i18n/es.po +++ b/openerp/addons/base/i18n/es.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:46+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:43+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/es_AR.po b/openerp/addons/base/i18n/es_AR.po index a6047c27dc2..5dc6f4ff6f1 100644 --- a/openerp/addons/base/i18n/es_AR.po +++ b/openerp/addons/base/i18n/es_AR.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:48+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:45+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/es_BO.po b/openerp/addons/base/i18n/es_BO.po index ff376f2a0ae..01752c54c0c 100644 --- a/openerp/addons/base/i18n/es_BO.po +++ b/openerp/addons/base/i18n/es_BO.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:49+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:47+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/es_CL.po b/openerp/addons/base/i18n/es_CL.po index e85936de771..92f2f2fb43e 100644 --- a/openerp/addons/base/i18n/es_CL.po +++ b/openerp/addons/base/i18n/es_CL.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:48+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:46+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/es_CR.po b/openerp/addons/base/i18n/es_CR.po index 969bbe3e25c..5a6c3036f2c 100644 --- a/openerp/addons/base/i18n/es_CR.po +++ b/openerp/addons/base/i18n/es_CR.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:49+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:47+0000\n" "X-Generator: Launchpad (build 16916)\n" "Language: \n" diff --git a/openerp/addons/base/i18n/es_DO.po b/openerp/addons/base/i18n/es_DO.po index 5e22c757364..66c6c7dec57 100644 --- a/openerp/addons/base/i18n/es_DO.po +++ b/openerp/addons/base/i18n/es_DO.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:48+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:46+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/es_EC.po b/openerp/addons/base/i18n/es_EC.po index 0035789b6da..ee6e0f006bd 100644 --- a/openerp/addons/base/i18n/es_EC.po +++ b/openerp/addons/base/i18n/es_EC.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:50+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:48+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/es_MX.po b/openerp/addons/base/i18n/es_MX.po index 6268a950bbc..6dbee6f72f5 100644 --- a/openerp/addons/base/i18n/es_MX.po +++ b/openerp/addons/base/i18n/es_MX.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:49+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:48+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/es_PE.po b/openerp/addons/base/i18n/es_PE.po index f992ba35e92..5c582182184 100644 --- a/openerp/addons/base/i18n/es_PE.po +++ b/openerp/addons/base/i18n/es_PE.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:50+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:48+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/es_VE.po b/openerp/addons/base/i18n/es_VE.po index 606226222ea..c77bb1d8597 100644 --- a/openerp/addons/base/i18n/es_VE.po +++ b/openerp/addons/base/i18n/es_VE.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:47+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:45+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/et.po b/openerp/addons/base/i18n/et.po index a5d7c6d6c95..2d49cc78eda 100644 --- a/openerp/addons/base/i18n/et.po +++ b/openerp/addons/base/i18n/et.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:39+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:35+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/eu.po b/openerp/addons/base/i18n/eu.po index 5fff780629c..f2e9b88d7f1 100644 --- a/openerp/addons/base/i18n/eu.po +++ b/openerp/addons/base/i18n/eu.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:37+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:33+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/fa.po b/openerp/addons/base/i18n/fa.po index b09b365c526..b322c074c5f 100644 --- a/openerp/addons/base/i18n/fa.po +++ b/openerp/addons/base/i18n/fa.po @@ -9,7 +9,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:44+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:41+0000\n" "X-Generator: Launchpad (build 16916)\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 c973339c63e..06d57f17ed5 100644 --- a/openerp/addons/base/i18n/fa_AF.po +++ b/openerp/addons/base/i18n/fa_AF.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:50+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:49+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/fi.po b/openerp/addons/base/i18n/fi.po index 07d98a2c908..9884ef8b1ff 100644 --- a/openerp/addons/base/i18n/fi.po +++ b/openerp/addons/base/i18n/fi.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:39+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:36+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base @@ -13158,7 +13158,7 @@ msgstr "" #. module: base #: field:res.company,company_registry:0 msgid "Company Registry" -msgstr "Yritysrekisteri" +msgstr "Y-tunnus" #. module: base #: view:ir.actions.report.xml:0 @@ -13471,7 +13471,7 @@ msgstr "Riippuvuudet:" #. module: base #: field:res.company,vat:0 msgid "Tax ID" -msgstr "Vero ID" +msgstr "VAT-numero" #. module: base #: model:ir.module.module,shortdesc:base.module_account_bank_statement_extensions @@ -13821,7 +13821,7 @@ msgstr "Marokko - Kirjanpito" #: field:res.bank,bic:0 #: field:res.partner.bank,bank_bic:0 msgid "Bank Identifier Code" -msgstr "BIC koodi" +msgstr "BIC-koodi" #. module: base #: view:base.language.export:0 diff --git a/openerp/addons/base/i18n/fr.po b/openerp/addons/base/i18n/fr.po index e77035c9574..7b2512d903e 100644 --- a/openerp/addons/base/i18n/fr.po +++ b/openerp/addons/base/i18n/fr.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:40+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:36+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/fr_CA.po b/openerp/addons/base/i18n/fr_CA.po index 63fa854f839..780bc801f39 100644 --- a/openerp/addons/base/i18n/fr_CA.po +++ b/openerp/addons/base/i18n/fr_CA.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:48+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:46+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/gl.po b/openerp/addons/base/i18n/gl.po index cff4bafb75a..f0708a9968f 100644 --- a/openerp/addons/base/i18n/gl.po +++ b/openerp/addons/base/i18n/gl.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:40+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:37+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/gu.po b/openerp/addons/base/i18n/gu.po index 5d6e2d50420..a663cc2336f 100644 --- a/openerp/addons/base/i18n/gu.po +++ b/openerp/addons/base/i18n/gu.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:41+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:37+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/he.po b/openerp/addons/base/i18n/he.po index 2f31ae2c3c7..546bd34144e 100644 --- a/openerp/addons/base/i18n/he.po +++ b/openerp/addons/base/i18n/he.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:41+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:37+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/hi.po b/openerp/addons/base/i18n/hi.po index 8c43c8f933d..fdb6f8a7733 100644 --- a/openerp/addons/base/i18n/hi.po +++ b/openerp/addons/base/i18n/hi.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:41+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:38+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/hr.po b/openerp/addons/base/i18n/hr.po index 4c94c2fa7df..0b634c571a8 100644 --- a/openerp/addons/base/i18n/hr.po +++ b/openerp/addons/base/i18n/hr.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:45+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:42+0000\n" "X-Generator: Launchpad (build 16916)\n" "Language: hr\n" diff --git a/openerp/addons/base/i18n/hu.po b/openerp/addons/base/i18n/hu.po index 361444eb848..91c34ae6657 100644 --- a/openerp/addons/base/i18n/hu.po +++ b/openerp/addons/base/i18n/hu.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:41+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:38+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/hy.po b/openerp/addons/base/i18n/hy.po index 1d3b92c118b..b7cd2bb6b60 100644 --- a/openerp/addons/base/i18n/hy.po +++ b/openerp/addons/base/i18n/hy.po @@ -9,7 +9,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:37+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:33+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/id.po b/openerp/addons/base/i18n/id.po index 1e67e4d07da..dc136feb360 100644 --- a/openerp/addons/base/i18n/id.po +++ b/openerp/addons/base/i18n/id.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:42+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:38+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/is.po b/openerp/addons/base/i18n/is.po index 4bcccb5530e..8f82dae30ee 100644 --- a/openerp/addons/base/i18n/is.po +++ b/openerp/addons/base/i18n/is.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:41+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:38+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/it.po b/openerp/addons/base/i18n/it.po index c9631c7f581..af28660269a 100644 --- a/openerp/addons/base/i18n/it.po +++ b/openerp/addons/base/i18n/it.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:42+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:39+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/ja.po b/openerp/addons/base/i18n/ja.po index 383540b1d4f..abca6dce0dd 100644 --- a/openerp/addons/base/i18n/ja.po +++ b/openerp/addons/base/i18n/ja.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:42+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:39+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/ka.po b/openerp/addons/base/i18n/ka.po index e8af7a5fc47..23febc50180 100644 --- a/openerp/addons/base/i18n/ka.po +++ b/openerp/addons/base/i18n/ka.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:40+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:36+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/kk.po b/openerp/addons/base/i18n/kk.po index f3aeceb85af..be14353dbbb 100644 --- a/openerp/addons/base/i18n/kk.po +++ b/openerp/addons/base/i18n/kk.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:42+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:39+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/ko.po b/openerp/addons/base/i18n/ko.po index 4b6da274dc9..7f8a6294d67 100644 --- a/openerp/addons/base/i18n/ko.po +++ b/openerp/addons/base/i18n/ko.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:42+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:39+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/lt.po b/openerp/addons/base/i18n/lt.po index 4e080f9d7fc..41bf6184d54 100644 --- a/openerp/addons/base/i18n/lt.po +++ b/openerp/addons/base/i18n/lt.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:43+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:40+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/lv.po b/openerp/addons/base/i18n/lv.po index de8c9289f47..2dffa10010b 100644 --- a/openerp/addons/base/i18n/lv.po +++ b/openerp/addons/base/i18n/lv.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:43+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:39+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base @@ -16519,3 +16519,10 @@ msgstr "" #~ msgstr "" #~ "Nevar izveidot dokumentu (%s) ! Pārbaudiet, vai lietotājs pieder kādai no " #~ "šīm grupām: %s." + +#~ msgid "" +#~ "\n" +#~ " " +#~ msgstr "" +#~ "\n" +#~ " " diff --git a/openerp/addons/base/i18n/mk.po b/openerp/addons/base/i18n/mk.po index 5ca2aa2d844..959625eb326 100644 --- a/openerp/addons/base/i18n/mk.po +++ b/openerp/addons/base/i18n/mk.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:43+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:40+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/mn.po b/openerp/addons/base/i18n/mn.po index 58838e67f53..0a7fdda48bb 100644 --- a/openerp/addons/base/i18n/mn.po +++ b/openerp/addons/base/i18n/mn.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:43+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:40+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base @@ -3094,7 +3094,7 @@ msgstr "Моделийн Тойм" #. module: base #: model:ir.module.module,shortdesc:base.module_product_margin msgid "Margins by Products" -msgstr "Захалбар Бараагаар" +msgstr "Бохир ашиг Бараагаар" #. module: base #: model:ir.ui.menu,name:base.menu_invoiced @@ -5214,7 +5214,7 @@ msgstr "" " * Дагавар\n" " * Дараагийн Дугаар\n" " * Нэмэгдэх Тоо\n" -" * Гүйцээлтийн тоо\n" +" * Дугаарлалтын гүйцээлт\n" " " #. module: base @@ -7400,7 +7400,7 @@ msgid "" " " msgstr "" "\n" -"Энэ модуль нь борлуулалтын захиалга дээр 'Тодотгол' нэмдэг.\n" +"Энэ модуль нь борлуулалтын захиалга дээр 'Бохир ашиг' нэмдэг.\n" "=============================================\n" "\n" "Нэгж үнэ, Өртөг үнийг харьцуулан бохир ашгийг харуулдаг.\n" @@ -11017,7 +11017,7 @@ msgstr "Өөриймшүүлсэн" #. module: base #: model:ir.module.module,shortdesc:base.module_sale_margin msgid "Margins in Sales Orders" -msgstr "Борлуулалтын захиалгын зөрүү" +msgstr "Борлуулалтын захиалгын бохир ашиг" #. module: base #: model:ir.module.module,shortdesc:base.module_purchase @@ -12353,7 +12353,7 @@ msgid "" "you need.\n" msgstr "" "\n" -"Бараанд борлуулалт, худалдан авалт, тохируулалт зэрэг олон сонирхолтой " +"Бараанд борлуулалт, худалдан авалт, бохир ашиг зэрэг олон сонирхолтой " "үзүүлэлтийг тооцолох тайлангийн менюг нэмдэг.\n" "=============================================================================" "================================================\n" @@ -13178,7 +13178,7 @@ msgstr "Гүйцэтгэх дараагийн огноо" #. module: base #: field:ir.sequence,padding:0 msgid "Number Padding" -msgstr "Тоон дугаарын гүйцээлт" +msgstr "Дугаарын гүйцээлт" #. module: base #: help:multi_company.default,field_id:0 @@ -18268,9 +18268,6 @@ msgstr "Бүртгүүлэх" #~ msgid "View Ordering" #~ msgstr "Дэлгэц эрэмблэлт" -#~ msgid "Number padding" -#~ msgstr "Тоон дугаарын урт" - #~ msgid "Object Identifiers" #~ msgstr "Обьект бүрдүүлбэр" @@ -24131,3 +24128,6 @@ msgstr "Бүртгүүлэх" #~ msgid "Retro-Planning on Events" #~ msgstr "Үйл явдлын хойноос урагшаа төлөвлөлт" + +#~ msgid "Number padding" +#~ msgstr "Тоон дугаарын гүйцээлт" diff --git a/openerp/addons/base/i18n/nb.po b/openerp/addons/base/i18n/nb.po index 803b851b55c..fa284c499cc 100644 --- a/openerp/addons/base/i18n/nb.po +++ b/openerp/addons/base/i18n/nb.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:43+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:40+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/nl.po b/openerp/addons/base/i18n/nl.po index 75b988f395f..437b1573219 100644 --- a/openerp/addons/base/i18n/nl.po +++ b/openerp/addons/base/i18n/nl.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:39+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:35+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base @@ -1625,7 +1625,7 @@ msgstr "" #: model:ir.module.category,name:base.module_category_purchase_management #: model:ir.ui.menu,name:base.menu_purchase_root msgid "Purchases" -msgstr "Inkoop" +msgstr "Inkopen" #. module: base #: model:res.country,name:base.md diff --git a/openerp/addons/base/i18n/nl_BE.po b/openerp/addons/base/i18n/nl_BE.po index ae1e9323694..68516ab59e0 100644 --- a/openerp/addons/base/i18n/nl_BE.po +++ b/openerp/addons/base/i18n/nl_BE.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:48+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:47+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/pl.po b/openerp/addons/base/i18n/pl.po index 6766222fb5a..153b4e2d6e4 100644 --- a/openerp/addons/base/i18n/pl.po +++ b/openerp/addons/base/i18n/pl.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:44+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:41+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/pt.po b/openerp/addons/base/i18n/pt.po index fc92e7f4efc..ccc2c104bda 100644 --- a/openerp/addons/base/i18n/pt.po +++ b/openerp/addons/base/i18n/pt.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:44+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:41+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/pt_BR.po b/openerp/addons/base/i18n/pt_BR.po index 4eaf7f824dd..cb4d741324a 100644 --- a/openerp/addons/base/i18n/pt_BR.po +++ b/openerp/addons/base/i18n/pt_BR.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:47+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:45+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/ro.po b/openerp/addons/base/i18n/ro.po index 9d53ec1a629..e7e599f738f 100644 --- a/openerp/addons/base/i18n/ro.po +++ b/openerp/addons/base/i18n/ro.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:44+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:42+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base @@ -431,7 +431,8 @@ msgstr "" "\n" "Va permite sa adaugati metode de livrare la comenzile de vanzare si " "ridicare.\n" -"==============================================================\n" +"=============================================================================" +"\n" "\n" "Va puteti defini propriile grile de preturi pentru transport si livrare. " "Atunci cand creati \n" @@ -617,7 +618,7 @@ msgid "" msgstr "" "\n" "Modul pentru definirea obiectului contabilitatii analitice.\n" -"=========================================================\n" +"===========================================================\n" "\n" "In OpenERP, conturile analitice sunt legate de conturile generale, dar sunt " "tratate\n" @@ -855,7 +856,7 @@ msgid "" msgstr "" "\n" "Contabilitate si Management Financiar.\n" -"====================================\n" +"======================================\n" "\n" "Modulul Finante si contabilitate acopera:\n" "--------------------------------------------\n" @@ -899,7 +900,7 @@ msgid "" msgstr "" "\n" "Meniul pentru Marketing.\n" -"=======================\n" +"========================\n" "\n" "Contine programul de instalare pentru modulele legate de marketing.\n" " " @@ -915,7 +916,7 @@ msgid "" msgstr "" "\n" "Modulul OpenERP Web LinkedIn.\n" -"============================\n" +"=============================\n" "Acest modul asigura Integrarea lui LinkedIn in OpenERP.\n" " " @@ -1072,7 +1073,7 @@ msgid "" msgstr "" "\n" "Gestioneaza concediile si cererile de alocare\n" -"=====================================\n" +"=============================================\n" "\n" "Aceasta aplicatie controleaza programul de concedii al companiei " "dumneavoastra. Le permite angajatilor sa solicite concedii. Astfel, " @@ -1331,7 +1332,7 @@ msgid "" msgstr "" "\n" "Managementul general OpenERP al Relatiilor cu Clientii\n" -" ====================================================\n" +"======================================================\n" " \n" "Aceasta aplicatie permite unui grup de oameni sa gestioneze in mod " "inteligent si eficient piste, oportunitati, intalniri si apeluri " @@ -1356,7 +1357,7 @@ msgstr "" " \n" "\n" "Tabloul de bord pentru MRC va include:\n" -" -------------------------------\n" +"--------------------------------------\n" " * Veniturile Planificate dupa Etapa si Utilizator (grafic)\n" " * Oportunitati dupa Etapa (grafic)\n" @@ -2011,7 +2012,7 @@ msgid "" msgstr "" "\n" "Modulul de baza pentru gestionarea pranzului.\n" -"================================\n" +"=============================================\n" "\n" "Multe companii comanda sandwich-uri, pizza si alte mancaruri de la " "furnizorii obisnuiti, pentru angajatii lor pentru a le oferi mai multe " @@ -2250,7 +2251,7 @@ msgid "" msgstr "" "\n" "Drepturi de acces contabile\n" -"========================\n" +"===========================\n" "Ii ofera utilizatorului Administrator acces la toate caracteristicile " "contabile, precum elemente ale jurnalului si planul de conturi.\n" "\n" @@ -2444,7 +2445,8 @@ msgstr "" "\n" "Sincronizarea inregistrarilor sarcinilor proiectului cu inregistrarile fisei " "de pontaj.\n" -"====================================================================\n" +"=============================================================================" +"==========\n" "\n" "Acest modul va permite sa transferati inregistrarile sub sarcini definite " "pentru Managementul\n" @@ -2778,7 +2780,7 @@ msgid "" msgstr "" "\n" "Inregistreaza si valideaza fisele de pontaj si prezenta cu usurinta\n" -"=====================================================\n" +"===================================================================\n" "\n" "Aceasta aplicatie ofera un ecran nou care va permite sa gestionati atat " "prezenta (La intrare/La iesire) cat si inregistrare muncii (fisa de pontaj) " @@ -2874,7 +2876,7 @@ msgid "" msgstr "" "\n" "Permite anonimilor sa Acceseze Portalul.\n" -"=================================\n" +"========================================\n" " " #. module: base @@ -3021,7 +3023,7 @@ msgid "" msgstr "" "\n" "Managementul Serviciului de asistenta tehnica.\n" -"===================================\n" +"==============================================\n" "\n" "La fel ca si inregistrarea si prelucrarea reclamatiilor, Serviciul de " "Asistenta tehnica este un instrument\n" @@ -3095,7 +3097,8 @@ msgstr "" "\n" "Acesta este modulul de baza pentru gestionarea produselor si a listelor de " "preturi in OpenERP.\n" -"========================================================================\n" +"=============================================================================" +"=================\n" "\n" "Produsele accepta variante, diferite metode de stabilire a pretului, " "informatii referitoare la furnizori,\n" @@ -3103,7 +3106,7 @@ msgstr "" "proprietati.\n" "\n" "Listele de preturi accepta:\n" -"--------------------\n" +"---------------------------\n" " * Niveluri multiple de reducere (dupa produs, categorie, cantitati)\n" " * Calculeaza pretul pe baza unor criterii diferite:\n" " * Alte liste de preturi\n" @@ -3134,11 +3137,10 @@ msgid "" msgstr "" "\n" "Configureaza valorile implicite pentru conturile dumneavoastra analitice.\n" -"==============================================\n" +"=========================================================================\n" "\n" "Permite selectarea automata a conturilor analitice pe baza criteriilor:\n" -"-----------------------------------------------------------------------------" -"------\n" +"-----------------------------------------------------------------------\n" " * Produs \n" " * Partener\n" " * Utilizator\n" @@ -3216,7 +3218,8 @@ msgstr "" "\n" "Modulul de baza pentru gestionarea distribuirii analitice si a comenzilor de " "vanzare.\n" -"==========================================================================\n" +"=============================================================================" +"========\n" "\n" "Folosind acest modul veti putea lega conturile analitice de comenzile de " "vanzare.\n" @@ -3292,7 +3295,7 @@ msgid "" msgstr "" "\n" "Acesta este un sistem complet de gestionare a documentelor.\n" -"==============================================\n" +"===========================================================\n" " * Autentificare Utilizator\n" " * Indexare Documente:- fisierele .pptx si .docx nu sunt acceptate in " "platforma Windows.\n" @@ -3351,8 +3354,8 @@ msgid "" " " msgstr "" "\n" -"Gestiunea cotarilor si a comenzilor de vanzare\n" -" ==================================\n" +"Gestionare cotațiilor și a comenzilor de vânzare\n" +"================================================\n" "\n" "Aceasta aplicatie va permite sa va gestionati obiectivele de vanzari intr-un " "mod efectiv si eficient, tinand evidenta tuturor comenzilor de vanzare si " @@ -3363,7 +3366,7 @@ msgstr "" "* **Cotare** -> **Comanda de vanzare** -> **Factura**\n" "\n" "Preferinte (numai daca este instalat si modulul Gestionarea Depozitului)\n" -"-----------------------------------------------------\n" +"------------------------------------------------------------------------\n" "\n" "Daca ati instalat si Gestionarea Depozitului, puteti efectua urmatoarele:\n" "\n" @@ -3382,7 +3385,7 @@ msgstr "" "\n" "\n" "Tabloul de bord pentru Managerul de Vanzari va include\n" -"------------------------------------------------\n" +"------------------------------------------------------\n" "* Cotatiile mele\n" "* Cifra de afaceri lunara (Grafic)\n" " " @@ -3414,7 +3417,7 @@ msgid "" msgstr "" "\n" "Modul pentru atasarea unui document google oricarui model.\n" -"================================================\n" +"==========================================================\n" #. module: base #: code:addons/base/ir/ir_fields.py:333 diff --git a/openerp/addons/base/i18n/ru.po b/openerp/addons/base/i18n/ru.po index 8462334a157..78a9fc009d3 100644 --- a/openerp/addons/base/i18n/ru.po +++ b/openerp/addons/base/i18n/ru.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:45+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:42+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/sk.po b/openerp/addons/base/i18n/sk.po index 86494b394d0..cf4d85d449d 100644 --- a/openerp/addons/base/i18n/sk.po +++ b/openerp/addons/base/i18n/sk.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:45+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:42+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/sl.po b/openerp/addons/base/i18n/sl.po index e6004537e27..a8875055ba1 100644 --- a/openerp/addons/base/i18n/sl.po +++ b/openerp/addons/base/i18n/sl.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:45+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:43+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/sq.po b/openerp/addons/base/i18n/sq.po index 8b77e92d32d..1944d14c787 100644 --- a/openerp/addons/base/i18n/sq.po +++ b/openerp/addons/base/i18n/sq.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:37+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:33+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/sr.po b/openerp/addons/base/i18n/sr.po index b82fd4dab1d..64353f30337 100644 --- a/openerp/addons/base/i18n/sr.po +++ b/openerp/addons/base/i18n/sr.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:45+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:42+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/sr@latin.po b/openerp/addons/base/i18n/sr@latin.po index f7fa2e21503..f816a58a2f4 100644 --- a/openerp/addons/base/i18n/sr@latin.po +++ b/openerp/addons/base/i18n/sr@latin.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:50+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:49+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/sv.po b/openerp/addons/base/i18n/sv.po index 4223fd22758..901f0879025 100644 --- a/openerp/addons/base/i18n/sv.po +++ b/openerp/addons/base/i18n/sv.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:46+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:43+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/th.po b/openerp/addons/base/i18n/th.po index 24b5ef7dad9..9bfa5e24012 100644 --- a/openerp/addons/base/i18n/th.po +++ b/openerp/addons/base/i18n/th.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:46+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:43+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base @@ -25,6 +25,9 @@ msgid "" "================================================\n" " " msgstr "" +"\n" +"โมดูลสำหรับการเขียน และพิมพ์เช็ค\n" +" " #. module: base #: model:res.country,name:base.sh diff --git a/openerp/addons/base/i18n/tlh.po b/openerp/addons/base/i18n/tlh.po index b472d2931e0..a5ec6474b4a 100644 --- a/openerp/addons/base/i18n/tlh.po +++ b/openerp/addons/base/i18n/tlh.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:46+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:43+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/tr.po b/openerp/addons/base/i18n/tr.po index 97a4bc9fdd9..49f4b9beda2 100644 --- a/openerp/addons/base/i18n/tr.po +++ b/openerp/addons/base/i18n/tr.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:46+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:44+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/uk.po b/openerp/addons/base/i18n/uk.po index 4f00b0773af..9820330aa71 100644 --- a/openerp/addons/base/i18n/uk.po +++ b/openerp/addons/base/i18n/uk.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:47+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:44+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/ur.po b/openerp/addons/base/i18n/ur.po index 1abdedd391b..56aeeaac51e 100644 --- a/openerp/addons/base/i18n/ur.po +++ b/openerp/addons/base/i18n/ur.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:47+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:44+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/vi.po b/openerp/addons/base/i18n/vi.po index b8287330153..0d0344feb28 100644 --- a/openerp/addons/base/i18n/vi.po +++ b/openerp/addons/base/i18n/vi.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:47+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:44+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/zh_CN.po b/openerp/addons/base/i18n/zh_CN.po index 53ec0e4b92c..8ae359ba3ae 100644 --- a/openerp/addons/base/i18n/zh_CN.po +++ b/openerp/addons/base/i18n/zh_CN.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:49+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:48+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/zh_HK.po b/openerp/addons/base/i18n/zh_HK.po index 86da82ca6d9..37770edda37 100644 --- a/openerp/addons/base/i18n/zh_HK.po +++ b/openerp/addons/base/i18n/zh_HK.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:47+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:44+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/i18n/zh_TW.po b/openerp/addons/base/i18n/zh_TW.po index 8c8db3b3231..47f285186dc 100644 --- a/openerp/addons/base/i18n/zh_TW.po +++ b/openerp/addons/base/i18n/zh_TW.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:49+0000\n" +"X-Launchpad-Export-Date: 2014-02-14 06:47+0000\n" "X-Generator: Launchpad (build 16916)\n" #. module: base diff --git a/openerp/addons/base/ir/ir_http.py b/openerp/addons/base/ir/ir_http.py index 18699110605..8cc24c88cce 100644 --- a/openerp/addons/base/ir/ir_http.py +++ b/openerp/addons/base/ir/ir_http.py @@ -135,6 +135,8 @@ class ir_http(osv.AbstractModel): m = request.registry.get('ir.module.module') ids = m.search(cr, openerp.SUPERUSER_ID, [('state', '=', 'installed'), ('name', '!=', 'web')], context=request.context) installed = set(x['name'] for x in m.read(cr, 1, ids, ['name'], context=request.context)) + if openerp.tools.config['test_enable']: + installed.add(openerp.modules.module.current_test) mods = [''] + openerp.conf.server_wide_modules + sorted(installed) self._routing_map = http.routing_map(mods, False, converters=self._get_converters()) diff --git a/openerp/addons/base/res/res_company.py b/openerp/addons/base/res/res_company.py index 558afbeaae0..dfe049bf2b3 100644 --- a/openerp/addons/base/res/res_company.py +++ b/openerp/addons/base/res/res_company.py @@ -147,7 +147,7 @@ class res_company(osv.osv): 'website': fields.related('partner_id', 'website', string="Website", type="char", size=64), 'vat': fields.related('partner_id', 'vat', string="Tax ID", type="char", size=32), 'company_registry': fields.char('Company Registry', size=64), - 'paper_format': fields.selection([('a4', 'A4'), ('us_letter', 'US Letter')], "Paper Format", required=True), + 'rml_paper_format': fields.selection([('a4', 'A4'), ('us_letter', 'US Letter')], "Paper Format", required=True, oldname='paper_format'), } _sql_constraints = [ ('name_uniq', 'unique (name)', 'The company name must be unique !') @@ -388,8 +388,8 @@ class res_company(osv.osv): _header_a4 = _header_main % ('21.7cm', '27.7cm', '27.7cm', '27.7cm', '27.8cm', '27.3cm', '25.3cm', '25.0cm', '25.0cm', '24.6cm', '24.6cm', '24.5cm', '24.5cm') _header_letter = _header_main % ('20cm', '26.0cm', '26.0cm', '26.0cm', '26.1cm', '25.6cm', '23.6cm', '23.3cm', '23.3cm', '22.9cm', '22.9cm', '22.8cm', '22.8cm') - def onchange_paper_format(self, cr, uid, ids, paper_format, context=None): - if paper_format == 'us_letter': + def onchange_rml_paper_format(self, cr, uid, ids, rml_paper_format, context=None): + if rml_paper_format == 'us_letter': return {'value': {'rml_header': self._header_letter}} return {'value': {'rml_header': self._header_a4}} @@ -398,7 +398,7 @@ class res_company(osv.osv): _defaults = { 'currency_id': _get_euro, - 'paper_format': 'a4', + 'rml_paper_format': 'a4', 'rml_header':_get_header, 'rml_header2': _header2, 'rml_header3': _header3, diff --git a/openerp/addons/base/res/res_company_view.xml b/openerp/addons/base/res/res_company_view.xml index c037b0e76ac..7a146f6bc5e 100644 --- a/openerp/addons/base/res/res_company_view.xml +++ b/openerp/addons/base/res/res_company_view.xml @@ -23,9 +23,6 @@
-
-
- - - - - - - - - +
+
+
diff --git a/openerp/addons/base/tests/__init__.py b/openerp/addons/base/tests/__init__.py index 6358dffa45b..2e55989ba19 100644 --- a/openerp/addons/base/tests/__init__.py +++ b/openerp/addons/base/tests/__init__.py @@ -20,7 +20,6 @@ import test_res_config import test_res_lang import test_search import test_translate -import test_ui #import test_uninstall import test_view_validation import test_views diff --git a/openerp/addons/base/tests/test_base.py b/openerp/addons/base/tests/test_base.py index 20382737529..fe8ddc411d7 100644 --- a/openerp/addons/base/tests/test_base.py +++ b/openerp/addons/base/tests/test_base.py @@ -375,6 +375,59 @@ class test_translation(common.TransactionCase): fr_context_cat = self.res_category.browse(cr, uid, self.new_fr_cat_id, context={'lang':'fr_FR'}) self.assertEqual(fr_context_cat.name, 'Clients (copie)', "Did not used default value for translated value") +test_state = None +#: Stores state information across multiple test classes +def setUpModule(): + global test_state + test_state = {} +def tearDownModule(): + global test_state + test_state = None + +class TestPhaseInstall00(unittest2.TestCase): + """ + WARNING: Relies on tests being run in alphabetical order + """ + @classmethod + def setUpClass(cls): + cls.state = None + + def test_00_setup(self): + type(self).state = 'init' + + @common.at_install(False) + def test_01_no_install(self): + type(self).state = 'error' + + def test_02_check(self): + self.assertEqual( + self.state, 'init', + "Testcase state should not have been transitioned from 00") + +class TestPhaseInstall01(unittest2.TestCase): + at_install = False + + def test_default_norun(self): + self.fail("An unmarket test in a non-at-install case should not run") + + @common.at_install(True) + def test_set_run(self): + test_state['set_at_install'] = True + +class TestPhaseInstall02(unittest2.TestCase): + """ + Can't put the check for test_set_run in the same class: if + @common.at_install does not work for test_set_run, it won't work for + the other one either. Thus move checking of whether test_set_run has + correctly run indeed to a separate class. + + Warning: relies on *classes* being run in alphabetical order in test + modules + """ + def test_check_state(self): + self.assertTrue( + test_state.get('set_at_install'), + "The flag should be set if local overriding of runstate") if __name__ == '__main__': unittest2.main() diff --git a/openerp/addons/base/tests/test_ui.py b/openerp/addons/base/tests/test_ui.py deleted file mode 100644 index 63136b36a31..00000000000 --- a/openerp/addons/base/tests/test_ui.py +++ /dev/null @@ -1,13 +0,0 @@ -# -*- coding: utf-8 -*- -import os - -import openerp - -class TestUi(openerp.tests.HttpCase): - def test_js(self): - self.phantom_js('/',"console.log('ok')","console", login=None) - - def test_jsfile(self): - self.phantom_jsfile(os.path.join(os.path.dirname(__file__), 'test_ui_hello.js')) - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/addons/base/tests/test_ui_hello.js b/openerp/addons/base/tests/test_ui_hello.js deleted file mode 100644 index 6a453e947aa..00000000000 --- a/openerp/addons/base/tests/test_ui_hello.js +++ /dev/null @@ -1,5 +0,0 @@ -console.log("hello from test_phantom_hello.js"); -console.log("ok"); -// For a failure use: -//console.log("error"); -phantom.exit(); diff --git a/openerp/addons/base/tests/test_xmlrpc.py b/openerp/addons/base/tests/test_xmlrpc.py index ab1d3821c40..854e345078a 100644 --- a/openerp/addons/base/tests/test_xmlrpc.py +++ b/openerp/addons/base/tests/test_xmlrpc.py @@ -3,26 +3,23 @@ import time import unittest2 import xmlrpclib -from openerp.tests import common +import openerp -DB = common.DB -ADMIN_USER = common.ADMIN_USER -ADMIN_USER_ID = common.ADMIN_USER_ID -ADMIN_PASSWORD = common.ADMIN_PASSWORD +DB = openerp.tests.common.DB -class test_xmlrpc(common.HttpCase): +class test_xmlrpc(openerp.tests.common.HttpCase): def test_01_xmlrpc_login(self): """ Try to login on the common service. """ - uid = self.xmlrpc_common.login(DB, ADMIN_USER, ADMIN_PASSWORD) - self.assertTrue(uid == ADMIN_USER_ID) + uid = self.xmlrpc_common.login(DB, 'admin', 'admin') + self.assertTrue(uid == 1) def test_xmlrpc_ir_model_search(self): """ Try a search on the object service. """ o = self.xmlrpc_object - ids = o.execute(DB, ADMIN_USER_ID, ADMIN_PASSWORD, 'ir.model', 'search', []) + ids = o.execute(DB, 1, 'admin', 'ir.model', 'search', []) self.assertIsInstance(ids, list) - ids = o.execute(DB, ADMIN_USER_ID, ADMIN_PASSWORD, 'ir.model', 'search', [], {}) + ids = o.execute(DB, 1, 'admin', 'ir.model', 'search', [], {}) self.assertIsInstance(ids, list) # This test was written to test the creation of a new RPC endpoint, not diff --git a/openerp/http.py b/openerp/http.py index fe5b113d286..74d833e4730 100644 --- a/openerp/http.py +++ b/openerp/http.py @@ -168,9 +168,9 @@ class WebRequest(object): """ # some magic to lazy create the cr if not self._cr: - if openerp.tools.config['test_enable'] and self.session_id in openerp.tests.common.HTTP_SESSION: - self._cr = openerp.tests.common.HTTP_SESSION[self.session_id] - else: + # Test cursors + self._cr = openerp.tests.common.acquire_test_cursor(self.session_id) + if not self._cr: self._cr = self.registry.db.cursor() return self._cr @@ -180,10 +180,13 @@ class WebRequest(object): def __exit__(self, exc_type, exc_value, traceback): _request_stack.pop() - if self._cr and not (openerp.tools.config['test_enable'] and self.session_id in openerp.tests.common.HTTP_SESSION): - if exc_type is None: - self._cr.commit() - self._cr.close() + + if self._cr: + # Dont commit test cursors + if not openerp.tests.common.release_test_cursor(self.session_id): + if exc_type is None: + self._cr.commit() + self._cr.close() # just to be sure no one tries to re-use the request self.disable_db = True self.uid = None @@ -595,7 +598,7 @@ class Service(object): class Model(object): """ .. deprecated:: 8.0 - Use the resistry and cursor in ``openerp.addons.web.http.request`` instead. + Use the resistry and cursor in ``openerp.http.request`` instead. """ def __init__(self, session, model): self.session = session diff --git a/openerp/modules/module.py b/openerp/modules/module.py index e3b8e10cc97..a443a2576ab 100644 --- a/openerp/modules/module.py +++ b/openerp/modules/module.py @@ -20,15 +20,14 @@ # ############################################################################## -import base64 +import functools import imp import itertools import logging import os import re import sys -import types -from cStringIO import StringIO +import unittest from os.path import join as opj import unittest2 @@ -50,8 +49,6 @@ ad_paths = [] # Modules already loaded loaded = [] -_logger = logging.getLogger(__name__) - class AddonsImportHook(object): """ Import hook to load OpenERP addons from multiple paths. @@ -70,13 +67,10 @@ class AddonsImportHook(object): return self # We act as a loader too. def load_module(self, module_name): + if module_name in sys.modules: + return sys.modules[module_name] - module_parts = module_name.split('.') - if len(module_parts) == 3 and module_name.startswith('openerp.addons.'): - module_part = module_parts[2] - if module_name in sys.modules: - return sys.modules[module_name] - + _1, _2, module_part = module_name.split('.') # Note: we don't support circular import. f, path, descr = imp.find_module(module_part, ad_paths) mod = imp.load_module('openerp.addons.' + module_part, f, path, descr) @@ -328,7 +322,7 @@ def get_test_modules(module): # Try to import the module module = 'openerp.addons.' + module + '.tests' try: - m = __import__(module) + __import__(module) except Exception, e: # If module has no `tests` sub-module, no problem. if str(e) != 'No module named tests': @@ -336,10 +330,10 @@ def get_test_modules(module): return [] # include submodules too - result = [] - for name in sys.modules: - if name.startswith(module) and sys.modules[name]: - result.append(sys.modules[name]) + result = [mod_obj for name, mod_obj in sys.modules.iteritems() + if mod_obj # mod_obj can be None + if name.startswith(module) + if re.search(r'test_\w+$', name)] return result # Use a custom stream object to log the test executions. @@ -358,22 +352,72 @@ class TestStream(object): first = False _test_logger.info(c) +current_test = None + def run_unit_tests(module_name, dbname): """ - Return True or False if some tests were found and succeeded or failed. - Return None if no test was found. + :returns: ``True`` if all of ``module_name``'s tests succeeded, ``False`` + if any of them failed. + :rtype: bool """ + global current_test + current_test = module_name mods = get_test_modules(module_name) r = True for m in mods: - suite = unittest2.TestSuite() - for t in unittest2.TestLoader().loadTestsFromModule(m): - suite.addTest(t) - _logger.log(logging.INFO, 'module %s: running test %s.', module_name, m.__name__) + tests = unwrap_suite(unittest2.TestLoader().loadTestsFromModule(m)) + suite = unittest2.TestSuite(itertools.ifilter(runs_at_install, tests)) + _logger.info('module %s: running test %s.', module_name, m.__name__) + result = unittest2.TextTestRunner(verbosity=2, stream=TestStream()).run(suite) + if not result.wasSuccessful(): r = False - _logger.error('module %s: at least one error occurred in a test', module_name) + _logger.error("Module %s: %d failures, %d errors", + module_name, len(result.failures), len(result.errors)) + current_test = None return r +def runs_at(test, hook, default): + # by default, tests do not run post install + test_runs = getattr(test, hook, default) + + # for a test suite, we're done + if not isinstance(test, unittest.TestCase): + return test_runs + + # otherwise check the current test method to see it's been set to a + # different state + method = getattr(test, test._testMethodName) + return getattr(method, hook, test_runs) + +runs_at_install = functools.partial(runs_at, hook='at_install', default=True) +runs_post_install = functools.partial(runs_at, hook='post_install', default=False) + +def unwrap_suite(test): + """ + Attempts to unpack testsuites (holding suites or cases) in order to + generate a single stream of terminals (either test cases or customized + test suites). These can then be checked for run/skip attributes + individually. + + An alternative would be to use a variant of @unittest2.skipIf with a state + flag of some sort e.g. @unittest2.skipIf(common.runstate != 'at_install'), + but then things become weird with post_install as tests should *not* run + by default there + """ + if isinstance(test, unittest.TestCase): + yield test + return + + subtests = list(test) + # custom test suite (no test cases) + if not len(subtests): + yield test + return + + for item in itertools.chain.from_iterable( + itertools.imap(unwrap_suite, subtests)): + yield item + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/modules/registry.py b/openerp/modules/registry.py index a277d4f6402..78b7e5caeab 100644 --- a/openerp/modules/registry.py +++ b/openerp/modules/registry.py @@ -209,15 +209,6 @@ class TestRLock(object): def __exit__(self, type, value, traceback): self.release() -# def __enter__(self, *l, **kw): -# if openerp.tools.config['test_enable']: -# return -# return super(TestRlock, self).__enter__(*l, **kw) -# def __exit__(self, *l, **kw): -# if openerp.tools.config['test_enable']: -# return -# return super(TestRlock, self).__exit__(*l, **kw) - class RegistryManager(object): """ Model registries manager. diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index 6ac65125620..b24fd0cb6ae 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -2694,7 +2694,7 @@ class BaseModel(object): f_pg_notnull = res['attnotnull'] if isinstance(f, fields.function) and not f.store and\ not getattr(f, 'nodrop', False): - _logger.info('column %s (%s) in table %s removed: converted to a function !\n', + _logger.info('column %s (%s) converted to a function, removed from table %s', k, f.string, self._table) cr.execute('ALTER TABLE "%s" DROP COLUMN "%s" CASCADE' % (self._table, k)) cr.commit() diff --git a/openerp/report/render/rml2pdf/trml2pdf.py b/openerp/report/render/rml2pdf/trml2pdf.py index ad1ff656e1d..aaed9ddf4c6 100644 --- a/openerp/report/render/rml2pdf/trml2pdf.py +++ b/openerp/report/render/rml2pdf/trml2pdf.py @@ -982,7 +982,7 @@ class _rml_template(object): } pageSize = A4 if self.localcontext.get('company'): - pageSize = pagesize_map.get(self.localcontext.get('company').paper_format, A4) + pageSize = pagesize_map.get(self.localcontext.get('company').rml_paper_format, A4) if node.get('pageSize'): ps = map(lambda x:x.strip(), node.get('pageSize').replace(')', '').replace('(', '').split(',')) pageSize = ( utils.unit_get(ps[0]),utils.unit_get(ps[1]) ) diff --git a/openerp/tests/common.py b/openerp/tests/common.py index dd0350aa7ca..2f10371a8f0 100644 --- a/openerp/tests/common.py +++ b/openerp/tests/common.py @@ -4,16 +4,15 @@ The module :mod:`openerp.tests.common` provides unittest2 test cases and a few helpers and classes to write tests. """ +import errno import json import logging import os import select import subprocess -import sys import threading import time import unittest2 -import uuid import xmlrpclib import openerp @@ -25,20 +24,58 @@ ADDONS_PATH = openerp.tools.config['addons_path'] HOST = '127.0.0.1' PORT = openerp.tools.config['xmlrpc_port'] DB = openerp.tools.config['db_name'] - # If the database name is not provided on the command-line, # use the one on the thread (which means if it is provided on # the command-line, this will break when installing another # database from XML-RPC). if not DB and hasattr(threading.current_thread(), 'dbname'): DB = threading.current_thread().dbname - -ADMIN_USER = 'admin' +# Useless constant, tests are aware of the content of demo data ADMIN_USER_ID = openerp.SUPERUSER_ID -ADMIN_PASSWORD = 'admin' +# Magic session_id, unfortunately we have to serialize access to the cursors to +# serialize requests. We first tried to duplicate the database for each tests +# but this proved too slow. Any idea to improve this is welcome. HTTP_SESSION = {} +def acquire_test_cursor(session_id): + if openerp.tools.config['test_enable']: + cr = HTTP_SESSION.get(session_id) + if cr: + cr._test_lock.acquire() + return cr + +def release_test_cursor(session_id): + if openerp.tools.config['test_enable']: + cr = HTTP_SESSION.get(session_id) + if cr: + cr._test_lock.release() + return True + return False + +def at_install(flag): + """ Sets the at-install state of a test, the flag is a boolean specifying + whether the test should (``True``) or should not (``False``) run during + module installation. + + By default, tests are run at install. + """ + def decorator(obj): + obj.at_install = flag + return obj + return decorator +def post_install(flag): + """ Sets the post-install state of a test. The flag is a boolean + specifying whether the test should or should not run after a set of + module installations. + + By default, tests are *not* run after installation. + """ + def decorator(obj): + obj.post_install = flag + return obj + return decorator + class BaseCase(unittest2.TestCase): """ Subclass of TestCase for common OpenERP-specific code. @@ -126,9 +163,15 @@ class HttpCase(TransactionCase): def setUp(self): super(HttpCase, self).setUp() - self.session_id = uuid.uuid4().hex + # setup a magic session_id that will be rollbacked + self.session = openerp.http.root.session_store.new() + self.session_id = self.session.sid + self.session.db = DB + openerp.http.root.session_store.save(self.session) + self.cr._test_lock = threading.RLock() HTTP_SESSION[self.session_id] = self.cr + def tearDown(self): del HTTP_SESSION[self.session_id] super(HttpCase, self).tearDown() @@ -145,37 +188,52 @@ class HttpCase(TransactionCase): """ t0 = time.time() - buf = '' - while 1: + buf = bytearray() + while True: # timeout - if time.time() > t0 + timeout: - raise Exception("phantomjs test timeout (%ss)" % timeout) + self.assertLess(time.time(), t0 + timeout, + "PhantomJS tests should take less than %s seconds" % timeout) # read a byte - ready, _, _ = select.select([phantom.stdout], [], [], 0.5) + try: + ready, _, _ = select.select([phantom.stdout], [], [], 0.5) + except select.error, e: + # In Python 2, select.error has no relation to IOError or + # OSError, and no errno/strerror/filename, only a pair of + # unnamed arguments (matching errno and strerror) + err, _ = e.args + if err == errno.EINTR: continue + raise + if ready: s = phantom.stdout.read(1) - if s: - buf += s - else: + if not s: break + buf.append(s) # process lines if '\n' in buf: line, buf = buf.split('\n', 1) - _logger.info("phantomjs: %s", line) + + line = str(line) if line == "ok": - _logger.info("phantomjs test successful") - return - if line == "error": - raise Exception("phantomjs test failed") + break + if line.startswith("error"): + line_ = line[6:] + try: line_ = json.loads(line_) + except ValueError: pass + self.fail(line_ or "phantomjs test failed") + + try: line = json.loads(line) + except ValueError: pass + _logger.info("phantomjs: %s", line) def phantom_run(self, cmd, timeout): - _logger.info('executing %s', cmd) + _logger.debug('executing `%s`', ' '.join(cmd)) try: phantom = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) except OSError: - _logger.info("phantomjs not found, test %s skipped", jsfile) + raise unittest2.SkipTest("PhantomJS not found") try: self.phantom_poll(phantom, timeout) finally: @@ -197,8 +255,9 @@ class HttpCase(TransactionCase): cmd = ['phantomjs', jsfile, phantomtest, json.dumps(options)] self.phantom_run(cmd, timeout) - def phantom_js(self, url_path, code, ready="window", timeout=30, **kw): + def phantom_js(self, url_path, code, ready="window", login=None, timeout=30, **kw): """ Test js code running in the browser + - optionnally log as 'login' - load page given by url_path - wait for ready object to be available - eval(code) inside the page @@ -212,17 +271,17 @@ class HttpCase(TransactionCase): If neither are done before timeout test fails. """ options = { + 'port': PORT, + 'db': DB, 'url_path': url_path, 'code': code, 'ready': ready, 'timeout' : timeout, - 'port': PORT, - 'db': DB, - 'login': ADMIN_USER, - 'password': ADMIN_PASSWORD, + 'login' : login, 'session_id': self.session_id, } options.update(kw) + options.setdefault('password', options.get('login')) phantomtest = os.path.join(os.path.dirname(__file__), 'phantomtest.js') cmd = ['phantomjs', phantomtest, json.dumps(options)] self.phantom_run(cmd, timeout) diff --git a/openerp/tests/phantomtest.js b/openerp/tests/phantomtest.js index 6112df24107..1cdfeabce76 100644 --- a/openerp/tests/phantomtest.js +++ b/openerp/tests/phantomtest.js @@ -10,10 +10,8 @@ function waitFor (ready, callback, timeout, timeoutMessageCallback) { } else { if(!condition) { var message = timeoutMessageCallback ? timeoutMessageCallback() : "Timeout after "+timeout+" ms"; - console.log(message); console.log("Waiting for " + ready); - console.log("error"); - phantom.exit(1); + error(message); } else { clearInterval(interval); callback(); @@ -22,62 +20,71 @@ function waitFor (ready, callback, timeout, timeoutMessageCallback) { }, 250); } +function error(message) { + console.log('error', message); + phantom.exit(1); +} function PhantomTest() { var self = this; - if(phantom.args.length === 1) { - this.options = JSON.parse(phantom.args[0]); - } else { - this.options = JSON.parse(phantom.args[1]); - } - this.inject = []; + this.options = JSON.parse(phantom.args[phantom.args.length-1]); + this.inject = this.options.inject || []; this.timeout = this.options.timeout ? Math.round(parseFloat(this.options.timeout)*1000 - 5000) : 10000; this.origin = 'http://localhost'; this.origin += this.options.port ? ':' + this.options.port : ''; // ---------------------------------------------------- - // test reporting + // configure phantom and page // ---------------------------------------------------- - this.error = function(message) { - console.log(message); - console.log("error"); - phantom.exit(1); - }; - - // ---------------------------------------------------- - // configure page - // ---------------------------------------------------- - this.page = require('webpage').create(); - this.page.viewportSize = { width: 1366, height: 768 }; - this.page.addCookie({ + phantom.addCookie({ 'domain': 'localhost', 'name': 'session_id', 'value': this.options.session_id, }); + this.page = require('webpage').create(); + this.page.viewportSize = { width: 1366, height: 768 }; this.page.onError = function(message, trace) { - self.error(message + " " + trace); + var msg = [message]; + if (trace && trace.length) { + msg.push.apply(msg, trace.map(function (frame) { + var result = [' at ', frame.file, ':', frame.line]; + if (frame.function) { + result.push(' (in ', frame.function, ')'); + } + return result.join(''); + })); + msg.push('(leaf frame on top)') + } + error(JSON.stringify(msg.join('\n'))); }; this.page.onAlert = function(message) { - self.error(message); + error(message); }; this.page.onConsoleMessage = function(message) { console.log(message); }; this.page.onLoadFinished = function(status) { if (status === "success") { - var src, test; for (var k in self.inject) { - if (typeof self.inject[k] !== "string") { - test = self.page.evaluate(function (variable) { - try { return eval("("+variable+")") != null; } - catch (e) { return false; } - }, self.inject[k][0]); - src = self.inject[k][1]; - } else { - src = self.inject[k]; - test = true; + var found = false; + var v = self.inject[k]; + var need = v; + var src = v; + if (v[0]) { + need = v[0]; + src = v[1]; + found = self.page.evaluate(function(code) { + try { + return !!eval(code); + } catch (e) { + return false; + } + }, need); } - if(test && !page.injectJs(src)) { - self.error("Can't inject " + src); + if(!found) { + console.log('Injecting', src, 'needed for', need); + if(!self.page.injectJs(src)) { + error("Cannot inject " + src); + } } } } @@ -87,7 +94,7 @@ function PhantomTest() { var message = ("Timeout\nhref: " + window.location.href + "\nreferrer: " + document.referrer + "\n\n" + document.body.innerHTML).replace(/[^a-z0-9\s~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi, "*"); - self.error(message); + error(message); }); }, self.timeout); @@ -101,12 +108,12 @@ function PhantomTest() { qp.push('login=' + self.options.login); qp.push('key=' + self.options.password); qp.push('redirect=' + encodeURIComponent(url_path)); - var url_path = "/web/login?" + qp.join('&'); + var url_path = "/login?" + qp.join('&'); } var url = self.origin + url_path; self.page.open(url, function(status) { if (status !== 'success') { - self.error("failed to load " + url) + error("failed to load " + url) } else { console.log('loaded', url, status); // process ready @@ -116,8 +123,8 @@ function PhantomTest() { try { r = !!eval(ready); } catch(ex) { - console.log("waiting for page " + ready) - }; + console.log("waiting for " + ready); + } return r; }, ready); // run test diff --git a/openerp/tools/config.py b/openerp/tools/config.py index 91fdbca86ad..07435075f8d 100644 --- a/openerp/tools/config.py +++ b/openerp/tools/config.py @@ -272,10 +272,10 @@ class configmanager(object): group.add_option("--workers", dest="workers", my_default=0, help="Specify the number of workers, 0 disable prefork mode.", type="int") - group.add_option("--limit-memory-soft", dest="limit_memory_soft", my_default=640 * 1024 * 1024, + group.add_option("--limit-memory-soft", dest="limit_memory_soft", my_default=2048 * 1024 * 1024, help="Maximum allowed virtual memory per worker, when reached the worker be reset after the current request (default 671088640 aka 640MB).", type="int") - group.add_option("--limit-memory-hard", dest="limit_memory_hard", my_default=768 * 1024 * 1024, + group.add_option("--limit-memory-hard", dest="limit_memory_hard", my_default=2560 * 1024 * 1024, help="Maximum allowed virtual memory per worker, when reached, any memory allocation will fail (default 805306368 aka 768MB).", type="int") group.add_option("--limit-time-cpu", dest="limit_time_cpu", my_default=60, diff --git a/openerpcommand/initialize.py b/openerpcommand/initialize.py index 3723e9f5c01..cf4e54bfb82 100644 --- a/openerpcommand/initialize.py +++ b/openerpcommand/initialize.py @@ -9,26 +9,6 @@ import time import common -def install_openerp(database_name, create_database_flag, module_names, install_demo_data): - import openerp - config = openerp.tools.config - - if create_database_flag: - with lock_file('/tmp/global_openerp_create_database.lock'): - create_database(database_name) - - config['init'] = dict.fromkeys(module_names, 1) - - # Install the import hook, to import openerp.addons.. - openerp.modules.module.initialize_sys_path() - - print - - registry = openerp.modules.registry.RegistryManager.get( - database_name, update_module=True, force_demo=install_demo_data) - - return registry - # From http://code.activestate.com/recipes/576572/ @contextlib.contextmanager def lock_file(path, wait_delay=.1, max_try=600): @@ -52,21 +32,6 @@ def lock_file(path, wait_delay=.1, max_try=600): os.close(fd) os.unlink(path) -# TODO turn template1 in a parameter -# This should be exposed from openerp (currently in -# openerp/service/web_services.py). -def create_database(database_name): - import openerp - db = openerp.sql_db.db_connect('template1') - cr = db.cursor() # TODO `with db as cr:` - try: - cr.autocommit(True) - cr.execute("""CREATE DATABASE "%s" - ENCODING 'unicode' TEMPLATE "template1" """ \ - % (database_name,)) - finally: - cr.close() - def run(args): assert args.database assert not (args.module and args.all_modules) @@ -74,11 +39,14 @@ def run(args): import openerp config = openerp.tools.config + config['db_name'] = args.database if args.tests: config['log_handler'] = [':INFO'] config['test_enable'] = True config['without_demo'] = False + if args.port: + config['xmlrpc_port'] = int(args.port) else: config['log_handler'] = [':CRITICAL'] config['test_enable'] = False @@ -90,14 +58,13 @@ def run(args): args.addons = [] config['addons_path'] = ','.join(args.addons) - print "MY addons path is", config['addons_path'] - if args.all_modules: module_names = common.get_addons_from_paths(args.addons, args.exclude) elif args.module: module_names = args.module else: module_names = ['base'] + config['init'] = dict.fromkeys(module_names, 1) if args.coverage: import coverage @@ -106,17 +73,22 @@ def run(args): cov = coverage.coverage(branch=True, include='*.py') cov.start() openerp.netsvc.init_logger() - registry = install_openerp(args.database, not args.no_create, module_names, not config['without_demo']) + + if not args.no_create: + with lock_file('/tmp/global_openerp_create_database.lock'): + openerp.service.db._create_empty_database(args.database) + + config['workers'] = False + + rc = openerp.service.server.start(preload=[args.database], stop=True) + if args.coverage: cov.stop() cov.html_report(directory='coverage') # If we wanted the report on stdout: # cov.report() - # The `_assertion_report` attribute was added on the registry during the - # OpenERP 7.0 development. - if hasattr(registry, '_assertion_report'): - sys.exit(1 if registry._assertion_report.failures else 0) + sys.exit(rc) def add_parser(subparsers): parser = subparsers.add_parser('initialize', @@ -124,6 +96,8 @@ def add_parser(subparsers): parser.add_argument('-d', '--database', metavar='DATABASE', **common.required_or_default('DATABASE', 'the database to create')) common.add_addons_argument(parser) + parser.add_argument('-P', '--port', metavar='PORT', + **common.required_or_default('PORT', 'the server port')) parser.add_argument('--module', metavar='MODULE', action='append', help='specify a module to install' ' (this option can be repeated)')