[MERGE] from trunk
bzr revid: chm@openerp.com-20140324082422-38x5kcnh830200wl bzr revid: chm@openerp.com-20140325084953-s3sl2f1un7z08wxy
This commit is contained in:
commit
105c26e623
|
@ -57,6 +57,8 @@ The kernel of OpenERP, needed for all installation.
|
|||
'ir/ir_values_view.xml',
|
||||
'ir/osv_memory_autovacuum.xml',
|
||||
'ir/ir_model_report.xml',
|
||||
'ir/ir_logging_view.xml',
|
||||
'ir/ir_qweb.xml',
|
||||
'workflow/workflow_view.xml',
|
||||
'module/module_view.xml',
|
||||
'module/module_data.xml',
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:41+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:30+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:41+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:30+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:42+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:31+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:42+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:31+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:43+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:32+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:43+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:32+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:43+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:32+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:43+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:32+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:44+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:33+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
"X-Poedit-Language: Czech\n"
|
||||
|
||||
#. module: base
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:44+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:33+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:46+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:35+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -12,8 +12,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:46+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:35+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
"X-Poedit-Country: GREECE\n"
|
||||
"X-Poedit-Language: Greek\n"
|
||||
"X-Poedit-SourceCharset: utf-8\n"
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:44+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:53+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:41+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:43+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:56+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:45+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:56+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:44+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:57+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:45+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
"Language: \n"
|
||||
|
||||
#. module: base
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:56+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:44+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:57+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:46+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:57+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:46+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:58+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:46+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:43+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:44+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:33+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:42+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:31+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -9,8 +9,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:50+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:39+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
"X-Poedit-Country: IRAN, ISLAMIC REPUBLIC OF\n"
|
||||
"X-Poedit-Language: Persian\n"
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:58+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:47+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:45+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:34+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:45+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:34+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:56+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:44+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
@ -29,7 +29,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:res.country,name:base.sh
|
||||
msgid "Saint Helena"
|
||||
msgstr ""
|
||||
msgstr "Sainte Hélène"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.actions.report.xml:0
|
||||
|
@ -39,7 +39,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: selection:ir.property,type:0
|
||||
msgid "DateTime"
|
||||
msgstr ""
|
||||
msgstr "Date et heure"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/fields.py:652
|
||||
|
@ -68,7 +68,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Hungarian / Magyar"
|
||||
msgstr ""
|
||||
msgstr "Hongrois / Magyar"
|
||||
|
||||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
|
@ -81,6 +81,8 @@ msgid ""
|
|||
"Helps you manage your projects and tasks by tracking them, generating "
|
||||
"plannings, etc..."
|
||||
msgstr ""
|
||||
"Vous aide à gérer vos projets et tâches, en assurant leur suivi, en générant "
|
||||
"des planifications, etc."
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,summary:base.module_point_of_sale
|
||||
|
@ -221,7 +223,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:res.country,name:base.sz
|
||||
msgid "Swaziland"
|
||||
msgstr ""
|
||||
msgstr "Swaziland"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/orm.py:4485
|
||||
|
@ -352,7 +354,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:ir.module.category,name:base.module_category_customer_relationship_management
|
||||
msgid "Customer Relationship Management"
|
||||
msgstr ""
|
||||
msgstr "Gestion de la relation client (CRM)"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_delivery
|
||||
|
@ -389,14 +391,14 @@ msgstr ""
|
|||
#. module: base
|
||||
#: field:res.partner,credit_limit:0
|
||||
msgid "Credit Limit"
|
||||
msgstr ""
|
||||
msgstr "Limite de crédit"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.model.constraint,date_update:0
|
||||
#: field:ir.model.data,date_update:0
|
||||
#: field:ir.model.relation,date_update:0
|
||||
msgid "Update Date"
|
||||
msgstr ""
|
||||
msgstr "Mettre à jour la date"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_base_action_rule
|
||||
|
@ -407,12 +409,12 @@ msgstr ""
|
|||
#: view:ir.attachment:0
|
||||
#: field:ir.attachment,create_uid:0
|
||||
msgid "Owner"
|
||||
msgstr ""
|
||||
msgstr "Propriétaire"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.actions.act_window:0
|
||||
msgid "Source Object"
|
||||
msgstr ""
|
||||
msgstr "Objet source"
|
||||
|
||||
#. module: base
|
||||
#: model:res.partner.bank.type,format_layout:base.bank_normal
|
||||
|
@ -434,7 +436,7 @@ msgstr ""
|
|||
#: field:ir.model.access,group_id:0
|
||||
#: view:res.groups:0
|
||||
msgid "Group"
|
||||
msgstr ""
|
||||
msgstr "Groupe"
|
||||
|
||||
#. module: base
|
||||
#: constraint:res.lang:0
|
||||
|
@ -442,6 +444,9 @@ msgid ""
|
|||
"Invalid date/time format directive specified. Please refer to the list of "
|
||||
"allowed directives, displayed when you edit a language."
|
||||
msgstr ""
|
||||
"Vous avez spécifié une directive de format date/temps non valide. Veuillez "
|
||||
"vous référer à la liste des directives autorisées, qui s'affiche lorsque "
|
||||
"vous modifiez une langue."
|
||||
|
||||
#. module: base
|
||||
#: code:addons/orm.py:4153
|
||||
|
@ -555,6 +560,19 @@ msgid ""
|
|||
"* Use emails to automatically confirm and send acknowledgements for any "
|
||||
"event registration\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Gestion et organisation d'événements\n"
|
||||
"====================================\n"
|
||||
"\n"
|
||||
"Le module 'Événement' vous permet d'organiser efficacement des événements et "
|
||||
"toutes les tâches liées : planification, suivi des inscriptions, des "
|
||||
"présences, etc.\n"
|
||||
"\n"
|
||||
"Fonctionnalités clés\n"
|
||||
"--------------------\n"
|
||||
"* Gestion des événements et des inscriptions\n"
|
||||
"* Utilisation d'e-mails pour automatiquement confirmer et envoyer des "
|
||||
"accusés de réception pour chaque inscription à un événement\n"
|
||||
|
||||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
|
@ -567,6 +585,8 @@ msgid ""
|
|||
"If you check this, then the second time the user prints with same attachment "
|
||||
"name, it returns the previous report."
|
||||
msgstr ""
|
||||
"Si vous cochez ceci, alors la seconde fois que l'utilisateur imprimera avec "
|
||||
"le même nom de pièce jointe, cela retournera le rapport stocké"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_mrp_byproduct
|
||||
|
@ -597,7 +617,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_hr_timesheet_invoice
|
||||
msgid "Invoice on Timesheets"
|
||||
msgstr ""
|
||||
msgstr "Facture sur les feuilles de temps"
|
||||
|
||||
#. module: base
|
||||
#: view:base.module.upgrade:0
|
||||
|
@ -613,12 +633,12 @@ msgstr ""
|
|||
#. module: base
|
||||
#: field:res.country,name:0
|
||||
msgid "Country Name"
|
||||
msgstr ""
|
||||
msgstr "Nom du pays"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.co
|
||||
msgid "Colombia"
|
||||
msgstr ""
|
||||
msgstr "Colombie"
|
||||
|
||||
#. module: base
|
||||
#: model:res.partner.title,name:base.res_partner_title_mister
|
||||
|
@ -640,7 +660,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: view:res.partner:0
|
||||
msgid "Sales & Purchases"
|
||||
msgstr ""
|
||||
msgstr "Achats et ventes"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.translation:0
|
||||
|
@ -721,6 +741,33 @@ msgid ""
|
|||
"module named account_voucher.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Comptabilité et gestion financière\n"
|
||||
"==================================\n"
|
||||
"\n"
|
||||
"Le module de comptabilité et de finance couvre :\n"
|
||||
"------------------------------------------------\n"
|
||||
" * Comptabilité générale\n"
|
||||
" * Comptabilité de coût / comptabilité analytique\n"
|
||||
" * Comptabilité de tiers\n"
|
||||
" * Gestion des taxes\n"
|
||||
" * Budgets\n"
|
||||
" * Factures clients et fournisseurs\n"
|
||||
" * Relevés bancaires\n"
|
||||
" * Réconciliations par partenaire\n"
|
||||
"\n"
|
||||
"Il créé également un tableau de bord pour les comptables qui inclut :\n"
|
||||
"---------------------------------------------------------------------\n"
|
||||
" * Une liste des factures clients à approuver\n"
|
||||
" * L'analyse de la société\n"
|
||||
" * Un graphe de la trésorerie\n"
|
||||
"\n"
|
||||
"Les processus tels que le maintien de la comptabilité générale se fait par "
|
||||
"le biais des revues financières définies (les lignes d'écriture à regrouper "
|
||||
"le sont à travers un journal)\n"
|
||||
"pour un exercice donné et pour la préparation des reçus il ya un module "
|
||||
"nommé account_voucher.\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: view:ir.model:0
|
||||
|
@ -763,7 +810,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:res.country,name:base.jo
|
||||
msgid "Jordan"
|
||||
msgstr ""
|
||||
msgstr "Jordanie"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_l10n_hr
|
||||
|
@ -788,7 +835,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: sql_constraint:res.company:0
|
||||
msgid "The company name must be unique !"
|
||||
msgstr ""
|
||||
msgstr "Le nom de la société doit être unique !"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.ui.menu,name:base.menu_base_action_rule_admin
|
||||
|
@ -820,6 +867,10 @@ msgid ""
|
|||
"invoice, then `object.invoice_address_id.mobile` is the field which gives "
|
||||
"the correct mobile number"
|
||||
msgstr ""
|
||||
"Fournit les champs qui seront utilisés pour récupérer le numéro du "
|
||||
"cellulaire. Exemple: vous sélectionnez une facture, alors, "
|
||||
"`object.invoice_address_id.mobile` est le champ qui représente le numéro du "
|
||||
"cellulaire correct."
|
||||
|
||||
#. module: base
|
||||
#: view:ir.mail_server:0
|
||||
|
@ -840,7 +891,7 @@ msgstr ""
|
|||
#: field:base.language.export,name:0
|
||||
#: field:ir.attachment,datas_fname:0
|
||||
msgid "File Name"
|
||||
msgstr ""
|
||||
msgstr "Nom du fichier"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.rs
|
||||
|
@ -891,6 +942,33 @@ msgid ""
|
|||
"also possible in order to automatically create a meeting when a holiday "
|
||||
"request is accepted by setting up a type of meeting in Leave Type.\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Gère les absences et les demandes de congés\n"
|
||||
"===========================================\n"
|
||||
"\n"
|
||||
"Cette application contrôle la programmation des congés de votre société. Il "
|
||||
"permet aux employés de faire des demandes de congés. Ensuite, les managers "
|
||||
"peuvent examiner les demandes et les approuver ou les rejeter. De cette "
|
||||
"façon, vous pouvez contrôler la planification de l'ensemble des congés de "
|
||||
"votre entreprise ou de votre département.\n"
|
||||
"\n"
|
||||
"Vous pouvez configurer plusieurs sortes d'absences (maladie, congés payés, "
|
||||
"congés sans soldes…) et allouer rapidement ces absences à un employé ou un "
|
||||
"département en utilisant les demandes de congés. Un employé peut aussi faire "
|
||||
"une demande de congés pour plus de jours en ajoutant une allocation. Cela va "
|
||||
"augmenter le total des jours disponibles pour ce type de congés (si la "
|
||||
"demande est acceptée).\n"
|
||||
"\n"
|
||||
"Vous pouvez suivre les absences de différentes façons grâce aux rapports "
|
||||
"suivants : \n"
|
||||
"\n"
|
||||
"* Résumé des absences\n"
|
||||
"* Absences par département\n"
|
||||
"* Analyse des absences\n"
|
||||
"\n"
|
||||
"Une synchronisation avec les agendas internes (Réunions du module CRM) est "
|
||||
"aussi possible dans le but de créer automatiquement une réunion quand une "
|
||||
"demande de congés est accepté en ajoutant une type de réunion Absence.\n"
|
||||
|
||||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
|
@ -900,7 +978,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:ir.ui.menu,name:base.menu_crm_config_opportunity
|
||||
msgid "Opportunities"
|
||||
msgstr ""
|
||||
msgstr "Opportunités"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.model,name:base.model_base_language_export
|
||||
|
@ -910,7 +988,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:res.country,name:base.pg
|
||||
msgid "Papua New Guinea"
|
||||
msgstr ""
|
||||
msgstr "Papouasie-Nouvelle-Guinée"
|
||||
|
||||
#. module: base
|
||||
#: help:ir.actions.report.xml,report_type:0
|
||||
|
@ -941,7 +1019,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:res.country,name:base.zw
|
||||
msgid "Zimbabwe"
|
||||
msgstr ""
|
||||
msgstr "Zimbabwe"
|
||||
|
||||
#. module: base
|
||||
#: help:ir.model.constraint,type:0
|
||||
|
@ -957,7 +1035,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:res.country,name:base.es
|
||||
msgid "Spain"
|
||||
msgstr ""
|
||||
msgstr "Espagne"
|
||||
|
||||
#. module: base
|
||||
#: help:ir.actions.act_window,domain:0
|
||||
|
@ -978,17 +1056,17 @@ msgstr ""
|
|||
#. module: base
|
||||
#: field:res.partner,mobile:0
|
||||
msgid "Mobile"
|
||||
msgstr ""
|
||||
msgstr "Cellulaire"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.om
|
||||
msgid "Oman"
|
||||
msgstr ""
|
||||
msgstr "Oman"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_mrp
|
||||
msgid "MRP"
|
||||
msgstr ""
|
||||
msgstr "MRP - PBM"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_hr_attendance
|
||||
|
@ -1026,12 +1104,12 @@ msgstr ""
|
|||
#: model:ir.actions.act_window,name:base.act_menu_create
|
||||
#: view:wizard.ir.model.menu.create:0
|
||||
msgid "Create Menu"
|
||||
msgstr ""
|
||||
msgstr "Créer un menu"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.in
|
||||
msgid "India"
|
||||
msgstr ""
|
||||
msgstr "Inde"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.actions.act_window,name:base.res_request_link-act
|
||||
|
@ -1047,7 +1125,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_fleet
|
||||
msgid "Fleet Management"
|
||||
msgstr ""
|
||||
msgstr "Gestion de flotte"
|
||||
|
||||
#. module: base
|
||||
#: help:ir.server.object.lines,value:0
|
||||
|
@ -1107,6 +1185,36 @@ msgid ""
|
|||
"* Planned Revenue by Stage and User (graph)\n"
|
||||
"* Opportunities by Stage (graph)\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Le module OpenERP de gestion de la relation client (CRM)\n"
|
||||
"=============================================\n"
|
||||
"\n"
|
||||
"Cette application permet aux utilisateurs de gérer efficacement et "
|
||||
"intelligemment leurs pistes, opportunités, réunions et appels "
|
||||
"téléphoniques.\n"
|
||||
"\n"
|
||||
"Elle gère les tâches clés comme la communication, l'identification, les "
|
||||
"assignations, les résolutions et les notifications.\n"
|
||||
"\n"
|
||||
"OpenERP assure que toutes les demandes sont suivis par les utilisateurs, les "
|
||||
"clients et les fournisseurs. Il permet d'envoyer automatiquement des "
|
||||
"rappels, d'escalader des requêtes, de lancer des actions spécifiques et de "
|
||||
"nombreuses autres selon les règles de l'entreprise.\n"
|
||||
"\n"
|
||||
"Le grand avantage de ce système est que les utilisateurs n'ont rien à faire "
|
||||
"de spécial. Le module CRM dispose d'une passerelle de courriel permettant de "
|
||||
"synchroniser les courriels reçus et OpenERP. De cette façon, les "
|
||||
"utilisateurs peuvent simplement envoyer des courriels au système de suivi "
|
||||
"des demandes.\n"
|
||||
"\n"
|
||||
"OpenERP s'occupera de remercier les utilisateurs de leur message, de diriger "
|
||||
"cette demande à l'équipe appropriée et de s'assurer que toute les "
|
||||
"communications futures seront rangées à la bonne place.\n"
|
||||
"\n"
|
||||
"\n"
|
||||
"Le tableau bord de cette application inclus:\n"
|
||||
"* les revenus prévus par étape de vente et par utilisateur (graphique);\n"
|
||||
"* les opportunités par étape de vente (graphique).\n"
|
||||
|
||||
#. module: base
|
||||
#: selection:base.language.export,format:0
|
||||
|
@ -1241,17 +1349,17 @@ msgstr ""
|
|||
#: selection:ir.actions.server,state:0
|
||||
#: selection:workflow.activity,kind:0
|
||||
msgid "Dummy"
|
||||
msgstr ""
|
||||
msgstr "Factice"
|
||||
|
||||
#. module: base
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr ""
|
||||
msgstr "XML invalide pour l'architecture de la vue"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.ky
|
||||
msgid "Cayman Islands"
|
||||
msgstr ""
|
||||
msgstr "Îles Caïmans"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.rule:0
|
||||
|
@ -1287,7 +1395,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: selection:ir.property,type:0
|
||||
msgid "Char"
|
||||
msgstr ""
|
||||
msgstr "Caractère"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.module.category,visible:0
|
||||
|
@ -1365,6 +1473,9 @@ msgid ""
|
|||
"decimal number [00,53]. All days in a new year preceding the first Monday "
|
||||
"are considered to be in week 0."
|
||||
msgstr ""
|
||||
"%W - Numéro de semaine dans l'année (lundi est le premier jour de la "
|
||||
"semaine) en nombre décimal [00,53]. Tous les jours de la nouvelle année "
|
||||
"précédant le premier lundi sont considérés faisant partie de la semaine 0."
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/module/wizard/base_language_install.py:53
|
||||
|
@ -1390,13 +1501,13 @@ msgstr ""
|
|||
#. module: base
|
||||
#: field:ir.actions.act_url,url:0
|
||||
msgid "Action URL"
|
||||
msgstr ""
|
||||
msgstr "URL de l'action"
|
||||
|
||||
#. module: base
|
||||
#: field:base.module.import,module_name:0
|
||||
#: field:ir.module.module,shortdesc:0
|
||||
msgid "Module Name"
|
||||
msgstr ""
|
||||
msgstr "Nom du module"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.mh
|
||||
|
@ -1423,7 +1534,7 @@ msgstr ""
|
|||
#: view:ir.ui.view:0
|
||||
#: selection:ir.ui.view,type:0
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
msgstr "Recherche"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/osv.py:154
|
||||
|
@ -1451,12 +1562,12 @@ msgstr ""
|
|||
#: code:addons/base/res/res_users.py:131
|
||||
#, python-format
|
||||
msgid "Operation Canceled"
|
||||
msgstr ""
|
||||
msgstr "Opération annulée"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_document
|
||||
msgid "Document Management System"
|
||||
msgstr ""
|
||||
msgstr "Système de gestion des documents"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_crm_claim
|
||||
|
@ -1499,7 +1610,7 @@ msgstr ""
|
|||
#: model:ir.module.category,name:base.module_category_purchase_management
|
||||
#: model:ir.ui.menu,name:base.menu_purchase_root
|
||||
msgid "Purchases"
|
||||
msgstr ""
|
||||
msgstr "Achats"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.md
|
||||
|
@ -1524,12 +1635,12 @@ msgstr ""
|
|||
#. module: base
|
||||
#: view:ir.module.module:0
|
||||
msgid "Features"
|
||||
msgstr ""
|
||||
msgstr "Fonctionnalités"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.attachment:0
|
||||
msgid "Data"
|
||||
msgstr ""
|
||||
msgstr "Données"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_portal_claim
|
||||
|
@ -1597,7 +1708,7 @@ msgstr ""
|
|||
#: model:ir.module.category,name:base.module_category_social_network
|
||||
#: model:ir.module.module,shortdesc:base.module_mail
|
||||
msgid "Social Network"
|
||||
msgstr ""
|
||||
msgstr "Réseau social"
|
||||
|
||||
#. module: base
|
||||
#: view:res.lang:0
|
||||
|
@ -12871,7 +12982,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:res.country,name:base.ao
|
||||
msgid "Angola"
|
||||
msgstr ""
|
||||
msgstr "Angola"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.tf
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:46+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:35+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:46+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:35+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:47+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:35+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:47+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:36+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:52+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:40+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
"Language: hr\n"
|
||||
|
||||
#. module: base
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:47+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:36+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -9,8 +9,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:42+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:31+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:36+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:47+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:36+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:36+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:37+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:45+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:34+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:37+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:49+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:37+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:49+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:38+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:49+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:37+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:49+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:38+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:50+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:38+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:50+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:38+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:44+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:33+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:56+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:44+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:51+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:39+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:51+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:39+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:43+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:51+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:39+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:51+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:40+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:52+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:40+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:52+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:41+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:41+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:30+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:52+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:40+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:58+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:47+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:53+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:41+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:53+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:41+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:53+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:42+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:42+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:42+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:42+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:43+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:57+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:46+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:43+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-12 04:57+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-20 05:45+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -39,6 +39,7 @@ import ir_mail_server
|
|||
import ir_fields
|
||||
import ir_qweb
|
||||
import ir_http
|
||||
import ir_logging
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
|
|
|
@ -141,12 +141,12 @@ class ir_actions_report_xml(osv.osv):
|
|||
'model': fields.char('Model', required=True),
|
||||
'report_type': fields.selection([('qweb-pdf', 'PDF'),
|
||||
('qweb-html', 'HTML'),
|
||||
('other', 'Other'),
|
||||
('controller', 'Controller'),
|
||||
('pdf', 'RML pdf (deprecated)'),
|
||||
('sxw', 'RML sxw (deprecated)'),
|
||||
('webkit', 'Webkit (deprecated)'),
|
||||
], 'Report Type', required=True, help="PDF will use wkhtmltopdf to render html to pdf, HTML will directly show html, Other will force download the controller output keeping the MIME type."),
|
||||
'report_name': fields.char('Controller Name', required=True, help="URL of the report will be /report/<controller name>/<ids>, the default controller also use this field to get the name of the qweb ir.ui.view to render. For RML reports, this is the LocalService name."),
|
||||
], 'Report Type', required=True, help="HTML will open the report directly in your browser, PDF will use wkhtmltopdf to render the HTML into a PDF file and let you download it, Controller allows you to define the url of a custom controller outputting any kind of report."),
|
||||
'report_name': fields.char('Template Name', required=True, help="For QWeb reports, name of the template used in the rendering. The method 'render_html' of the model 'report.template_name' will be called (if any) to give the html. For RML reports, this is the LocalService name."),
|
||||
'groups_id': fields.many2many('res.groups', 'res_groups_report_rel', 'uid', 'gid', 'Groups'),
|
||||
|
||||
# options
|
||||
|
@ -163,7 +163,7 @@ class ir_actions_report_xml(osv.osv):
|
|||
'report_xsl': fields.char('XSL Path'),
|
||||
'report_xml': fields.char('XML Path'),
|
||||
|
||||
'report_rml': fields.char('Main Report File Path', help="The path to the main report file (depending on Report Type) or NULL if the content is in another data field"),
|
||||
'report_rml': fields.char('Main Report File Path/controller', help="The path to the main report file/controller (depending on Report Type) or NULL if the content is in another data field"),
|
||||
'report_file': fields.related('report_rml', type="char", required=False, readonly=False, string='Report File', help="The path to the main report file (depending on Report Type) or NULL if the content is in another field", store=True),
|
||||
|
||||
'report_sxw': fields.function(_report_sxw, type='char', string='SXW Path'),
|
||||
|
|
|
@ -59,12 +59,13 @@
|
|||
<field name="name"/>
|
||||
<field name="model"/>
|
||||
<field name="report_type"/>
|
||||
<field name="report_name"/>
|
||||
<field name="report_name" attrs="{'invisible':[('report_type','=', 'controller')]}"/>
|
||||
<field name="report_rml" attrs="{'invisible':[('report_type','!=', 'controller')]}"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="multi"/>
|
||||
<field name="attachment_use"/>
|
||||
<field name="attachment"/>
|
||||
<field name="attachment_use" attrs="{'invisible':[('report_type','=', 'controller')]}"/>
|
||||
<field name="attachment" attrs="{'invisible':[('report_type','=', 'controller')]}"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
|
|
|
@ -69,7 +69,7 @@ class ir_attachment(osv.osv):
|
|||
|
||||
@tools.ormcache()
|
||||
def _filestore(self, cr, uid, context=None):
|
||||
return os.path.join(tools.config['data_dir'], 'filestore', cr.dbname)
|
||||
return tools.config.filestore(cr.dbname)
|
||||
|
||||
# 'data' field implementation
|
||||
def _full_path(self, cr, uid, location, path):
|
||||
|
|
|
@ -0,0 +1,46 @@
|
|||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2014 OpenERP SA (<http://www.openerp.com>)
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
import logging
|
||||
|
||||
from openerp.osv import osv, fields
|
||||
from openerp.tools.translate import _
|
||||
|
||||
class ir_logging(osv.Model):
|
||||
_name = 'ir.logging'
|
||||
_order = 'id DESC'
|
||||
|
||||
EXCEPTIONS_TYPE = [
|
||||
('client', 'Client'),
|
||||
('server', 'Server')
|
||||
]
|
||||
|
||||
_columns = {
|
||||
'create_date': fields.datetime('Create Date', readonly=True),
|
||||
'create_uid': fields.integer('Uid', readonly=True), # Integer not m2o is intentionnal
|
||||
'name': fields.char('Name', required=True),
|
||||
'type': fields.selection(EXCEPTIONS_TYPE, string='Type', required=True, select=True),
|
||||
'dbname': fields.char('Database Name'),
|
||||
'level': fields.char('Level'),
|
||||
'message': fields.text('Message', required=True),
|
||||
'path': fields.char('Path', required=True),
|
||||
'func': fields.char('Function', required=True),
|
||||
'line': fields.char('Line', required=True),
|
||||
}
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
<?xml version="1.0"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<record model="ir.ui.view" id="ir_logging_form_view">
|
||||
<field name="model">ir.logging</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Log" version="7.0">
|
||||
<group>
|
||||
<field name="create_date" />
|
||||
<field name="dbname" />
|
||||
<field name="type" />
|
||||
<field name="name" />
|
||||
<field name="level" />
|
||||
<field name="path" />
|
||||
<field name="line" />
|
||||
<field name="func" />
|
||||
<field name="message" />
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="ir_logging_tree_view">
|
||||
<field name="model">ir.logging</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Logs" version="7.0">
|
||||
<field name="create_date" />
|
||||
<field name="create_uid" />
|
||||
<field name="dbname" />
|
||||
<field name="type" />
|
||||
<field name="name" />
|
||||
<field name="level" />
|
||||
<field name="path" />
|
||||
<field name="line" />
|
||||
<field name="func" />
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="ir_logging_search_view">
|
||||
<field name="model">ir.logging</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Logs">
|
||||
<field name="dbname" />
|
||||
<field name="type" />
|
||||
<field name="name" />
|
||||
<field name="level" />
|
||||
<field name="message" />
|
||||
<group expand="0" string="Group By...">
|
||||
<filter string="Database" domain="[]" context="{'group_by': 'dbname'}" />
|
||||
<filter string="Level" domain="[]" context="{'group_by': 'level'}" />
|
||||
<filter string="Type" domain="[]" context="{'group_by': 'type'}" />
|
||||
<filter string="Month" domain="[]" context="{'group_by': 'create_date'}" />
|
||||
<filter string="Day" domain="[]" context="{'group_by': 'create_date:day'}" />
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
<record model="ir.actions.act_window" id="ir_logging_all_act">
|
||||
<field name="name">Logging</field>
|
||||
<field name="res_model">ir.logging</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="search_view_id" ref="ir_logging_search_view" />
|
||||
</record>
|
||||
<menuitem parent="base.menu_custom" id="ir_logging_all_menu" action="ir_logging_all_act" />
|
||||
</data>
|
||||
</openerp>
|
|
@ -808,6 +808,38 @@ class RelativeDatetimeConverter(osv.AbstractModel):
|
|||
return babel.dates.format_timedelta(
|
||||
value - reference, add_direction=True, locale=locale)
|
||||
|
||||
|
||||
class Contact(orm.AbstractModel):
|
||||
_name = 'ir.qweb.field.contact'
|
||||
_inherit = 'ir.qweb.field.many2one'
|
||||
|
||||
def record_to_html(self, cr, uid, field_name, record, column, options=None, context=None):
|
||||
opf = options.get('fields') or ["name", "address", "phone", "mobile", "fax", "email"]
|
||||
|
||||
if not getattr(record, field_name):
|
||||
return None
|
||||
|
||||
id = getattr(record, field_name).id
|
||||
field_browse = self.pool[column._obj].browse(cr, openerp.SUPERUSER_ID, id, context={"show_address": True})
|
||||
value = werkzeug.utils.escape( field_browse.name_get()[0][1] )
|
||||
|
||||
val = {
|
||||
'name': value.split("\n")[0],
|
||||
'address': werkzeug.utils.escape("\n".join(value.split("\n")[1:])),
|
||||
'phone': field_browse.phone,
|
||||
'mobile': field_browse.mobile,
|
||||
'fax': field_browse.fax,
|
||||
'city': field_browse.city,
|
||||
'country_id': field_browse.country_id and field_browse.country_id.name_get()[0][1],
|
||||
'email': field_browse.email,
|
||||
'fields': opf,
|
||||
'options': options
|
||||
}
|
||||
|
||||
html = self.pool["ir.ui.view"].render(cr, uid, "base.contact", val, engine='ir.qweb', context=context).decode('utf8')
|
||||
|
||||
return HTMLSafe(html)
|
||||
|
||||
class HTMLSafe(object):
|
||||
""" HTMLSafe string wrapper, Werkzeug's escape() has special handling for
|
||||
objects with a ``__html__`` methods but AFAIK does not provide any such
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
<openerp>
|
||||
<data>
|
||||
<template id="contact">
|
||||
<address t-ignore="true" class="mb0" itemscope="itemscope" itemtype="http://schema.org/Organization">
|
||||
<div t-att-class="'name' not in fields and 'css_non_editable_mode_hidden'"><span itemprop="name" t-esc="name"/></div>
|
||||
<div itemprop="address" itemscope="itemscope" itemtype="http://schema.org/PostalAddress">
|
||||
<div t-if="address and 'address' in fields" class='css_editable_mode_hidden'>
|
||||
<i t-if="not options.get('no_marker')" class='fa fa-map-marker'/> <span itemprop="streetAddress" t-raw="address.replace('\n', options.get('no_tag_br') and ', ' or ('<br/>%s' % ('' if options.get('no_marker') else '&nbsp; &nbsp; ')))"/>
|
||||
</div>
|
||||
<div t-if="city and 'city' in fields" class='css_editable_mode_hidden'>
|
||||
<i t-if="not options.get('no_marker')" class='fa fa-map-marker'/> <span itemprop="addressLocality" t-raw="city"/>, <span itemprop="addressCountry" t-raw="country_id"/>
|
||||
</div>
|
||||
<div t-if="phone and 'phone' in fields" class='css_editable_mode_hidden'><i t-if="not options.get('no_marker')" class='fa fa-phone'/> <span itemprop="telephone" t-esc="phone"/></div>
|
||||
<div t-if="mobile and 'mobile' in fields" class='css_editable_mode_hidden'><i t-if="not options.get('no_marker')" class='fa fa-mobile-phone'/> <span itemprop="telephone" t-esc="mobile"/></div>
|
||||
<div t-if="fax and 'fax' in fields" class='css_editable_mode_hidden'><i t-if="not options.get('no_marker')" class='fa fa-file-text-o'/> <span itemprop="faxNumber" t-esc="fax"/></div>
|
||||
<div t-if="email and 'email' in fields" class='css_editable_mode_hidden'><i t-if="not options.get('no_marker')" class='fa fa-envelope'/> <span itemprop="email" t-esc="email"/></div>
|
||||
</div>
|
||||
</address>
|
||||
</template>
|
||||
</data>
|
||||
</openerp>
|
|
@ -113,3 +113,4 @@
|
|||
"access_ir_needaction_mixin","ir_needaction_mixin","model_ir_needaction_mixin",,1,1,1,1
|
||||
"access_res_font_all","res_res_font all","model_res_font",,1,0,0,0
|
||||
"access_res_font_group_user","res_res_font group_user","model_res_font","group_user",1,1,1,1
|
||||
"access_ir_logging","ir_logging admin","model_ir_logging","group_erp_manager",1,1,1,1
|
||||
|
|
|
113
openerp/http.py
113
openerp/http.py
|
@ -23,6 +23,7 @@ import urlparse
|
|||
import warnings
|
||||
|
||||
import babel.core
|
||||
import psutil
|
||||
import psycopg2
|
||||
import simplejson
|
||||
import werkzeug.contrib.sessions
|
||||
|
@ -35,7 +36,7 @@ import werkzeug.wsgi
|
|||
|
||||
import openerp
|
||||
from openerp.service import security, model as service_model
|
||||
import openerp.tools
|
||||
from openerp.tools.func import lazy_property
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
@ -50,6 +51,70 @@ request = _request_stack()
|
|||
A global proxy that always redirect to the current request object.
|
||||
"""
|
||||
|
||||
def replace_request_password(args):
|
||||
# password is always 3rd argument in a request, we replace it in RPC logs
|
||||
# so it's easier to forward logs for diagnostics/debugging purposes...
|
||||
if len(args) > 2:
|
||||
args = list(args)
|
||||
args[2] = '*'
|
||||
return tuple(args)
|
||||
|
||||
def dispatch_rpc(service_name, method, params):
|
||||
""" Handle a RPC call.
|
||||
|
||||
This is pure Python code, the actual marshalling (from/to XML-RPC) is done
|
||||
in a upper layer.
|
||||
"""
|
||||
try:
|
||||
rpc_request = logging.getLogger(__name__ + '.rpc.request')
|
||||
rpc_response = logging.getLogger(__name__ + '.rpc.response')
|
||||
rpc_request_flag = rpc_request.isEnabledFor(logging.DEBUG)
|
||||
rpc_response_flag = rpc_response.isEnabledFor(logging.DEBUG)
|
||||
if rpc_request_flag or rpc_response_flag:
|
||||
start_time = time.time()
|
||||
start_rss, start_vms = 0, 0
|
||||
start_rss, start_vms = psutil.Process(os.getpid()).get_memory_info()
|
||||
if rpc_request and rpc_response_flag:
|
||||
openerp.netsvc.log(rpc_request, logging.DEBUG, '%s.%s' % (service_name, method), replace_request_password(params))
|
||||
|
||||
threading.current_thread().uid = None
|
||||
threading.current_thread().dbname = None
|
||||
if service_name == 'common':
|
||||
dispatch = openerp.service.common.dispatch
|
||||
elif service_name == 'db':
|
||||
dispatch = openerp.service.db.dispatch
|
||||
elif service_name == 'object':
|
||||
dispatch = openerp.service.model.dispatch
|
||||
elif service_name == 'report':
|
||||
dispatch = openerp.service.report.dispatch
|
||||
else:
|
||||
dispatch = openerp.service.wsgi_server.rpc_handlers.get(service_name)
|
||||
result = dispatch(method, params)
|
||||
|
||||
if rpc_request_flag or rpc_response_flag:
|
||||
end_time = time.time()
|
||||
end_rss, end_vms = 0, 0
|
||||
end_rss, end_vms = psutil.Process(os.getpid()).get_memory_info()
|
||||
logline = '%s.%s time:%.3fs mem: %sk -> %sk (diff: %sk)' % (service_name, method, end_time - start_time, start_vms / 1024, end_vms / 1024, (end_vms - start_vms)/1024)
|
||||
if rpc_response_flag:
|
||||
openerp.netsvc.log(rpc_response, logging.DEBUG, logline, result)
|
||||
else:
|
||||
openerp.netsvc.log(rpc_request, logging.DEBUG, logline, replace_request_password(params), depth=1)
|
||||
|
||||
return result
|
||||
except (openerp.osv.orm.except_orm, openerp.exceptions.AccessError, \
|
||||
openerp.exceptions.AccessDenied, openerp.exceptions.Warning, \
|
||||
openerp.exceptions.RedirectWarning):
|
||||
raise
|
||||
except openerp.exceptions.DeferredException, e:
|
||||
_logger.exception(openerp.tools.exception_to_unicode(e))
|
||||
openerp.tools.debugger.post_mortem(openerp.tools.config, e.traceback)
|
||||
raise
|
||||
except Exception, e:
|
||||
_logger.exception(openerp.tools.exception_to_unicode(e))
|
||||
openerp.tools.debugger.post_mortem(openerp.tools.config, sys.exc_info())
|
||||
raise
|
||||
|
||||
def local_redirect(path, query=None, keep_hash=False, forward_debug=True, code=303):
|
||||
url = path
|
||||
if not query:
|
||||
|
@ -628,7 +693,7 @@ class SessionExpiredException(Exception):
|
|||
class Service(object):
|
||||
"""
|
||||
.. deprecated:: 8.0
|
||||
Use ``openerp.netsvc.dispatch_rpc()`` instead.
|
||||
Use ``dispatch_rpc()`` instead.
|
||||
"""
|
||||
def __init__(self, session, service_name):
|
||||
self.session = session
|
||||
|
@ -636,7 +701,7 @@ class Service(object):
|
|||
|
||||
def __getattr__(self, method):
|
||||
def proxy_method(*args):
|
||||
result = openerp.netsvc.dispatch_rpc(self.service_name, method, args)
|
||||
result = dispatch_rpc(self.service_name, method, args)
|
||||
return result
|
||||
return proxy_method
|
||||
|
||||
|
@ -709,7 +774,7 @@ class OpenERPSession(werkzeug.contrib.sessions.Session):
|
|||
HTTP_HOST=wsgienv['HTTP_HOST'],
|
||||
REMOTE_ADDR=wsgienv['REMOTE_ADDR'],
|
||||
)
|
||||
uid = openerp.netsvc.dispatch_rpc('common', 'authenticate', [db, login, password, env])
|
||||
uid = dispatch_rpc('common', 'authenticate', [db, login, password, env])
|
||||
else:
|
||||
security.check(db, uid, password)
|
||||
self.db = db
|
||||
|
@ -813,14 +878,14 @@ class OpenERPSession(werkzeug.contrib.sessions.Session):
|
|||
def send(self, service_name, method, *args):
|
||||
"""
|
||||
.. deprecated:: 8.0
|
||||
Use ``openerp.netsvc.dispatch_rpc()`` instead.
|
||||
Use ``dispatch_rpc()`` instead.
|
||||
"""
|
||||
return openerp.netsvc.dispatch_rpc(service_name, method, args)
|
||||
return dispatch_rpc(service_name, method, args)
|
||||
|
||||
def proxy(self, service):
|
||||
"""
|
||||
.. deprecated:: 8.0
|
||||
Use ``openerp.netsvc.dispatch_rpc()`` instead.
|
||||
Use ``dispatch_rpc()`` instead.
|
||||
"""
|
||||
return Service(self, service)
|
||||
|
||||
|
@ -1013,22 +1078,25 @@ class Root(object):
|
|||
path = openerp.tools.config.session_dir
|
||||
_logger.debug('HTTP sessions stored in: %s', path)
|
||||
self.session_store = werkzeug.contrib.sessions.FilesystemSessionStore(path, session_class=OpenERPSession)
|
||||
self._loaded = False
|
||||
|
||||
# TODO should we move this to ir.http so that only configured modules are served ?
|
||||
_logger.info("HTTP Configuring static files")
|
||||
self.load_addons()
|
||||
|
||||
@lazy_property
|
||||
def nodb_routing_map(self):
|
||||
_logger.info("Generating nondb routing")
|
||||
self.nodb_routing_map = routing_map([''] + openerp.conf.server_wide_modules, True)
|
||||
return routing_map([''] + openerp.conf.server_wide_modules, True)
|
||||
|
||||
def __call__(self, environ, start_response):
|
||||
""" Handle a WSGI request
|
||||
"""
|
||||
if not self._loaded:
|
||||
self._loaded = True
|
||||
self.load_addons()
|
||||
return self.dispatch(environ, start_response)
|
||||
|
||||
def load_addons(self):
|
||||
""" Load all addons from addons patch containg static files and
|
||||
controllers and configure them. """
|
||||
# TODO should we move this to ir.http so that only configured modules are served ?
|
||||
statics = {}
|
||||
|
||||
for addons_path in openerp.modules.module.ad_paths:
|
||||
|
@ -1042,12 +1110,16 @@ class Root(object):
|
|||
_logger.debug("Loading %s", module)
|
||||
if 'openerp.addons' in sys.modules:
|
||||
m = __import__('openerp.addons.' + module)
|
||||
else:
|
||||
m = None
|
||||
addons_module[module] = m
|
||||
addons_manifest[module] = manifest
|
||||
statics['/%s/static' % module] = path_static
|
||||
|
||||
app = werkzeug.wsgi.SharedDataMiddleware(self.dispatch, statics)
|
||||
self.dispatch = DisableCacheMiddleware(app)
|
||||
if statics:
|
||||
_logger.info("HTTP Configuring static files")
|
||||
app = werkzeug.wsgi.SharedDataMiddleware(self.dispatch, statics)
|
||||
self.dispatch = DisableCacheMiddleware(app)
|
||||
|
||||
def setup_session(self, httprequest):
|
||||
# recover or create session
|
||||
|
@ -1173,7 +1245,7 @@ class Root(object):
|
|||
return request.registry['ir.http'].routing_map()
|
||||
|
||||
def db_list(force=False, httprequest=None):
|
||||
dbs = openerp.netsvc.dispatch_rpc("db", "list", [force])
|
||||
dbs = dispatch_rpc("db", "list", [force])
|
||||
return db_filter(dbs, httprequest=httprequest)
|
||||
|
||||
def db_filter(dbs, httprequest=None):
|
||||
|
@ -1218,13 +1290,10 @@ class CommonController(Controller):
|
|||
@route('/jsonrpc', type='json', auth="none")
|
||||
def jsonrpc(self, service, method, args):
|
||||
""" Method used by client APIs to contact OpenERP. """
|
||||
return openerp.netsvc.dispatch_rpc(service, method, args)
|
||||
return dispatch_rpc(service, method, args)
|
||||
|
||||
root = None
|
||||
|
||||
def wsgi_postload():
|
||||
global root
|
||||
root = Root()
|
||||
openerp.service.wsgi_server.register_wsgi_handler(root)
|
||||
# register main wsgi handler
|
||||
root = Root()
|
||||
openerp.service.wsgi_server.register_wsgi_handler(root)
|
||||
|
||||
# vim:et:ts=4:sw=4:
|
||||
|
|
|
@ -19,23 +19,29 @@
|
|||
#
|
||||
##############################################################################
|
||||
|
||||
|
||||
import logging
|
||||
import logging.handlers
|
||||
import os
|
||||
import pprint
|
||||
import release
|
||||
import sys
|
||||
import threading
|
||||
import time
|
||||
import types
|
||||
from pprint import pformat
|
||||
import psutil
|
||||
|
||||
import tools
|
||||
import psycopg2
|
||||
|
||||
import openerp
|
||||
import sql_db
|
||||
import tools
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
def log(logger, level, prefix, msg, depth=None):
|
||||
indent=''
|
||||
indent_after=' '*len(prefix)
|
||||
for line in (prefix + pprint.pformat(msg, depth=depth)).split('\n'):
|
||||
logger.log(level, indent+line)
|
||||
indent=indent_after
|
||||
|
||||
def LocalService(name):
|
||||
"""
|
||||
The openerp.netsvc.LocalService() function is deprecated. It still works
|
||||
|
@ -62,6 +68,36 @@ def LocalService(name):
|
|||
with registry.cursor() as cr:
|
||||
return registry['ir.actions.report.xml']._lookup_report(cr, name[len('report.'):])
|
||||
|
||||
class PostgreSQLHandler(logging.Handler):
|
||||
""" PostgreSQL Loggin Handler will store logs in the database, by default
|
||||
the current database, can be set using --log-db=DBNAME
|
||||
"""
|
||||
def emit(self, record):
|
||||
ct = threading.current_thread()
|
||||
ct_db = getattr(ct, 'dbname', None)
|
||||
ct_uid = getattr(ct, 'uid', None)
|
||||
dbname = tools.config['log_db'] or ct_db
|
||||
if dbname:
|
||||
cr = None
|
||||
try:
|
||||
cr = sql_db.db_connect(dbname).cursor()
|
||||
msg = unicode(record.msg)
|
||||
traceback = getattr(record, 'exc_text', '')
|
||||
if traceback:
|
||||
msg = "%s\n%s" % (msg, traceback)
|
||||
level = logging.getLevelName(record.levelno)
|
||||
val = (ct_uid, ct_uid, 'server', dbname, record.name, level, msg, record.pathname, record.lineno, record.funcName)
|
||||
cr.execute("""
|
||||
INSERT INTO ir_logging(create_date, write_date, create_uid, write_uid, type, dbname, name, level, message, path, line, func)
|
||||
VALUES (NOW() at time zone 'UTC', NOW() at time zone 'UTC', %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
|
||||
""", val )
|
||||
cr.commit()
|
||||
except Exception, e:
|
||||
pass
|
||||
finally:
|
||||
if cr:
|
||||
cr.close()
|
||||
|
||||
BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, _NOTHING, DEFAULT = range(10)
|
||||
#The background is set with 40 plus the number of the color, and the foreground with 30
|
||||
#These are the sequences need to get colored ouput
|
||||
|
@ -107,7 +143,7 @@ def init_logger():
|
|||
if os.name == 'nt':
|
||||
handler = logging.handlers.NTEventLogHandler("%s %s" % (release.description, release.version))
|
||||
else:
|
||||
handler = logging.handlers.SysLogHandler('/dev/log')
|
||||
handler = logging.handlers.SysLogHandler()
|
||||
format = '%s %s' % (release.description, release.version) \
|
||||
+ ':%(dbname)s:%(levelname)s:%(name)s:%(message)s'
|
||||
|
||||
|
@ -115,11 +151,12 @@ def init_logger():
|
|||
# LogFile Handler
|
||||
logf = tools.config['logfile']
|
||||
try:
|
||||
# We check we have the right location for the log files
|
||||
dirname = os.path.dirname(logf)
|
||||
if dirname and not os.path.isdir(dirname):
|
||||
os.makedirs(dirname)
|
||||
if tools.config['logrotate'] is not False:
|
||||
handler = logging.handlers.TimedRotatingFileHandler(logf,'D',1,30)
|
||||
handler = logging.handlers.TimedRotatingFileHandler(filename=logf, when='D', interval=1, backupCount=30)
|
||||
elif os.name == 'posix':
|
||||
handler = logging.handlers.WatchedFileHandler(logf)
|
||||
else:
|
||||
|
@ -135,9 +172,10 @@ def init_logger():
|
|||
# behind Apache with mod_wsgi, handler.stream will have type mod_wsgi.Log,
|
||||
# which has no fileno() method. (mod_wsgi.Log is what is being bound to
|
||||
# sys.stderr when the logging.StreamHandler is being constructed above.)
|
||||
if isinstance(handler, logging.StreamHandler) \
|
||||
and hasattr(handler.stream, 'fileno') \
|
||||
and os.isatty(handler.stream.fileno()):
|
||||
def is_a_tty(stream):
|
||||
return hasattr(stream, 'fileno') and os.isatty(stream.fileno())
|
||||
|
||||
if isinstance(handler, logging.StreamHandler) and is_a_tty(handler.stream):
|
||||
formatter = ColoredFormatter(format)
|
||||
else:
|
||||
formatter = DBFormatter(format)
|
||||
|
@ -145,7 +183,12 @@ def init_logger():
|
|||
|
||||
logging.getLogger().addHandler(handler)
|
||||
|
||||
# Configure handlers
|
||||
if tools.config['log_db']:
|
||||
postgresqlHandler = PostgreSQLHandler()
|
||||
postgresqlHandler.setLevel(logging.WARNING)
|
||||
logging.getLogger().addHandler(postgresqlHandler)
|
||||
|
||||
# Configure loggers levels
|
||||
pseudo_config = PSEUDOCONFIG_MAPPER.get(tools.config['log_level'], [])
|
||||
|
||||
logconfig = tools.config['log_handler']
|
||||
|
@ -162,15 +205,15 @@ def init_logger():
|
|||
|
||||
DEFAULT_LOG_CONFIGURATION = [
|
||||
'openerp.workflow.workitem:WARNING',
|
||||
'openerp.netsvc.rpc.request:INFO',
|
||||
'openerp.netsvc.rpc.response:INFO',
|
||||
'openerp.http.rpc.request:INFO',
|
||||
'openerp.http.rpc.response:INFO',
|
||||
'openerp.addons.web.http:INFO',
|
||||
'openerp.sql_db:INFO',
|
||||
':INFO',
|
||||
]
|
||||
PSEUDOCONFIG_MAPPER = {
|
||||
'debug_rpc_answer': ['openerp:DEBUG','openerp.netsvc.rpc.request:DEBUG', 'openerp.netsvc.rpc.response:DEBUG'],
|
||||
'debug_rpc': ['openerp:DEBUG','openerp.netsvc.rpc.request:DEBUG'],
|
||||
'debug_rpc_answer': ['openerp:DEBUG','openerp.http.rpc.request:DEBUG', 'openerp.http.rpc.response:DEBUG'],
|
||||
'debug_rpc': ['openerp:DEBUG','openerp.http.rpc.request:DEBUG'],
|
||||
'debug': ['openerp:DEBUG'],
|
||||
'debug_sql': ['openerp.sql_db:DEBUG'],
|
||||
'info': [],
|
||||
|
@ -179,99 +222,4 @@ PSEUDOCONFIG_MAPPER = {
|
|||
'critical': ['openerp:CRITICAL'],
|
||||
}
|
||||
|
||||
# A alternative logging scheme for automated runs of the
|
||||
# server intended to test it.
|
||||
def init_alternative_logger():
|
||||
class H(logging.Handler):
|
||||
def emit(self, record):
|
||||
if record.levelno > 20:
|
||||
print record.levelno, record.pathname, record.msg
|
||||
handler = H()
|
||||
# Add the handler to the 'openerp' logger.
|
||||
logger = logging.getLogger('openerp')
|
||||
logger.addHandler(handler)
|
||||
logger.setLevel(logging.ERROR)
|
||||
|
||||
def replace_request_password(args):
|
||||
# password is always 3rd argument in a request, we replace it in RPC logs
|
||||
# so it's easier to forward logs for diagnostics/debugging purposes...
|
||||
if len(args) > 2:
|
||||
args = list(args)
|
||||
args[2] = '*'
|
||||
return tuple(args)
|
||||
|
||||
def log(logger, level, prefix, msg, depth=None):
|
||||
indent=''
|
||||
indent_after=' '*len(prefix)
|
||||
for line in (prefix+pformat(msg, depth=depth)).split('\n'):
|
||||
logger.log(level, indent+line)
|
||||
indent=indent_after
|
||||
|
||||
def dispatch_rpc(service_name, method, params):
|
||||
""" Handle a RPC call.
|
||||
|
||||
This is pure Python code, the actual marshalling (from/to XML-RPC) is done
|
||||
in a upper layer.
|
||||
"""
|
||||
try:
|
||||
rpc_request = logging.getLogger(__name__ + '.rpc.request')
|
||||
rpc_response = logging.getLogger(__name__ + '.rpc.response')
|
||||
rpc_request_flag = rpc_request.isEnabledFor(logging.DEBUG)
|
||||
rpc_response_flag = rpc_response.isEnabledFor(logging.DEBUG)
|
||||
if rpc_request_flag or rpc_response_flag:
|
||||
start_time = time.time()
|
||||
start_rss, start_vms = 0, 0
|
||||
start_rss, start_vms = psutil.Process(os.getpid()).get_memory_info()
|
||||
if rpc_request and rpc_response_flag:
|
||||
log(rpc_request,logging.DEBUG,'%s.%s'%(service_name,method), replace_request_password(params))
|
||||
|
||||
threading.current_thread().uid = None
|
||||
threading.current_thread().dbname = None
|
||||
if service_name == 'common':
|
||||
dispatch = openerp.service.common.dispatch
|
||||
elif service_name == 'db':
|
||||
dispatch = openerp.service.db.dispatch
|
||||
elif service_name == 'object':
|
||||
dispatch = openerp.service.model.dispatch
|
||||
elif service_name == 'report':
|
||||
dispatch = openerp.service.report.dispatch
|
||||
else:
|
||||
dispatch = openerp.service.wsgi_server.rpc_handlers.get(service_name)
|
||||
result = dispatch(method, params)
|
||||
|
||||
if rpc_request_flag or rpc_response_flag:
|
||||
end_time = time.time()
|
||||
end_rss, end_vms = 0, 0
|
||||
end_rss, end_vms = psutil.Process(os.getpid()).get_memory_info()
|
||||
logline = '%s.%s time:%.3fs mem: %sk -> %sk (diff: %sk)' % (service_name, method, end_time - start_time, start_vms / 1024, end_vms / 1024, (end_vms - start_vms)/1024)
|
||||
if rpc_response_flag:
|
||||
log(rpc_response,logging.DEBUG, logline, result)
|
||||
else:
|
||||
log(rpc_request,logging.DEBUG, logline, replace_request_password(params), depth=1)
|
||||
|
||||
return result
|
||||
except openerp.osv.orm.except_orm:
|
||||
raise
|
||||
except openerp.exceptions.AccessError:
|
||||
raise
|
||||
except openerp.exceptions.AccessDenied:
|
||||
raise
|
||||
except openerp.exceptions.Warning:
|
||||
raise
|
||||
except openerp.exceptions.RedirectWarning:
|
||||
raise
|
||||
except openerp.exceptions.DeferredException, e:
|
||||
_logger.exception(tools.exception_to_unicode(e))
|
||||
post_mortem(e.traceback)
|
||||
raise
|
||||
except Exception, e:
|
||||
_logger.exception(tools.exception_to_unicode(e))
|
||||
post_mortem(sys.exc_info())
|
||||
raise
|
||||
|
||||
def post_mortem(info):
|
||||
if tools.config['debug_mode'] and isinstance(info[2], types.TracebackType):
|
||||
import pdb
|
||||
pdb.post_mortem(info[2])
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -126,6 +126,11 @@ def exp_duplicate_database(db_original_name, db_name):
|
|||
with closing(db.cursor()) as cr:
|
||||
cr.autocommit(True) # avoid transaction block
|
||||
cr.execute("""CREATE DATABASE "%s" ENCODING 'unicode' TEMPLATE "%s" """ % (db_name, db_original_name))
|
||||
|
||||
from_fs = openerp.tools.config.filestore(db_original_name)
|
||||
to_fs = openerp.tools.config.filestore(db_name)
|
||||
if os.path.exists(from_fs) and not os.path.exists(to_fs):
|
||||
shutil.copy(from_fs, to_fs)
|
||||
return True
|
||||
|
||||
def exp_get_progress(id):
|
||||
|
@ -178,6 +183,10 @@ def exp_drop(db_name):
|
|||
raise Exception("Couldn't drop database %s: %s" % (db_name, e))
|
||||
else:
|
||||
_logger.info('DROP DB: %s', db_name)
|
||||
|
||||
fs = openerp.tools.config.filestore(db_name)
|
||||
if os.path.exists(fs):
|
||||
shutil.rmtree(fs)
|
||||
return True
|
||||
|
||||
def _set_pg_password_in_environment(func):
|
||||
|
@ -328,6 +337,11 @@ def exp_rename(old_name, new_name):
|
|||
except Exception, e:
|
||||
_logger.error('RENAME DB: %s -> %s failed:\n%s', old_name, new_name, e)
|
||||
raise Exception("Couldn't rename database %s to %s: %s" % (old_name, new_name, e))
|
||||
|
||||
old_fs = openerp.tools.config.filestore(old_name)
|
||||
new_fs = openerp.tools.config.filestore(new_name)
|
||||
if os.path.exists(old_fs) and not os.path.exists(new_fs):
|
||||
shutil.move(old_fs, new_fs)
|
||||
return True
|
||||
|
||||
@openerp.tools.mute_logger('openerp.sql_db')
|
||||
|
|
|
@ -72,7 +72,7 @@ def xmlrpc_return(start_response, service, method, params, string_faultcode=Fals
|
|||
# This also mimics SimpleXMLRPCDispatcher._marshaled_dispatch() for
|
||||
# exception handling.
|
||||
try:
|
||||
result = openerp.netsvc.dispatch_rpc(service, method, params)
|
||||
result = openerp.http.dispatch_rpc(service, method, params)
|
||||
response = xmlrpclib.dumps((result,), methodresponse=1, allow_none=False, encoding=None)
|
||||
except Exception, e:
|
||||
if string_faultcode:
|
||||
|
|
|
@ -35,7 +35,7 @@ from yaml_import import *
|
|||
from sql import *
|
||||
from float_utils import *
|
||||
from mail import *
|
||||
|
||||
from debugger import *
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#openerp.loggers.handlers. -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
|
@ -76,9 +76,10 @@ class configmanager(object):
|
|||
}
|
||||
|
||||
# Not exposed in the configuration file.
|
||||
self.blacklist_for_save = set(
|
||||
['publisher_warranty_url', 'load_language', 'root_path',
|
||||
'init', 'save', 'config', 'update', 'stop_after_init'])
|
||||
self.blacklist_for_save = set([
|
||||
'publisher_warranty_url', 'load_language', 'root_path',
|
||||
'init', 'save', 'config', 'update', 'stop_after_init'
|
||||
])
|
||||
|
||||
# dictionary mapping option destination (keys in self.options) to MyOptions.
|
||||
self.casts = {}
|
||||
|
@ -87,7 +88,10 @@ class configmanager(object):
|
|||
self.config_file = fname
|
||||
self.has_ssl = check_ssl()
|
||||
|
||||
self._LOGLEVELS = dict([(getattr(loglevels, 'LOG_%s' % x), getattr(logging, x)) for x in ('CRITICAL', 'ERROR', 'WARNING', 'INFO', 'DEBUG', 'NOTSET')])
|
||||
self._LOGLEVELS = dict([
|
||||
(getattr(loglevels, 'LOG_%s' % x), getattr(logging, x))
|
||||
for x in ('CRITICAL', 'ERROR', 'WARNING', 'INFO', 'DEBUG', 'NOTSET')
|
||||
])
|
||||
|
||||
version = "%s %s" % (release.description, release.version)
|
||||
self.parser = parser = optparse.OptionParser(version=version, option_class=MyOption)
|
||||
|
@ -179,16 +183,20 @@ class configmanager(object):
|
|||
group.add_option("--logrotate", dest="logrotate", action="store_true", my_default=False, help="enable logfile rotation")
|
||||
group.add_option("--syslog", action="store_true", dest="syslog", my_default=False, help="Send the log to the syslog server")
|
||||
group.add_option('--log-handler', action="append", default=DEFAULT_LOG_HANDLER, my_default=DEFAULT_LOG_HANDLER, metavar="PREFIX:LEVEL", help='setup a handler at LEVEL for a given PREFIX. An empty PREFIX indicates the root logger. This option can be repeated. Example: "openerp.orm:DEBUG" or "werkzeug:CRITICAL" (default: ":INFO")')
|
||||
group.add_option('--log-request', action="append_const", dest="log_handler", const="openerp.netsvc.rpc.request:DEBUG", help='shortcut for --log-handler=openerp.netsvc.rpc.request:DEBUG')
|
||||
group.add_option('--log-response', action="append_const", dest="log_handler", const="openerp.netsvc.rpc.response:DEBUG", help='shortcut for --log-handler=openerp.netsvc.rpc.response:DEBUG')
|
||||
group.add_option('--log-web', action="append_const", dest="log_handler", const="openerp.addons.web.http:DEBUG", help='shortcut for --log-handler=openerp.addons.web.http:DEBUG')
|
||||
group.add_option('--log-request', action="append_const", dest="log_handler", const="openerp.http.rpc.request:DEBUG", help='shortcut for --log-handler=openerp.http.rpc.request:DEBUG')
|
||||
group.add_option('--log-response', action="append_const", dest="log_handler", const="openerp.http.rpc.response:DEBUG", help='shortcut for --log-handler=openerp.http.rpc.response:DEBUG')
|
||||
group.add_option('--log-web', action="append_const", dest="log_handler", const="openerp.http:DEBUG", help='shortcut for --log-handler=openerp.http:DEBUG')
|
||||
group.add_option('--log-sql', action="append_const", dest="log_handler", const="openerp.sql_db:DEBUG", help='shortcut for --log-handler=openerp.sql_db:DEBUG')
|
||||
group.add_option('--log-db', dest='log_db', help="Logging database", my_default=False)
|
||||
# For backward-compatibility, map the old log levels to something
|
||||
# quite close.
|
||||
levels = ['info', 'debug_rpc', 'warn', 'test', 'critical',
|
||||
'debug_sql', 'error', 'debug', 'debug_rpc_answer', 'notset']
|
||||
group.add_option('--log-level', dest='log_level', type='choice', choices=levels,
|
||||
my_default='info', help='specify the level of the logging. Accepted values: ' + str(levels) + ' (deprecated option).')
|
||||
levels = [
|
||||
'info', 'debug_rpc', 'warn', 'test', 'critical',
|
||||
'debug_sql', 'error', 'debug', 'debug_rpc_answer', 'notset'
|
||||
]
|
||||
group.add_option('--log-level', dest='log_level', type='choice',
|
||||
choices=levels, my_default='info',
|
||||
help='specify the level of the logging. Accepted values: %s (deprecated option).' % (levels,))
|
||||
|
||||
parser.add_option_group(group)
|
||||
|
||||
|
@ -384,7 +392,7 @@ class configmanager(object):
|
|||
'xmlrpc', 'syslog', 'without_demo', 'timezone',
|
||||
'xmlrpcs_interface', 'xmlrpcs_port', 'xmlrpcs',
|
||||
'static_http_enable', 'static_http_document_root', 'static_http_url_prefix',
|
||||
'secure_cert_file', 'secure_pkey_file', 'dbfilter', 'log_handler', 'log_level'
|
||||
'secure_cert_file', 'secure_pkey_file', 'dbfilter', 'log_handler', 'log_level', 'log_db'
|
||||
]
|
||||
|
||||
for arg in keys:
|
||||
|
@ -654,6 +662,9 @@ class configmanager(object):
|
|||
os.chmod(d, 0700)
|
||||
return d
|
||||
|
||||
def filestore(self, dbname):
|
||||
return os.path.join(self['data_dir'], 'filestore', dbname)
|
||||
|
||||
config = configmanager()
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Copyright: 2014 - OpenERP S.A. <http://openerp.com>
|
||||
import types
|
||||
|
||||
def post_mortem(config, info):
|
||||
if config['debug_mode'] and isinstance(info[2], types.TracebackType):
|
||||
import pdb
|
||||
pdb.post_mortem(info[2])
|
|
@ -3,7 +3,7 @@
|
|||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
|
||||
# Copyright (C) 2010 OpenERP s.a. (<http://openerp.com>).
|
||||
# Copyright (C) 2010, 2014 OpenERP s.a. (<http://openerp.com>).
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
|
@ -20,11 +20,39 @@
|
|||
#
|
||||
##############################################################################
|
||||
|
||||
__all__ = ['synchronized']
|
||||
__all__ = ['synchronized', 'lazy_property']
|
||||
|
||||
from functools import wraps
|
||||
from inspect import getsourcefile
|
||||
|
||||
|
||||
class lazy_property(object):
|
||||
""" Decorator for a lazy property of an object, i.e., an object attribute
|
||||
that is determined by the result of a method call evaluated once. To
|
||||
reevaluate the property, simply delete the attribute on the object, and
|
||||
get it again.
|
||||
"""
|
||||
def __init__(self, fget):
|
||||
self.fget = fget
|
||||
self.name = fget.__name__
|
||||
|
||||
def __get__(self, obj, cls):
|
||||
if obj is None:
|
||||
return self
|
||||
value = self.fget(obj)
|
||||
setattr(obj, self.name, value)
|
||||
return value
|
||||
|
||||
@staticmethod
|
||||
def reset_all(obj):
|
||||
""" Reset all lazy properties on the instance `obj`. """
|
||||
cls = type(obj)
|
||||
obj_dict = obj.__dict__
|
||||
for name in obj_dict.keys():
|
||||
if isinstance(getattr(cls, name, None), lazy_property):
|
||||
obj_dict.pop(name)
|
||||
|
||||
|
||||
def synchronized(lock_attr='_lock'):
|
||||
def decorator(func):
|
||||
@wraps(func)
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
|
||||
# Copyright (C) 2010-2013 OpenERP s.a. (<http://openerp.com>).
|
||||
# Copyright (C) 2010-2014 OpenERP s.a. (<http://openerp.com>).
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
|
@ -83,7 +83,8 @@ def exec_pg_command(name, *args):
|
|||
raise Exception('Couldn\'t find %s' % name)
|
||||
args2 = (prog,) + args
|
||||
|
||||
return subprocess.call(args2)
|
||||
with open(os.devnull) as dn:
|
||||
return subprocess.call(args2, stdout=dn, stderr=subprocess.STDOUT)
|
||||
|
||||
def exec_pg_command_pipe(name, *args):
|
||||
prog = find_pg_tool(name)
|
||||
|
|
|
@ -458,7 +458,7 @@ def trans_export(lang, modules, buffer, format, cr):
|
|||
row.setdefault('tnrs', []).append((type, name, res_id))
|
||||
row.setdefault('comments', set()).update(comments)
|
||||
|
||||
for src, row in grouped_rows.items():
|
||||
for src, row in sorted(grouped_rows.items()):
|
||||
if not lang:
|
||||
# translation template, so no translation value
|
||||
row['translation'] = ''
|
||||
|
|
Loading…
Reference in New Issue