[MERGE] Sync with trunk
bzr revid: rim@openerp.com-20140220115658-4cz2t47siz5p2zg3
This commit is contained in:
Vendored
+1
@@ -16,6 +16,7 @@ Depends:
|
||||
python,
|
||||
postgresql-client,
|
||||
python-dateutil,
|
||||
python-decorator,
|
||||
python-docutils,
|
||||
python-feedparser,
|
||||
python-gdata,
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
#~ " "
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 "Тоон дугаарын гүйцээлт"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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())
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -23,9 +23,6 @@
|
||||
<div>
|
||||
<field name="logo" widget="image" class="oe_avatar oe_left"/>
|
||||
</div>
|
||||
<div class="oe_right oe_button_box" name="button_box">
|
||||
<button name="%(preview_report)d" string="Preview Header/Footer" type="action"/>
|
||||
</div>
|
||||
<div class="oe_title">
|
||||
<label for="name" class="oe_edit_only"/>
|
||||
<h1>
|
||||
@@ -75,12 +72,23 @@
|
||||
<field name="bank_ids" nolabel="1" context="{'default_company_id': active_id, 'footer_hide': False}"
|
||||
on_change="onchange_footer(custom_footer, phone, fax, email, website, vat, company_registry, bank_ids)"/>
|
||||
</group>
|
||||
<group string="Report Footer Configuration">
|
||||
<field name="paper_format" on_change="onchange_paper_format(paper_format)"/>
|
||||
</page>
|
||||
<page string="Configuration">
|
||||
<group>
|
||||
<group name="account_grp" string="Accounting">
|
||||
<field name="currency_id"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
<page string="Reports Configuration">
|
||||
<group string="Footer Configuration">
|
||||
<field name="custom_footer" on_change="onchange_footer(custom_footer, phone, fax, email, website, vat, company_registry, bank_ids)"/>
|
||||
<field name="rml_footer" attrs="{'invisible': [('custom_footer','=',False)]}"/>
|
||||
<field name="rml_footer_readonly" attrs="{'invisible': [('custom_footer','=',True)]}"/>
|
||||
</group>
|
||||
<group string="RML Configuration">
|
||||
<field name="rml_paper_format" on_change="onchange_rml_paper_format(rml_paper_format)"/>
|
||||
</group>
|
||||
<group>
|
||||
<label for="font" />
|
||||
<div>
|
||||
@@ -90,21 +98,15 @@
|
||||
</div>
|
||||
</div>
|
||||
</group>
|
||||
</page>
|
||||
<page string="Header/Footer" groups="base.group_no_one">
|
||||
<label for="rml_header"/>
|
||||
<field name="rml_header"/>
|
||||
<label for="rml_header2"/>
|
||||
<field name="rml_header2"/>
|
||||
<label for="rml_header3"/>
|
||||
<field name="rml_header3"/>
|
||||
</page>
|
||||
<page string="Configuration">
|
||||
<group>
|
||||
<group name="account_grp" string="Accounting">
|
||||
<field name="currency_id"/>
|
||||
</group>
|
||||
</group>
|
||||
<div class="oe_right oe_button_box" name="button_box" groups="base.group_no_one" >
|
||||
<button name="%(preview_report)d" string="Preview Header/Footer" type="action"/>
|
||||
</div>
|
||||
<label for="rml_header" groups="base.group_no_one" />
|
||||
<field name="rml_header" groups="base.group_no_one" />
|
||||
<label for="rml_header2" groups="base.group_no_one" />
|
||||
<field name="rml_header2" groups="base.group_no_one" />
|
||||
<label for="rml_header3" groups="base.group_no_one" />
|
||||
<field name="rml_header3" groups="base.group_no_one" />
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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:
|
||||
@@ -1,5 +0,0 @@
|
||||
console.log("hello from test_phantom_hello.js");
|
||||
console.log("ok");
|
||||
// For a failure use:
|
||||
//console.log("error");
|
||||
phantom.exit();
|
||||
@@ -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
|
||||
|
||||
+11
-8
@@ -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
|
||||
|
||||
+67
-23
@@ -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:
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
+1
-1
@@ -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()
|
||||
|
||||
@@ -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]) )
|
||||
|
||||
+86
-27
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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.<module>.
|
||||
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)')
|
||||
|
||||
Reference in New Issue
Block a user