[MERGE] Sync with trunk

bzr revid: rim@openerp.com-20140220115658-4cz2t47siz5p2zg3
This commit is contained in:
Richard Mathot (OpenERP)
2014-02-20 12:56:58 +01:00
90 changed files with 447 additions and 317 deletions
+1
View File
@@ -16,6 +16,7 @@ Depends:
python,
postgresql-client,
python-dateutil,
python-decorator,
python-docutils,
python-feedparser,
python-gdata,
+3
View File
@@ -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()
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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"
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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"
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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"
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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"
+1 -1
View File
@@ -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
+4 -4
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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"
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+8 -1
View File
@@ -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"
#~ " "
+1 -1
View File
@@ -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
+10 -10
View File
@@ -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 "Тоон дугаарын гүйцээлт"
+1 -1
View File
@@ -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
+2 -2
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+30 -27
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+4 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+2
View File
@@ -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())
+4 -4
View File
@@ -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,
+22 -20
View File
@@ -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>
-1
View File
@@ -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
+53
View File
@@ -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()
-13
View File
@@ -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();
+7 -10
View File
@@ -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
View File
@@ -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
View File
@@ -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:
-9
View File
@@ -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
View File
@@ -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()
+1 -1
View File
@@ -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
View File
@@ -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)
+48 -41
View File
@@ -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
+2 -2
View File
@@ -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,
+16 -42
View File
@@ -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)')