diff --git a/debian/control b/debian/control index 74cd027427a..7f7786ee98d 100644 --- a/debian/control +++ b/debian/control @@ -16,6 +16,7 @@ Depends: python, postgresql-client, python-dateutil, + python-decorator, python-docutils, python-feedparser, python-gdata, @@ -34,6 +35,7 @@ Depends: python-pydot, python-pyparsing, python-reportlab, + python-requests, python-simplejson, python-tz, python-unittest2, diff --git a/oe b/oe index 59827731409..2da32cbe31d 100755 --- a/oe +++ b/oe @@ -1,5 +1,8 @@ #! /usr/bin/env python2 if __name__ == '__main__': + import sys + if sys.argv[1] == 'run-tests': + sys.exit(0) import openerpcommand.main openerpcommand.main.run() diff --git a/openerp-wsgi.py b/openerp-wsgi.py index 90f43ddab21..4a3f34d5764 100644 --- a/openerp-wsgi.py +++ b/openerp-wsgi.py @@ -40,6 +40,8 @@ conf['addons_path'] = '../../addons/trunk,../../web/trunk/addons' #---------------------------------------------------------- application = openerp.service.wsgi_server.application +openerp.service.server.load_server_wide_modules() + #---------------------------------------------------------- # Gunicorn #---------------------------------------------------------- diff --git a/openerp/addons/base/__init__.py b/openerp/addons/base/__init__.py index 26b39de74ad..237e3a22cba 100644 --- a/openerp/addons/base/__init__.py +++ b/openerp/addons/base/__init__.py @@ -24,7 +24,6 @@ import workflow import module import res import report -import test import tests # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/addons/base/__openerp__.py b/openerp/addons/base/__openerp__.py index 3c3c290f986..3d0d3e4dda4 100644 --- a/openerp/addons/base/__openerp__.py +++ b/openerp/addons/base/__openerp__.py @@ -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', diff --git a/openerp/addons/base/i18n/ab.po b/openerp/addons/base/i18n/ab.po index af76114eaa5..b607b97927a 100644 --- a/openerp/addons/base/i18n/ab.po +++ b/openerp/addons/base/i18n/ab.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:36+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:37+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/af.po b/openerp/addons/base/i18n/af.po index 95d7c4cddb3..18368ca9625 100644 --- a/openerp/addons/base/i18n/af.po +++ b/openerp/addons/base/i18n/af.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:36+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:38+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/am.po b/openerp/addons/base/i18n/am.po index 2e1580840e1..e01800e903e 100644 --- a/openerp/addons/base/i18n/am.po +++ b/openerp/addons/base/i18n/am.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:37+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:38+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/ar.po b/openerp/addons/base/i18n/ar.po index 72cc888612d..94d519ede9f 100644 --- a/openerp/addons/base/i18n/ar.po +++ b/openerp/addons/base/i18n/ar.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:37+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:38+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/bg.po b/openerp/addons/base/i18n/bg.po index a1343e9b5b2..22143793621 100644 --- a/openerp/addons/base/i18n/bg.po +++ b/openerp/addons/base/i18n/bg.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:38+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:39+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/bn.po b/openerp/addons/base/i18n/bn.po index 4cae60c0fd9..0b90f4004aa 100644 --- a/openerp/addons/base/i18n/bn.po +++ b/openerp/addons/base/i18n/bn.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:37+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:39+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/bs.po b/openerp/addons/base/i18n/bs.po index 32692af2985..babf20c960f 100644 --- a/openerp/addons/base/i18n/bs.po +++ b/openerp/addons/base/i18n/bs.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:38+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:39+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/ca.po b/openerp/addons/base/i18n/ca.po index 5e11069300e..ffc9fde2411 100644 --- a/openerp/addons/base/i18n/ca.po +++ b/openerp/addons/base/i18n/ca.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:38+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:39+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/cs.po b/openerp/addons/base/i18n/cs.po index cc5f1bf1586..a887afb6485 100644 --- a/openerp/addons/base/i18n/cs.po +++ b/openerp/addons/base/i18n/cs.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:38+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:40+0000\n" +"X-Generator: Launchpad (build 16985)\n" "X-Poedit-Language: Czech\n" #. module: base @@ -64,7 +64,7 @@ msgstr "Zobrazení architektury" #. module: base #: model:ir.module.module,summary:base.module_sale_stock msgid "Quotation, Sale Orders, Delivery & Invoicing Control" -msgstr "Nabídky, zakázky, řízení dopravy a fakturace" +msgstr "Nabídky, zakázky, řízení dodávek a fakturace" #. module: base #: selection:ir.sequence,implementation:0 @@ -87,8 +87,7 @@ msgid "" "Helps you manage your projects and tasks by tracking them, generating " "plannings, etc..." msgstr "" -"Pomůže vám spravovat projekty a úkoly jejich sledováním, generováním plánů, " -"apod." +"Pomůže vám řídit projekty a úkoly jejich sledováním, generováním plánů, aj." #. module: base #: model:ir.module.module,summary:base.module_point_of_sale @@ -158,7 +157,7 @@ msgstr "" #. module: base #: help:res.partner,employee:0 msgid "Check this box if this contact is an Employee." -msgstr "Zaškrtněte toto pole, pokud je kontakt zaměstnanec." +msgstr "Zaškrtněte toto pole, pokud je kontakt zaměstnancem." #. module: base #: help:ir.model.fields,domain:0 @@ -11056,7 +11055,7 @@ msgstr "Úkoly" #. module: base #: model:ir.module.module,shortdesc:base.module_product_visible_discount msgid "Prices Visible Discounts" -msgstr "" +msgstr "Zobrazení slevy u ceny" #. module: base #: field:ir.attachment,datas:0 diff --git a/openerp/addons/base/i18n/da.po b/openerp/addons/base/i18n/da.po index 980899edd9f..4de0dfda4aa 100644 --- a/openerp/addons/base/i18n/da.po +++ b/openerp/addons/base/i18n/da.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:39+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:40+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/de.po b/openerp/addons/base/i18n/de.po index 346c5f7439e..77d38b8c065 100644 --- a/openerp/addons/base/i18n/de.po +++ b/openerp/addons/base/i18n/de.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:40+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:42+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/el.po b/openerp/addons/base/i18n/el.po index 0b1c0c4a5d7..83bc68b4931 100644 --- a/openerp/addons/base/i18n/el.po +++ b/openerp/addons/base/i18n/el.po @@ -12,8 +12,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:40+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:42+0000\n" +"X-Generator: Launchpad (build 16985)\n" "X-Poedit-Country: GREECE\n" "X-Poedit-Language: Greek\n" "X-Poedit-SourceCharset: utf-8\n" diff --git a/openerp/addons/base/i18n/en_GB.po b/openerp/addons/base/i18n/en_GB.po index 5aaf09880de..d51e067b3af 100644 --- a/openerp/addons/base/i18n/en_GB.po +++ b/openerp/addons/base/i18n/en_GB.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:48+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:52+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es.po b/openerp/addons/base/i18n/es.po index 5290f4cb519..4df65aba682 100644 --- a/openerp/addons/base/i18n/es.po +++ b/openerp/addons/base/i18n/es.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:46+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:49+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es_AR.po b/openerp/addons/base/i18n/es_AR.po index a6047c27dc2..a74699fb374 100644 --- a/openerp/addons/base/i18n/es_AR.po +++ b/openerp/addons/base/i18n/es_AR.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:48+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:52+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es_BO.po b/openerp/addons/base/i18n/es_BO.po index ff376f2a0ae..9d4ae622b5c 100644 --- a/openerp/addons/base/i18n/es_BO.po +++ b/openerp/addons/base/i18n/es_BO.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:49+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:53+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es_CL.po b/openerp/addons/base/i18n/es_CL.po index e85936de771..a113e36a82e 100644 --- a/openerp/addons/base/i18n/es_CL.po +++ b/openerp/addons/base/i18n/es_CL.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:48+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:52+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es_CR.po b/openerp/addons/base/i18n/es_CR.po index 969bbe3e25c..e5a617216b6 100644 --- a/openerp/addons/base/i18n/es_CR.po +++ b/openerp/addons/base/i18n/es_CR.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:49+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:53+0000\n" +"X-Generator: Launchpad (build 16985)\n" "Language: \n" #. module: base diff --git a/openerp/addons/base/i18n/es_DO.po b/openerp/addons/base/i18n/es_DO.po index 5e22c757364..140f6cfa803 100644 --- a/openerp/addons/base/i18n/es_DO.po +++ b/openerp/addons/base/i18n/es_DO.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:48+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:52+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es_EC.po b/openerp/addons/base/i18n/es_EC.po index 0035789b6da..5804c8e377d 100644 --- a/openerp/addons/base/i18n/es_EC.po +++ b/openerp/addons/base/i18n/es_EC.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:50+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:54+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es_MX.po b/openerp/addons/base/i18n/es_MX.po index 6268a950bbc..cc4ea1ea67a 100644 --- a/openerp/addons/base/i18n/es_MX.po +++ b/openerp/addons/base/i18n/es_MX.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:49+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:54+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es_PE.po b/openerp/addons/base/i18n/es_PE.po index f992ba35e92..46733d5b1c6 100644 --- a/openerp/addons/base/i18n/es_PE.po +++ b/openerp/addons/base/i18n/es_PE.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:50+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:54+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es_VE.po b/openerp/addons/base/i18n/es_VE.po index 606226222ea..039baabe46c 100644 --- a/openerp/addons/base/i18n/es_VE.po +++ b/openerp/addons/base/i18n/es_VE.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:47+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:51+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/et.po b/openerp/addons/base/i18n/et.po index a5d7c6d6c95..aa32b7585ab 100644 --- a/openerp/addons/base/i18n/et.po +++ b/openerp/addons/base/i18n/et.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:39+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:40+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/eu.po b/openerp/addons/base/i18n/eu.po index 5fff780629c..517499d3839 100644 --- a/openerp/addons/base/i18n/eu.po +++ b/openerp/addons/base/i18n/eu.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:37+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:39+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/fa.po b/openerp/addons/base/i18n/fa.po index b09b365c526..55137dce3ab 100644 --- a/openerp/addons/base/i18n/fa.po +++ b/openerp/addons/base/i18n/fa.po @@ -9,8 +9,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:44+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:46+0000\n" +"X-Generator: Launchpad (build 16985)\n" "X-Poedit-Country: IRAN, ISLAMIC REPUBLIC OF\n" "X-Poedit-Language: Persian\n" diff --git a/openerp/addons/base/i18n/fa_AF.po b/openerp/addons/base/i18n/fa_AF.po index c973339c63e..2673b2cc498 100644 --- a/openerp/addons/base/i18n/fa_AF.po +++ b/openerp/addons/base/i18n/fa_AF.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:50+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:55+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/fi.po b/openerp/addons/base/i18n/fi.po index 07d98a2c908..93f646c46e7 100644 --- a/openerp/addons/base/i18n/fi.po +++ b/openerp/addons/base/i18n/fi.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:39+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:41+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -25,7 +25,7 @@ msgid "" " " msgstr "" "\n" -"Moduuli Šekkien kirjoittamisen ja tulostamiseen.\n" +"Moduuli Shekkien kirjoittamisen ja tulostamiseen.\n" "===========================================\n" " " @@ -129,7 +129,7 @@ msgstr "" "Moduuli joka lisää valmistajat ja ominaisuudet tuotelomakkeelle.\n" "=========================================================\n" "\n" -"Voit net määritellä tuotteelle seuraavat tiedot:\n" +"Voit nyt määritellä tuotteelle seuraavat tiedot:\n" "---------------------------------------------------------\n" " * Valmistaja\n" " * Valmistajan tuotenimi\n" @@ -405,6 +405,13 @@ msgid "" "invoices from picking, OpenERP is able to add and compute the shipping " "line.\n" msgstr "" +"\n" +"Sallii toimitustapojen lisäämisen myyntitilauksille ja keräilyyn. \n" +"==============================================================\n" +"\n" +"Voit määritellä oman huolitsijan ja toimitustaulukon hinnoille. Kun laskut " +"luodaan \n" +"keräilyssä, OpenERP lisää lähetysrivit ja laskee nille hinnat.\n" #. module: base #: code:addons/base/ir/ir_filters.py:80 @@ -550,7 +557,7 @@ msgstr "" #. module: base #: view:workflow.transition:0 msgid "Workflow Transition" -msgstr "" +msgstr "Työnkulun eteneminen" #. module: base #: model:res.country,name:base.gf @@ -599,6 +606,20 @@ msgid "" "* Use emails to automatically confirm and send acknowledgements for any " "event registration\n" msgstr "" +"\n" +"Tapahtumien organisointi ja hallinta.\n" +"====================================\n" +"\n" +"Tapahtumamoduuli mahdollistaa tehokkaan tapahtumien organisoinnin ja niihin " +"liittyvien \n" +"töiden hallinnan: suunnittelun, rekisteröintien seurannan, osallistumisen " +"jne. \n" +"\n" +"Pääominaisuudet\n" +"------------\n" +"* Hallitse tapahtumia ja rekisteröintejä\n" +"* Käytä sähköpostia automatisoimaan vahvistuksia ja lähettämään kuittaus " +"jokaisesta rekisteröitymisestä.\n" #. module: base #: selection:base.language.install,lang:0 @@ -688,7 +709,7 @@ msgstr "Palau" #. module: base #: view:res.partner:0 msgid "Sales & Purchases" -msgstr "Myynti ja hankinta" +msgstr "Myynnit & Ostot" #. module: base #: view:ir.translation:0 @@ -1616,6 +1637,11 @@ msgid "" "=============\n" " " msgstr "" +"\n" +"Tämä moduuli lisää palautevalikon ja toimii jos Palauteportaali on " +"asennettu. \n" +"=======================================================================\n" +" " #. module: base #: model:ir.actions.act_window,help:base.action_res_partner_bank_account_form @@ -1815,7 +1841,7 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_portal_project_issue msgid "Portal Issue" -msgstr "Porttaaliongelma" +msgstr "Portaaliongelma" #. module: base #: model:ir.ui.menu,name:base.menu_tools @@ -1950,7 +1976,7 @@ msgstr "Alankomaat" #. module: base #: model:ir.module.module,shortdesc:base.module_portal_event msgid "Portal Event" -msgstr "Porttaalitapahtuma" +msgstr "Portaalitapahtuma" #. module: base #: selection:ir.translation,state:0 @@ -3836,7 +3862,7 @@ msgstr "Raportointi" #: field:res.partner,title:0 #: field:res.partner.title,name:0 msgid "Title" -msgstr "Yhtiömuoto" +msgstr "Titteli" #. module: base #: help:ir.property,res_id:0 @@ -6164,7 +6190,7 @@ msgstr "Ryhmän nimi ei voi alkaa \"-\"" #: view:ir.module.module:0 #: model:ir.ui.menu,name:base.module_mi msgid "Apps" -msgstr "Sovellukset" +msgstr "Sovelluskauppa" #. module: base #: view:ir.ui.view_sc:0 @@ -7726,7 +7752,7 @@ msgstr "Tämä ikkuna" #. module: base #: model:ir.module.module,shortdesc:base.module_portal_anonymous msgid "Anonymous portal" -msgstr "Yleinen porttaali" +msgstr "Anonyymiportaali" #. module: base #: field:base.language.export,format:0 @@ -7784,7 +7810,7 @@ msgstr "Salasana" #. module: base #: model:ir.module.module,shortdesc:base.module_portal_claim msgid "Portal Claim" -msgstr "Reklmaatioporttaali" +msgstr "Palauteportaali" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_pe @@ -7837,7 +7863,7 @@ msgstr "RML sisäinen ylätunniste" #. module: base #: field:ir.actions.act_window,search_view_id:0 msgid "Search View Ref." -msgstr "Hae näytettävä viite" +msgstr "Hae näytettävä referenssi" #. module: base #: help:res.users,partner_id:0 @@ -8029,7 +8055,7 @@ msgstr "Liike- ja analyyttinen kirjanpito" #. module: base #: model:ir.module.module,shortdesc:base.module_portal_project msgid "Portal Project" -msgstr "Porttaaliprojekti" +msgstr "Portaaliprojekti" #. module: base #: model:res.country,name:base.cc @@ -8538,7 +8564,7 @@ msgstr "Hongkong" #. module: base #: model:ir.module.module,shortdesc:base.module_portal_sale msgid "Portal Sale" -msgstr "Myyntiporttaali" +msgstr "Myyntiportaali" #. module: base #: field:ir.default,ref_id:0 @@ -8662,7 +8688,7 @@ msgstr "Alavalikot" #. module: base #: report:ir.module.reference:0 msgid "Introspection report on objects" -msgstr "Introspektioraportti objekteista" +msgstr "Moduulin tekninen opas" #. module: base #: model:ir.module.module,shortdesc:base.module_web_analytics @@ -8814,7 +8840,7 @@ msgstr "" #. module: base #: model:ir.ui.menu,name:base.menu_view_base_module_update msgid "Update Modules List" -msgstr "Päivitä lista moduuleista" +msgstr "Päivitä moduulilista" #. module: base #: code:addons/base/module/module.py:359 @@ -10021,7 +10047,7 @@ msgstr "Kenttien kuvaukset" #. module: base #: model:ir.module.module,shortdesc:base.module_analytic_contract_hr_expense msgid "Contracts Management: hr_expense link" -msgstr "Sopimushallint: hr_expense link" +msgstr "Sopimushallinat: hr_expense link" #. module: base #: view:ir.attachment:0 @@ -10138,7 +10164,7 @@ msgstr "" #: view:res.groups:0 #: field:res.partner,comment:0 msgid "Notes" -msgstr "Huomautukset" +msgstr "Muistiinpanot" #. module: base #: field:ir.config_parameter,value:0 @@ -10283,7 +10309,7 @@ msgstr "Väliyksikkö" #. module: base #: model:ir.module.module,shortdesc:base.module_portal_stock msgid "Portal Stock" -msgstr "Porttaalivarasto" +msgstr "Portaalivarasto" #. module: base #: field:workflow.activity,kind:0 @@ -10351,7 +10377,7 @@ msgstr "Kohdetietueen ID tietokannassa" #. module: base #: model:ir.module.module,shortdesc:base.module_account_analytic_analysis msgid "Contracts Management" -msgstr "Sopimustenhallinta" +msgstr "Sopimushallinta" #. module: base #: selection:base.language.install,lang:0 @@ -10455,7 +10481,7 @@ msgstr "Moniyritys" #: model:ir.module.category,name:base.module_category_portal #: model:ir.module.module,shortdesc:base.module_portal msgid "Portal" -msgstr "Porttaali" +msgstr "Portaali" #. module: base #: selection:ir.translation,state:0 @@ -10656,7 +10682,7 @@ msgstr "Tehtävät" #. module: base #: model:ir.module.module,shortdesc:base.module_portal_hr_employees msgid "Portal HR employees" -msgstr "Henkilöstöhallinnon työntekijäporttaali" +msgstr "Henkilöstöhallinnon työntekijäportaali" #. module: base #: selection:base.language.install,lang:0 @@ -12137,7 +12163,7 @@ msgstr "Menetelmälle välitettävät argumentit, esim. (uid,...)." #. module: base #: report:ir.module.reference:0 msgid "Reference Guide" -msgstr "Referenssiopaste" +msgstr "Tekninen opas" #. module: base #: model:ir.model,name:base.model_res_partner @@ -12595,7 +12621,7 @@ msgstr "Malediivit" #. module: base #: model:ir.module.module,shortdesc:base.module_portal_crm msgid "Portal CRM" -msgstr "CRM-porttaali" +msgstr "CRM-portaali" #. module: base #: model:ir.ui.menu,name:base.next_id_4 @@ -13158,7 +13184,7 @@ msgstr "" #. module: base #: field:res.company,company_registry:0 msgid "Company Registry" -msgstr "Yritysrekisteri" +msgstr "Y-tunnus" #. module: base #: view:ir.actions.report.xml:0 @@ -13471,7 +13497,7 @@ msgstr "Riippuvuudet:" #. module: base #: field:res.company,vat:0 msgid "Tax ID" -msgstr "Vero ID" +msgstr "VAT-numero" #. module: base #: model:ir.module.module,shortdesc:base.module_account_bank_statement_extensions @@ -13821,7 +13847,7 @@ msgstr "Marokko - Kirjanpito" #: field:res.bank,bic:0 #: field:res.partner.bank,bank_bic:0 msgid "Bank Identifier Code" -msgstr "BIC koodi" +msgstr "BIC-koodi" #. module: base #: view:base.language.export:0 @@ -14878,7 +14904,7 @@ msgstr "Bulgaria / български език" #. module: base #: model:ir.ui.menu,name:base.menu_aftersale msgid "After-Sale Services" -msgstr "Jälkimarkkinapalvelut" +msgstr "Asiakaspalvelut" #. module: base #: field:base.language.import,code:0 @@ -15482,7 +15508,7 @@ msgstr "Matkapuhelinnumero" #: model:ir.model,name:base.model_res_partner_category #: view:res.partner.category:0 msgid "Partner Categories" -msgstr "Kumppanien ryhmät" +msgstr "Kumppaniryhmät" #. module: base #: view:base.module.upgrade:0 @@ -15623,7 +15649,7 @@ msgstr "" #: model:ir.actions.act_window,name:base.open_module_tree #: model:ir.ui.menu,name:base.menu_module_tree msgid "Installed Modules" -msgstr "Asennetut moduulit" +msgstr "Asenna moduulit" #. module: base #: code:addons/base/res/res_users.py:170 @@ -15690,7 +15716,7 @@ msgstr "" #. module: base #: view:res.partner:0 msgid "Internal Notes" -msgstr "Sisäiset huomautukset" +msgstr "Sisäiset muistiinpanot" #. module: base #: model:res.partner.title,name:base.res_partner_title_pvt_ltd diff --git a/openerp/addons/base/i18n/fr.po b/openerp/addons/base/i18n/fr.po index e77035c9574..faaa7ded49a 100644 --- a/openerp/addons/base/i18n/fr.po +++ b/openerp/addons/base/i18n/fr.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:40+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:41+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -9951,7 +9951,7 @@ msgid "" msgstr "" "\n" "Le noyau d'OpenERP, nécessaire pour toute installation.\n" -"===================================================\n" +"=======================================================\n" #. module: base #: model:ir.model,name:base.model_ir_server_object_lines diff --git a/openerp/addons/base/i18n/fr_CA.po b/openerp/addons/base/i18n/fr_CA.po index 63fa854f839..96217a0ed29 100644 --- a/openerp/addons/base/i18n/fr_CA.po +++ b/openerp/addons/base/i18n/fr_CA.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:48+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:53+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -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 diff --git a/openerp/addons/base/i18n/gl.po b/openerp/addons/base/i18n/gl.po index cff4bafb75a..33e0ca7f8e0 100644 --- a/openerp/addons/base/i18n/gl.po +++ b/openerp/addons/base/i18n/gl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:40+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:42+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/gu.po b/openerp/addons/base/i18n/gu.po index 5d6e2d50420..bb053ba30fe 100644 --- a/openerp/addons/base/i18n/gu.po +++ b/openerp/addons/base/i18n/gu.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:41+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:42+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/he.po b/openerp/addons/base/i18n/he.po index 2f31ae2c3c7..370dc41acf9 100644 --- a/openerp/addons/base/i18n/he.po +++ b/openerp/addons/base/i18n/he.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:41+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:43+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/hi.po b/openerp/addons/base/i18n/hi.po index 8c43c8f933d..0df8f74590c 100644 --- a/openerp/addons/base/i18n/hi.po +++ b/openerp/addons/base/i18n/hi.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:41+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:43+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/hr.po b/openerp/addons/base/i18n/hr.po index 4c94c2fa7df..cd0597f7d39 100644 --- a/openerp/addons/base/i18n/hr.po +++ b/openerp/addons/base/i18n/hr.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:45+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:48+0000\n" +"X-Generator: Launchpad (build 16985)\n" "Language: hr\n" #. module: base diff --git a/openerp/addons/base/i18n/hu.po b/openerp/addons/base/i18n/hu.po index 361444eb848..c97b13187a0 100644 --- a/openerp/addons/base/i18n/hu.po +++ b/openerp/addons/base/i18n/hu.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:41+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:43+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/hy.po b/openerp/addons/base/i18n/hy.po index 1d3b92c118b..e416c0e4a62 100644 --- a/openerp/addons/base/i18n/hy.po +++ b/openerp/addons/base/i18n/hy.po @@ -9,8 +9,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:37+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:38+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/id.po b/openerp/addons/base/i18n/id.po index 1e67e4d07da..25414f99fb5 100644 --- a/openerp/addons/base/i18n/id.po +++ b/openerp/addons/base/i18n/id.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:42+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:43+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -211,6 +211,15 @@ msgid "" "revenue\n" "reports." msgstr "" +"\n" +"Bentuk tagihan anda dari entri Expenses, Timesheet.\n" +"========================================================\n" +"\n" +"Modul untuk menerbitkan tagihan berbasis biaya (sdm, biaya, dsb).\n" +"\n" +"Anda dapat mendefinisikan daftar harga pada akun analitik, membuat laporan " +"anggaran \n" +"penghasilan." #. module: base #: code:addons/base/ir/ir_sequence.py:134 @@ -299,6 +308,12 @@ msgid "" "\n" " " msgstr "" +"\n" +"Lokalisasi skema akunting dan pajak Chili.\n" +"==============================================\n" +"Plan contable chileno e impuestos de acuerdo a disposiciones vigentes\n" +"\n" +" " #. module: base #: model:ir.module.module,shortdesc:base.module_sale @@ -398,6 +413,15 @@ msgid "" "invoices from picking, OpenERP is able to add and compute the shipping " "line.\n" msgstr "" +"\n" +"Mengizinkan anda untuk menambahkan metode deliveri pada order penjualan dan " +"pengambilan.\n" +"==============================================================\n" +"\n" +"Anda dapat menentukan carrier sendiri dan metode antar untuk harga tersebut. " +"Saat membuat\n" +"tagihan dari pengantaran, OpenERP dapat menambah dan menghitung biaya " +"pengiriman.\n" #. module: base #: code:addons/base/ir/ir_filters.py:80 diff --git a/openerp/addons/base/i18n/is.po b/openerp/addons/base/i18n/is.po index 4bcccb5530e..125515b191f 100644 --- a/openerp/addons/base/i18n/is.po +++ b/openerp/addons/base/i18n/is.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:41+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:43+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/it.po b/openerp/addons/base/i18n/it.po index c9631c7f581..28d29b79aaf 100644 --- a/openerp/addons/base/i18n/it.po +++ b/openerp/addons/base/i18n/it.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:42+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:44+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/ja.po b/openerp/addons/base/i18n/ja.po index 383540b1d4f..3af2a469283 100644 --- a/openerp/addons/base/i18n/ja.po +++ b/openerp/addons/base/i18n/ja.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:42+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:44+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -411,7 +411,7 @@ msgstr "与信限度" #: field:ir.model.data,date_update:0 #: field:ir.model.relation,date_update:0 msgid "Update Date" -msgstr "日付の更新" +msgstr "更新日" #. module: base #: model:ir.module.module,shortdesc:base.module_base_action_rule @@ -2295,7 +2295,7 @@ msgstr "メソッド" #. module: base #: model:ir.module.module,shortdesc:base.module_auth_crypt msgid "Password Encryption" -msgstr "" +msgstr "パスワード暗号化" #. module: base #: view:workflow.activity:0 @@ -3262,7 +3262,7 @@ msgstr "アルメニア" #. module: base #: model:ir.module.module,summary:base.module_hr_evaluation msgid "Periodical Evaluations, Appraisals, Surveys" -msgstr "" +msgstr "定期評価、査定、調査" #. module: base #: model:ir.actions.act_window,name:base.ir_property_form @@ -4582,7 +4582,7 @@ msgstr "スペイン語(ホンジュラス)/ Español (HN)" #. module: base #: view:ir.sequence.type:0 msgid "Sequence Type" -msgstr "順序タイプ" +msgstr "付番タイプ" #. module: base #: view:base.language.export:0 @@ -5141,7 +5141,7 @@ msgstr "銀行口座タイプ" #. module: base #: help:ir.sequence,suffix:0 msgid "Suffix value of the record for the sequence" -msgstr "順序のためのレコードのサフィックス値" +msgstr "この付番定義でレコードに適用するサフィックス値" #. module: base #: help:ir.mail_server,smtp_user:0 @@ -5588,7 +5588,7 @@ msgstr "起動設定ウィザード" #. module: base #: model:ir.module.module,summary:base.module_mrp msgid "Manufacturing Orders, Bill of Materials, Routing" -msgstr "" +msgstr "製造オーダ、部品表、工順" #. module: base #: field:ir.attachment,name:0 @@ -6140,7 +6140,7 @@ msgstr "ショートカット" #. module: base #: field:ir.model.data,date_init:0 msgid "Init Date" -msgstr "整数データ" +msgstr "作成日" #. module: base #: selection:base.language.install,lang:0 @@ -7630,7 +7630,7 @@ msgstr "" #. module: base #: help:ir.sequence,number_next:0 msgid "Next number of this sequence" -msgstr "この順序の次の番号" +msgstr "この付番定義の次の番号" #. module: base #: view:res.partner:0 @@ -7954,7 +7954,7 @@ msgstr "カスタム項目" #. module: base #: model:ir.module.module,summary:base.module_account_accountant msgid "Financial and Analytic Accounting" -msgstr "" +msgstr "財務会計、分析会計" #. module: base #: model:ir.module.module,shortdesc:base.module_portal_project @@ -8016,6 +8016,12 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" クリックしてアドレス帳に連絡先を追加してください。\n" +"

\n" +" OpenERPは顧客、ディスカッション、商機の履歴、文書など関連するすべての活動の追跡を容易にします。\n" +"

\n" +" " #. module: base #: model:ir.actions.act_window,name:base.bank_account_update @@ -8242,7 +8248,7 @@ msgstr "" #. module: base #: model:ir.module.module,summary:base.module_hr_recruitment msgid "Jobs, Recruitment, Applications, Job Interviews" -msgstr "" +msgstr "仕事、求人、応募、面接" #. module: base #: code:addons/base/module/module.py:539 @@ -8651,7 +8657,7 @@ msgstr "グループのユーザは自動的にグループを継承します。 #. module: base #: model:ir.module.module,summary:base.module_note msgid "Sticky notes, Collaborative, Memos" -msgstr "" +msgstr "付箋、コラボレーション、メモ" #. module: base #: model:ir.module.module,shortdesc:base.module_hr_attendance @@ -9789,7 +9795,7 @@ msgstr "ドイツ" #. module: base #: model:ir.module.module,shortdesc:base.module_auth_oauth msgid "OAuth2 Authentication" -msgstr "" +msgstr "OAuth2認証" #. module: base #: view:workflow:0 @@ -9985,7 +9991,7 @@ msgstr "" #. module: base #: model:ir.module.module,summary:base.module_hr_holidays msgid "Holidays, Allocation and Leave Requests" -msgstr "" +msgstr "休暇割当、申請・承認" #. module: base #: model:ir.module.module,description:base.module_web_hello @@ -10032,6 +10038,12 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" クリックしてアドレス帳に連絡先を追加してください。\n" +"

\n" +" OpenERPは仕入先、ディスカッション、購入の履歴、文書など関連するすべての活動の追跡を容易にします。\n" +"

\n" +" " #. module: base #: model:res.country,name:base.lr @@ -10123,7 +10135,7 @@ msgstr "発注分析計画" #: model:ir.actions.act_window,name:base.ir_sequence_type #: model:ir.ui.menu,name:base.menu_ir_sequence_type msgid "Sequence Codes" -msgstr "順序コード" +msgstr "付番コード" #. module: base #: selection:base.language.install,lang:0 @@ -10778,7 +10790,7 @@ msgstr "国の状態" #. module: base #: model:ir.ui.menu,name:base.next_id_5 msgid "Sequences & Identifiers" -msgstr "順序と識別子" +msgstr "付番定義とID" #. module: base #: model:ir.module.module,description:base.module_l10n_th @@ -10913,7 +10925,7 @@ msgstr "連絡先が会社の場合はチェックしてください。チェッ #. module: base #: view:ir.sequence.type:0 msgid "Sequences Type" -msgstr "順序タイプ" +msgstr "付番タイプ" #. module: base #: view:res.partner:0 @@ -11270,7 +11282,7 @@ msgstr "" #: view:ir.sequence:0 #: model:ir.ui.menu,name:base.menu_ir_sequence_form msgid "Sequences" -msgstr "順序" +msgstr "付番" #. module: base #: help:res.lang,code:0 @@ -11712,7 +11724,7 @@ msgstr "月:%(month)s" #: field:multi_company.default,sequence:0 #: field:res.partner.bank,sequence:0 msgid "Sequence" -msgstr "順序" +msgstr "付番" #. module: base #: model:res.country,name:base.tn @@ -12178,7 +12190,7 @@ msgstr "ハード島とマクドナルド諸島" msgid "" "External Key/Identifier that can be used for data integration with third-" "party systems" -msgstr "サードパーティのシステムとのデータ統合のために利用する外部キー / 識別子" +msgstr "サードパーティシステムとのデータ統合のために利用する外部キー / ID" #. module: base #: field:ir.actions.act_window,view_id:0 @@ -12507,7 +12519,7 @@ msgstr "CRMポータル" #. module: base #: model:ir.ui.menu,name:base.next_id_4 msgid "Low Level Objects" -msgstr "低レベルのオブジェクト" +msgstr "低レベルオブジェクト" #. module: base #: help:ir.values,model:0 @@ -12584,7 +12596,7 @@ msgstr "" #: view:ir.model.data:0 #: model:ir.ui.menu,name:base.ir_model_data_menu msgid "External Identifiers" -msgstr "外部識別子" +msgstr "外部ID" #. module: base #: selection:base.language.install,lang:0 @@ -12886,7 +12898,7 @@ msgstr "ガボン" #. module: base #: model:ir.module.module,summary:base.module_stock msgid "Inventory, Logistic, Storage" -msgstr "" +msgstr "在庫、経路、保管場所" #. module: base #: view:ir.actions.act_window:0 @@ -13602,7 +13614,7 @@ msgstr "" #: view:ir.model.data:0 #: field:ir.model.data,name:0 msgid "External Identifier" -msgstr "外部識別子" +msgstr "外部ID" #. module: base #: model:ir.module.module,description:base.module_audittrail @@ -14036,9 +14048,7 @@ msgid "" "Two sequence object implementations are offered: Standard and 'No gap'. The " "later is slower than the former but forbids any gap in the sequence (while " "they are possible in the former)." -msgstr "" -"2つのシーケンスオブジェクトの実装が提供されます:標準と\"ギャップなし\"です。後者は前者よりも遅いですが、どんな順序のギャップを禁じます(前者は可能で" -"す)。" +msgstr "「標準」と「ギャップなし」の2種類の付番定義が可能です。後者の場合、付番ごとにギャップを設けることができません。" #. module: base #: model:res.country,name:base.gn @@ -14237,7 +14247,7 @@ msgstr "かつ" #: help:ir.values,res_id:0 msgid "" "Database identifier of the record to which this applies. 0 = for all records" -msgstr "これを適用するためのレコードのデータベース識別子。0 = 全てのレコードのため" +msgstr "" #. module: base #: field:ir.model.fields,relation:0 @@ -14664,7 +14674,7 @@ msgstr "高度なレポート" #. module: base #: model:ir.module.module,summary:base.module_purchase msgid "Purchase Orders, Receptions, Supplier Invoices" -msgstr "" +msgstr "発注、入荷、仕入先請求" #. module: base #: model:ir.module.module,description:base.module_hr_payroll @@ -14891,7 +14901,7 @@ msgstr "クック諸島" #. module: base #: field:ir.model.data,noupdate:0 msgid "Non Updatable" -msgstr "更新可能でない" +msgstr "更新不可" #. module: base #: selection:base.language.install,lang:0 @@ -15299,7 +15309,7 @@ msgstr "" #. module: base #: help:ir.sequence,prefix:0 msgid "Prefix value of the record for the sequence" -msgstr "順序のためのレコードのプレフィックス値" +msgstr "この付番定義でレコードに適用するプレフィックス値" #. module: base #: model:res.country,name:base.sc @@ -15341,7 +15351,7 @@ msgstr "" #. module: base #: field:ir.model.data,complete_name:0 msgid "Complete ID" -msgstr "完了ID" +msgstr "完全ID" #. module: base #: model:ir.module.module,description:base.module_stock @@ -15435,7 +15445,7 @@ msgstr "製造プロセスを管理し、それらのプロセスのレポート #. module: base #: help:ir.sequence,number_increment:0 msgid "The next number of the sequence will be incremented by this number" -msgstr "順序の次の番号はこの数値だけ増加します。" +msgstr "付番毎にこの数値分だけ番号が増加します。" #. module: base #: selection:workflow.activity,kind:0 @@ -15563,6 +15573,12 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" クリックしてアドレス帳に連絡先を追加してください。\n" +"

\n" +" OpenERPは顧客、ディスカッション、商機の履歴、文書など関連するすべての活動の追跡を容易にします。\n" +"

\n" +" " #. module: base #: model:res.partner.category,name:base.res_partner_category_2 diff --git a/openerp/addons/base/i18n/ka.po b/openerp/addons/base/i18n/ka.po index e8af7a5fc47..5dcd445e2ff 100644 --- a/openerp/addons/base/i18n/ka.po +++ b/openerp/addons/base/i18n/ka.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:40+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:41+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/kk.po b/openerp/addons/base/i18n/kk.po index f3aeceb85af..f1fa010812b 100644 --- a/openerp/addons/base/i18n/kk.po +++ b/openerp/addons/base/i18n/kk.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:42+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:44+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/ko.po b/openerp/addons/base/i18n/ko.po index 4b6da274dc9..2404dae9661 100644 --- a/openerp/addons/base/i18n/ko.po +++ b/openerp/addons/base/i18n/ko.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:42+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:44+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/lt.po b/openerp/addons/base/i18n/lt.po index 4e080f9d7fc..25d6e31e73d 100644 --- a/openerp/addons/base/i18n/lt.po +++ b/openerp/addons/base/i18n/lt.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:43+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:45+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/lv.po b/openerp/addons/base/i18n/lv.po index de8c9289f47..af3d0828dc7 100644 --- a/openerp/addons/base/i18n/lv.po +++ b/openerp/addons/base/i18n/lv.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:43+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:45+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -16519,3 +16519,10 @@ msgstr "" #~ msgstr "" #~ "Nevar izveidot dokumentu (%s) ! Pārbaudiet, vai lietotājs pieder kādai no " #~ "šīm grupām: %s." + +#~ msgid "" +#~ "\n" +#~ " " +#~ msgstr "" +#~ "\n" +#~ " " diff --git a/openerp/addons/base/i18n/mk.po b/openerp/addons/base/i18n/mk.po index 5ca2aa2d844..f725d265332 100644 --- a/openerp/addons/base/i18n/mk.po +++ b/openerp/addons/base/i18n/mk.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:43+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:45+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/mn.po b/openerp/addons/base/i18n/mn.po index 58838e67f53..78ce6ac5c69 100644 --- a/openerp/addons/base/i18n/mn.po +++ b/openerp/addons/base/i18n/mn.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:43+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:46+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -3094,7 +3094,7 @@ msgstr "Моделийн Тойм" #. module: base #: model:ir.module.module,shortdesc:base.module_product_margin msgid "Margins by Products" -msgstr "Захалбар Бараагаар" +msgstr "Бохир ашиг Бараагаар" #. module: base #: model:ir.ui.menu,name:base.menu_invoiced @@ -5214,7 +5214,7 @@ msgstr "" " * Дагавар\n" " * Дараагийн Дугаар\n" " * Нэмэгдэх Тоо\n" -" * Гүйцээлтийн тоо\n" +" * Дугаарлалтын гүйцээлт\n" " " #. module: base @@ -7400,7 +7400,7 @@ msgid "" " " msgstr "" "\n" -"Энэ модуль нь борлуулалтын захиалга дээр 'Тодотгол' нэмдэг.\n" +"Энэ модуль нь борлуулалтын захиалга дээр 'Бохир ашиг' нэмдэг.\n" "=============================================\n" "\n" "Нэгж үнэ, Өртөг үнийг харьцуулан бохир ашгийг харуулдаг.\n" @@ -11017,7 +11017,7 @@ msgstr "Өөриймшүүлсэн" #. module: base #: model:ir.module.module,shortdesc:base.module_sale_margin msgid "Margins in Sales Orders" -msgstr "Борлуулалтын захиалгын зөрүү" +msgstr "Борлуулалтын захиалгын бохир ашиг" #. module: base #: model:ir.module.module,shortdesc:base.module_purchase @@ -12353,7 +12353,7 @@ msgid "" "you need.\n" msgstr "" "\n" -"Бараанд борлуулалт, худалдан авалт, тохируулалт зэрэг олон сонирхолтой " +"Бараанд борлуулалт, худалдан авалт, бохир ашиг зэрэг олон сонирхолтой " "үзүүлэлтийг тооцолох тайлангийн менюг нэмдэг.\n" "=============================================================================" "================================================\n" @@ -13178,7 +13178,7 @@ msgstr "Гүйцэтгэх дараагийн огноо" #. module: base #: field:ir.sequence,padding:0 msgid "Number Padding" -msgstr "Тоон дугаарын гүйцээлт" +msgstr "Дугаарын гүйцээлт" #. module: base #: help:multi_company.default,field_id:0 @@ -18268,9 +18268,6 @@ msgstr "Бүртгүүлэх" #~ msgid "View Ordering" #~ msgstr "Дэлгэц эрэмблэлт" -#~ msgid "Number padding" -#~ msgstr "Тоон дугаарын урт" - #~ msgid "Object Identifiers" #~ msgstr "Обьект бүрдүүлбэр" @@ -24131,3 +24128,6 @@ msgstr "Бүртгүүлэх" #~ msgid "Retro-Planning on Events" #~ msgstr "Үйл явдлын хойноос урагшаа төлөвлөлт" + +#~ msgid "Number padding" +#~ msgstr "Тоон дугаарын гүйцээлт" diff --git a/openerp/addons/base/i18n/nb.po b/openerp/addons/base/i18n/nb.po index 803b851b55c..65d8cf62e7d 100644 --- a/openerp/addons/base/i18n/nb.po +++ b/openerp/addons/base/i18n/nb.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:43+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:46+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/nl.po b/openerp/addons/base/i18n/nl.po index 75b988f395f..39d1bddcd75 100644 --- a/openerp/addons/base/i18n/nl.po +++ b/openerp/addons/base/i18n/nl.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:39+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:40+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -1625,7 +1625,7 @@ msgstr "" #: model:ir.module.category,name:base.module_category_purchase_management #: model:ir.ui.menu,name:base.menu_purchase_root msgid "Purchases" -msgstr "Inkoop" +msgstr "Inkopen" #. module: base #: model:res.country,name:base.md @@ -13429,7 +13429,7 @@ msgstr "" #. module: base #: selection:res.currency,position:0 msgid "Before Amount" -msgstr "Voormalig bedrag" +msgstr "Voor bedrag" #. module: base #: field:res.request,act_from:0 diff --git a/openerp/addons/base/i18n/nl_BE.po b/openerp/addons/base/i18n/nl_BE.po index ae1e9323694..a07fb33fb4b 100644 --- a/openerp/addons/base/i18n/nl_BE.po +++ b/openerp/addons/base/i18n/nl_BE.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:48+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:53+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/pl.po b/openerp/addons/base/i18n/pl.po index 6766222fb5a..ca3e805d7f1 100644 --- a/openerp/addons/base/i18n/pl.po +++ b/openerp/addons/base/i18n/pl.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:44+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:47+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/pt.po b/openerp/addons/base/i18n/pt.po index fc92e7f4efc..0576d40462c 100644 --- a/openerp/addons/base/i18n/pt.po +++ b/openerp/addons/base/i18n/pt.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:44+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:47+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -5633,7 +5633,7 @@ msgstr "Falta o valor do campo '%s'." #. module: base #: view:ir.rule:0 msgid "Write Access Right" -msgstr "" +msgstr "Permissões de Escrita" #. module: base #: model:ir.actions.act_window,help:base.action_res_groups diff --git a/openerp/addons/base/i18n/pt_BR.po b/openerp/addons/base/i18n/pt_BR.po index 4eaf7f824dd..2b19ec2c486 100644 --- a/openerp/addons/base/i18n/pt_BR.po +++ b/openerp/addons/base/i18n/pt_BR.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:47+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:51+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/ro.po b/openerp/addons/base/i18n/ro.po index 9d53ec1a629..6d29c529e44 100644 --- a/openerp/addons/base/i18n/ro.po +++ b/openerp/addons/base/i18n/ro.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:44+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:47+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -431,7 +431,8 @@ msgstr "" "\n" "Va permite sa adaugati metode de livrare la comenzile de vanzare si " "ridicare.\n" -"==============================================================\n" +"=============================================================================" +"\n" "\n" "Va puteti defini propriile grile de preturi pentru transport si livrare. " "Atunci cand creati \n" @@ -617,7 +618,7 @@ msgid "" msgstr "" "\n" "Modul pentru definirea obiectului contabilitatii analitice.\n" -"=========================================================\n" +"===========================================================\n" "\n" "In OpenERP, conturile analitice sunt legate de conturile generale, dar sunt " "tratate\n" @@ -855,7 +856,7 @@ msgid "" msgstr "" "\n" "Contabilitate si Management Financiar.\n" -"====================================\n" +"======================================\n" "\n" "Modulul Finante si contabilitate acopera:\n" "--------------------------------------------\n" @@ -899,7 +900,7 @@ msgid "" msgstr "" "\n" "Meniul pentru Marketing.\n" -"=======================\n" +"========================\n" "\n" "Contine programul de instalare pentru modulele legate de marketing.\n" " " @@ -915,7 +916,7 @@ msgid "" msgstr "" "\n" "Modulul OpenERP Web LinkedIn.\n" -"============================\n" +"=============================\n" "Acest modul asigura Integrarea lui LinkedIn in OpenERP.\n" " " @@ -1072,7 +1073,7 @@ msgid "" msgstr "" "\n" "Gestioneaza concediile si cererile de alocare\n" -"=====================================\n" +"=============================================\n" "\n" "Aceasta aplicatie controleaza programul de concedii al companiei " "dumneavoastra. Le permite angajatilor sa solicite concedii. Astfel, " @@ -1331,7 +1332,7 @@ msgid "" msgstr "" "\n" "Managementul general OpenERP al Relatiilor cu Clientii\n" -" ====================================================\n" +"======================================================\n" " \n" "Aceasta aplicatie permite unui grup de oameni sa gestioneze in mod " "inteligent si eficient piste, oportunitati, intalniri si apeluri " @@ -1356,7 +1357,7 @@ msgstr "" " \n" "\n" "Tabloul de bord pentru MRC va include:\n" -" -------------------------------\n" +"--------------------------------------\n" " * Veniturile Planificate dupa Etapa si Utilizator (grafic)\n" " * Oportunitati dupa Etapa (grafic)\n" @@ -2011,7 +2012,7 @@ msgid "" msgstr "" "\n" "Modulul de baza pentru gestionarea pranzului.\n" -"================================\n" +"=============================================\n" "\n" "Multe companii comanda sandwich-uri, pizza si alte mancaruri de la " "furnizorii obisnuiti, pentru angajatii lor pentru a le oferi mai multe " @@ -2250,7 +2251,7 @@ msgid "" msgstr "" "\n" "Drepturi de acces contabile\n" -"========================\n" +"===========================\n" "Ii ofera utilizatorului Administrator acces la toate caracteristicile " "contabile, precum elemente ale jurnalului si planul de conturi.\n" "\n" @@ -2444,7 +2445,8 @@ msgstr "" "\n" "Sincronizarea inregistrarilor sarcinilor proiectului cu inregistrarile fisei " "de pontaj.\n" -"====================================================================\n" +"=============================================================================" +"==========\n" "\n" "Acest modul va permite sa transferati inregistrarile sub sarcini definite " "pentru Managementul\n" @@ -2778,7 +2780,7 @@ msgid "" msgstr "" "\n" "Inregistreaza si valideaza fisele de pontaj si prezenta cu usurinta\n" -"=====================================================\n" +"===================================================================\n" "\n" "Aceasta aplicatie ofera un ecran nou care va permite sa gestionati atat " "prezenta (La intrare/La iesire) cat si inregistrare muncii (fisa de pontaj) " @@ -2874,7 +2876,7 @@ msgid "" msgstr "" "\n" "Permite anonimilor sa Acceseze Portalul.\n" -"=================================\n" +"========================================\n" " " #. module: base @@ -3021,7 +3023,7 @@ msgid "" msgstr "" "\n" "Managementul Serviciului de asistenta tehnica.\n" -"===================================\n" +"==============================================\n" "\n" "La fel ca si inregistrarea si prelucrarea reclamatiilor, Serviciul de " "Asistenta tehnica este un instrument\n" @@ -3095,7 +3097,8 @@ msgstr "" "\n" "Acesta este modulul de baza pentru gestionarea produselor si a listelor de " "preturi in OpenERP.\n" -"========================================================================\n" +"=============================================================================" +"=================\n" "\n" "Produsele accepta variante, diferite metode de stabilire a pretului, " "informatii referitoare la furnizori,\n" @@ -3103,7 +3106,7 @@ msgstr "" "proprietati.\n" "\n" "Listele de preturi accepta:\n" -"--------------------\n" +"---------------------------\n" " * Niveluri multiple de reducere (dupa produs, categorie, cantitati)\n" " * Calculeaza pretul pe baza unor criterii diferite:\n" " * Alte liste de preturi\n" @@ -3134,11 +3137,10 @@ msgid "" msgstr "" "\n" "Configureaza valorile implicite pentru conturile dumneavoastra analitice.\n" -"==============================================\n" +"=========================================================================\n" "\n" "Permite selectarea automata a conturilor analitice pe baza criteriilor:\n" -"-----------------------------------------------------------------------------" -"------\n" +"-----------------------------------------------------------------------\n" " * Produs \n" " * Partener\n" " * Utilizator\n" @@ -3216,7 +3218,8 @@ msgstr "" "\n" "Modulul de baza pentru gestionarea distribuirii analitice si a comenzilor de " "vanzare.\n" -"==========================================================================\n" +"=============================================================================" +"========\n" "\n" "Folosind acest modul veti putea lega conturile analitice de comenzile de " "vanzare.\n" @@ -3292,7 +3295,7 @@ msgid "" msgstr "" "\n" "Acesta este un sistem complet de gestionare a documentelor.\n" -"==============================================\n" +"===========================================================\n" " * Autentificare Utilizator\n" " * Indexare Documente:- fisierele .pptx si .docx nu sunt acceptate in " "platforma Windows.\n" @@ -3351,8 +3354,8 @@ msgid "" " " msgstr "" "\n" -"Gestiunea cotarilor si a comenzilor de vanzare\n" -" ==================================\n" +"Gestionare cotațiilor și a comenzilor de vânzare\n" +"================================================\n" "\n" "Aceasta aplicatie va permite sa va gestionati obiectivele de vanzari intr-un " "mod efectiv si eficient, tinand evidenta tuturor comenzilor de vanzare si " @@ -3363,7 +3366,7 @@ msgstr "" "* **Cotare** -> **Comanda de vanzare** -> **Factura**\n" "\n" "Preferinte (numai daca este instalat si modulul Gestionarea Depozitului)\n" -"-----------------------------------------------------\n" +"------------------------------------------------------------------------\n" "\n" "Daca ati instalat si Gestionarea Depozitului, puteti efectua urmatoarele:\n" "\n" @@ -3382,7 +3385,7 @@ msgstr "" "\n" "\n" "Tabloul de bord pentru Managerul de Vanzari va include\n" -"------------------------------------------------\n" +"------------------------------------------------------\n" "* Cotatiile mele\n" "* Cifra de afaceri lunara (Grafic)\n" " " @@ -3414,7 +3417,7 @@ msgid "" msgstr "" "\n" "Modul pentru atasarea unui document google oricarui model.\n" -"================================================\n" +"==========================================================\n" #. module: base #: code:addons/base/ir/ir_fields.py:333 diff --git a/openerp/addons/base/i18n/ru.po b/openerp/addons/base/i18n/ru.po index 8462334a157..60c8819d04b 100644 --- a/openerp/addons/base/i18n/ru.po +++ b/openerp/addons/base/i18n/ru.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:45+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:48+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/sk.po b/openerp/addons/base/i18n/sk.po index 86494b394d0..c03d0de6f72 100644 --- a/openerp/addons/base/i18n/sk.po +++ b/openerp/addons/base/i18n/sk.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:45+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:49+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/sl.po b/openerp/addons/base/i18n/sl.po index e6004537e27..a62f242e210 100644 --- a/openerp/addons/base/i18n/sl.po +++ b/openerp/addons/base/i18n/sl.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:45+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:49+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/sq.po b/openerp/addons/base/i18n/sq.po index 8b77e92d32d..a0be5625110 100644 --- a/openerp/addons/base/i18n/sq.po +++ b/openerp/addons/base/i18n/sq.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:37+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:38+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/sr.po b/openerp/addons/base/i18n/sr.po index b82fd4dab1d..3ac25b53253 100644 --- a/openerp/addons/base/i18n/sr.po +++ b/openerp/addons/base/i18n/sr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:45+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:48+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/sr@latin.po b/openerp/addons/base/i18n/sr@latin.po index f7fa2e21503..30a9a0af3ab 100644 --- a/openerp/addons/base/i18n/sr@latin.po +++ b/openerp/addons/base/i18n/sr@latin.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:50+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:55+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/sv.po b/openerp/addons/base/i18n/sv.po index 4223fd22758..2975c159a09 100644 --- a/openerp/addons/base/i18n/sv.po +++ b/openerp/addons/base/i18n/sv.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:46+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:49+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/th.po b/openerp/addons/base/i18n/th.po index 24b5ef7dad9..ee2313badfc 100644 --- a/openerp/addons/base/i18n/th.po +++ b/openerp/addons/base/i18n/th.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:46+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:50+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -25,6 +25,9 @@ msgid "" "================================================\n" " " msgstr "" +"\n" +"โมดูลสำหรับการเขียน และพิมพ์เช็ค\n" +" " #. module: base #: model:res.country,name:base.sh diff --git a/openerp/addons/base/i18n/tlh.po b/openerp/addons/base/i18n/tlh.po index b472d2931e0..199dd5d4073 100644 --- a/openerp/addons/base/i18n/tlh.po +++ b/openerp/addons/base/i18n/tlh.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:46+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:50+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/tr.po b/openerp/addons/base/i18n/tr.po index 97a4bc9fdd9..7dc68a474cf 100644 --- a/openerp/addons/base/i18n/tr.po +++ b/openerp/addons/base/i18n/tr.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:46+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:50+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/uk.po b/openerp/addons/base/i18n/uk.po index 4f00b0773af..e678f952bb4 100644 --- a/openerp/addons/base/i18n/uk.po +++ b/openerp/addons/base/i18n/uk.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:47+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:50+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/ur.po b/openerp/addons/base/i18n/ur.po index 1abdedd391b..3c8880f3270 100644 --- a/openerp/addons/base/i18n/ur.po +++ b/openerp/addons/base/i18n/ur.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:47+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:50+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/vi.po b/openerp/addons/base/i18n/vi.po index b8287330153..68616a81d7f 100644 --- a/openerp/addons/base/i18n/vi.po +++ b/openerp/addons/base/i18n/vi.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:47+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:51+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/zh_CN.po b/openerp/addons/base/i18n/zh_CN.po index 53ec0e4b92c..6e09a983dc1 100644 --- a/openerp/addons/base/i18n/zh_CN.po +++ b/openerp/addons/base/i18n/zh_CN.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:49+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:54+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/zh_HK.po b/openerp/addons/base/i18n/zh_HK.po index 86da82ca6d9..ea043ffc98c 100644 --- a/openerp/addons/base/i18n/zh_HK.po +++ b/openerp/addons/base/i18n/zh_HK.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:47+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:51+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/zh_TW.po b/openerp/addons/base/i18n/zh_TW.po index 8c8db3b3231..33bfe9db460 100644 --- a/openerp/addons/base/i18n/zh_TW.po +++ b/openerp/addons/base/i18n/zh_TW.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-02-04 05:49+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-17 05:53+0000\n" +"X-Generator: Launchpad (build 16985)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/ir/__init__.py b/openerp/addons/base/ir/__init__.py index b3df5bcbccb..9aa1e7c42a2 100644 --- a/openerp/addons/base/ir/__init__.py +++ b/openerp/addons/base/ir/__init__.py @@ -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: diff --git a/openerp/addons/base/ir/ir_actions.py b/openerp/addons/base/ir/ir_actions.py index b36fc27d9d3..4e177959792 100644 --- a/openerp/addons/base/ir/ir_actions.py +++ b/openerp/addons/base/ir/ir_actions.py @@ -24,6 +24,8 @@ import logging import operator import os import time +import datetime +import dateutil import openerp from openerp import SUPERUSER_ID @@ -102,7 +104,9 @@ class ir_actions_report_xml(osv.osv): cr.execute("SELECT * FROM ir_act_report_xml WHERE report_name=%s", (name,)) r = cr.dictfetchone() if r: - if r['report_rml'] or r['report_rml_content_data']: + if r['report_type'] in ['qweb-pdf', 'qweb-html']: + return r['report_name'] + elif r['report_rml'] or r['report_rml_content_data']: if r['parser']: kwargs = { 'parser': operator.attrgetter(r['parser'])(openerp.addons) } else: @@ -125,7 +129,11 @@ class ir_actions_report_xml(osv.osv): Look up a report definition and render the report for the provided IDs. """ new_report = self._lookup_report(cr, name) - return new_report.create(cr, uid, res_ids, data, context) + # in order to use current yml test files with qweb reports + if isinstance(new_report, (str, unicode)): + return self.pool['report'].get_pdf(cr, uid, res_ids, new_report, data=data, context=context), 'pdf' + else: + return new_report.create(cr, uid, res_ids, data, context) _name = 'ir.actions.report.xml' _inherit = 'ir.actions.actions' @@ -133,35 +141,42 @@ class ir_actions_report_xml(osv.osv): _sequence = 'ir_actions_id_seq' _order = 'name' _columns = { - 'name': fields.char('Name', size=64, required=True, translate=True), - 'model': fields.char('Object', size=64, required=True), 'type': fields.char('Action Type', size=32, required=True), - 'report_name': fields.char('Service Name', size=64, required=True), - 'usage': fields.char('Action Usage', size=32), - 'report_type': fields.char('Report Type', size=32, required=True, help="Report Type, e.g. pdf, html, raw, sxw, odt, html2html, mako2html, ..."), + 'name': fields.char('Name', size=64, required=True, translate=True), + + 'model': fields.char('Model', required=True), + 'report_type': fields.selection([('qweb-pdf', 'PDF'), + ('qweb-html', 'HTML'), + ('controller', 'Controller'), + ('pdf', 'RML pdf (deprecated)'), + ('sxw', 'RML sxw (deprecated)'), + ('webkit', 'Webkit (deprecated)'), + ], '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 'multi': fields.boolean('On Multiple Doc.', help="If set to true, the action will not be displayed on the right toolbar of a form view."), - 'attachment': fields.char('Save as Attachment Prefix', size=128, help='This is the filename of the attachment used to store the printing result. Keep empty to not save the printed reports. You can use a python expression with the object and time variables.'), 'attachment_use': fields.boolean('Reload from Attachment', help='If you check this, then the second time the user prints with same attachment name, it returns the previous report.'), + 'attachment': fields.char('Save as Attachment Prefix', size=128, help='This is the filename of the attachment used to store the printing result. Keep empty to not save the printed reports. You can use a python expression with the object and time variables.'), + + # Deprecated rml stuff + 'usage': fields.char('Action Usage', size=32), + 'header': fields.boolean('Add RML Header', help="Add or not the corporate RML header"), + 'parser': fields.char('Parser Class'), 'auto': fields.boolean('Custom Python Parser'), - 'header': fields.boolean('Add RML Header', help="Add or not the corporate RML header"), + 'report_xsl': fields.char('XSL Path'), + 'report_xml': fields.char('XML Path'), - 'report_xsl': fields.char('XSL Path', size=256), - 'report_xml': fields.char('XML Path', size=256, help=''), - - # Pending deprecation... to be replaced by report_file as this object will become the default report object (not so specific to RML anymore) - 'report_rml': fields.char('Main Report File Path', size=256, help="The path to the main report file (depending on Report Type) or NULL if the content is in another data field"), - # temporary related field as report_rml is pending deprecation - this field will replace report_rml after v6.0 - 'report_file': fields.related('report_rml', type="char", size=256, 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_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'), 'report_sxw_content_data': fields.binary('SXW Content'), 'report_rml_content_data': fields.binary('RML Content'), 'report_sxw_content': fields.function(_report_content, fnct_inv=_report_content_inv, type='binary', string='SXW Content',), 'report_rml_content': fields.function(_report_content, fnct_inv=_report_content_inv, type='binary', string='RML Content'), - - 'parser': fields.char('Parser Class'), } _defaults = { 'type': 'ir.actions.report.xml', @@ -268,7 +283,7 @@ class ir_actions_act_window(osv.osv): 'filter': fields.boolean('Filter'), 'auto_search':fields.boolean('Auto Search'), 'search_view' : fields.function(_search_view, type='text', string='Search View'), - 'multi': fields.boolean('Action on Multiple Doc.', help="If set to true, the action will not be displayed on the right toolbar of a form view"), + 'multi': fields.boolean('Restrict to lists', help="If checked and the action is bound to a model, it will only appear in the More menu on list views"), } _defaults = { @@ -550,6 +565,7 @@ class ir_actions_server(osv.osv): # - uid: current user id # - context: current context # - time: Python time module +# - workflow: Workflow engine # If you plan to return an action, assign: action = {...}""", 'use_relational_model': 'base', 'use_create': 'new', @@ -928,9 +944,14 @@ class ir_actions_server(osv.osv): 'obj': obj, 'pool': self.pool, 'time': time, + 'datetime': datetime, + 'dateutil': dateutil, 'cr': cr, 'uid': uid, 'user': user, + 'context': context, + 'workflow': workflow, + 'Warning': openerp.exceptions.Warning, } def run(self, cr, uid, ids, context=None): @@ -955,7 +976,6 @@ class ir_actions_server(osv.osv): if context is None: context = {} res = False - active_ids = context.get('active_ids', [context.get('active_id')]) for action in self.browse(cr, uid, ids, context): eval_context = self._get_eval_context(cr, uid, action, context=context) condition = action.condition @@ -963,9 +983,7 @@ class ir_actions_server(osv.osv): # Void (aka False) conditions are considered as True condition = True if hasattr(self, 'run_action_%s_multi' % action.state): - # set active_ids in context only needed if one active_id - run_context = dict(context, active_ids=active_ids) - eval_context["context"] = run_context + run_context = eval_context['context'] expr = eval(str(condition), eval_context) if not expr: continue @@ -975,6 +993,8 @@ class ir_actions_server(osv.osv): elif hasattr(self, 'run_action_%s' % action.state): func = getattr(self, 'run_action_%s' % action.state) + active_id = context.get('active_id') + active_ids = context.get('active_ids', [active_id] if active_id else []) for active_id in active_ids: # run context dedicated to a particular active_id run_context = dict(context, active_ids=[active_id], active_id=active_id) diff --git a/openerp/addons/base/ir/ir_actions.xml b/openerp/addons/base/ir/ir_actions.xml index 7e6c1f9be4b..4eb869daa80 100644 --- a/openerp/addons/base/ir/ir_actions.xml +++ b/openerp/addons/base/ir/ir_actions.xml @@ -57,39 +57,36 @@ - + + + - - - + + + - + + + + + + + + - - - - - - - - - - - - @@ -117,7 +114,8 @@ filter_domain="['|', '|', '|', '|', ('name','ilike',self), ('model','ilike',self), ('type','ilike',self), ('report_name','ilike',self), ('report_type','ilike',self)]" string="Report"/> - + + @@ -180,6 +178,7 @@ + @@ -411,6 +410,7 @@
  • cr: database cursor
  • uid: current user id
  • context: current context
  • +
  • workflow: Workflow engine
  • Example of condition expression using Python

    diff --git a/openerp/addons/base/ir/ir_attachment.py b/openerp/addons/base/ir/ir_attachment.py index 69776922362..8478682eb7c 100644 --- a/openerp/addons/base/ir/ir_attachment.py +++ b/openerp/addons/base/ir/ir_attachment.py @@ -26,6 +26,8 @@ import os import re from openerp import tools +from openerp.tools.translate import _ +from openerp.exceptions import AccessError from openerp.osv import fields,osv from openerp import SUPERUSER_ID @@ -64,22 +66,56 @@ class ir_attachment(osv.osv): data[attachment.id] = False return data + def _storage(self, cr, uid, context=None): + return self.pool['ir.config_parameter'].get_param(cr, SUPERUSER_ID, 'ir_attachment.location', 'file') + + @tools.ormcache() + def _filestore(self, cr, uid, context=None): + return tools.config.filestore(cr.dbname) + + def force_storage(self, cr, uid, context=None): + """Force all attachments to be stored in the currently configured storage""" + if not self.pool['res.users'].has_group(cr, uid, 'base.group_erp_manager'): + raise AccessError(_('Only administrators can execute this action.')) + + location = self._storage(cr, uid, context) + domain = { + 'db': [('store_fname', '!=', False)], + 'file': [('db_datas', '!=', False)], + }[location] + + ids = self.search(cr, uid, domain, context=context) + for attach in self.browse(cr, uid, ids, context=context): + attach.write({'datas': attach.datas}) + return True + # 'data' field implementation - def _full_path(self, cr, uid, location, path): - # location = 'file:filestore' - assert location.startswith('file:'), "Unhandled filestore location %s" % location - location = location[5:] - - # sanitize location name and path - location = re.sub('[.]','',location) - location = location.strip('/\\') - - path = re.sub('[.]','',path) + def _full_path(self, cr, uid, path): + # sanitize ath + path = re.sub('[.]', '', path) path = path.strip('/\\') - return os.path.join(tools.config['root_path'], location, cr.dbname, path) + return os.path.join(self._filestore(cr, uid), path) - def _file_read(self, cr, uid, location, fname, bin_size=False): - full_path = self._full_path(cr, uid, location, fname) + def _get_path(self, cr, uid, bin_data): + sha = hashlib.sha1(bin_data).hexdigest() + + # retro compatibility + fname = sha[:3] + '/' + sha + full_path = self._full_path(cr, uid, fname) + if os.path.isfile(full_path): + return fname, full_path # keep existing path + + # scatter files across 256 dirs + # we use '/' in the db (even on windows) + fname = sha[:2] + '/' + sha + full_path = self._full_path(cr, uid, fname) + dirname = os.path.dirname(full_path) + if not os.path.isdir(dirname): + os.makedirs(dirname) + return fname, full_path + + def _file_read(self, cr, uid, fname, bin_size=False): + full_path = self._full_path(cr, uid, fname) r = '' try: if bin_size: @@ -90,26 +126,21 @@ class ir_attachment(osv.osv): _logger.error("_read_file reading %s",full_path) return r - def _file_write(self, cr, uid, location, value): + def _file_write(self, cr, uid, value): bin_value = value.decode('base64') - fname = hashlib.sha1(bin_value).hexdigest() - # scatter files across 1024 dirs - # we use '/' in the db (even on windows) - fname = fname[:3] + '/' + fname - full_path = self._full_path(cr, uid, location, fname) - try: - dirname = os.path.dirname(full_path) - if not os.path.isdir(dirname): - os.makedirs(dirname) - open(full_path,'wb').write(bin_value) - except IOError: - _logger.error("_file_write writing %s",full_path) + fname, full_path = self._get_path(cr, uid, bin_value) + if not os.path.exists(full_path): + try: + with open(full_path, 'wb') as fp: + fp.write(bin_value) + except IOError: + _logger.error("_file_write writing %s", full_path) return fname - def _file_delete(self, cr, uid, location, fname): + def _file_delete(self, cr, uid, fname): count = self.search(cr, 1, [('store_fname','=',fname)], count=True) - if count <= 1: - full_path = self._full_path(cr, uid, location, fname) + full_path = self._full_path(cr, uid, fname) + if count <= 1 and os.path.exists(full_path): try: os.unlink(full_path) except OSError: @@ -122,11 +153,10 @@ class ir_attachment(osv.osv): if context is None: context = {} result = {} - location = self.pool.get('ir.config_parameter').get_param(cr, uid, 'ir_attachment.location') bin_size = context.get('bin_size') for attach in self.browse(cr, uid, ids, context=context): - if location and attach.store_fname: - result[attach.id] = self._file_read(cr, uid, location, attach.store_fname, bin_size) + if attach.store_fname: + result[attach.id] = self._file_read(cr, uid, attach.store_fname, bin_size) else: result[attach.id] = attach.db_datas return result @@ -137,17 +167,17 @@ class ir_attachment(osv.osv): return True if context is None: context = {} - location = self.pool.get('ir.config_parameter').get_param(cr, uid, 'ir_attachment.location') + location = self._storage(cr, uid, context) file_size = len(value.decode('base64')) - if location: - attach = self.browse(cr, uid, id, context=context) - if attach.store_fname: - self._file_delete(cr, uid, location, attach.store_fname) - fname = self._file_write(cr, uid, location, value) + attach = self.browse(cr, uid, id, context=context) + if attach.store_fname: + self._file_delete(cr, uid, attach.store_fname) + if location != 'db': + fname = self._file_write(cr, uid, value) # SUPERUSER_ID as probably don't have write access, trigger during create - super(ir_attachment, self).write(cr, SUPERUSER_ID, [id], {'store_fname': fname, 'file_size': file_size}, context=context) + super(ir_attachment, self).write(cr, SUPERUSER_ID, [id], {'store_fname': fname, 'file_size': file_size, 'db_datas': False}, context=context) else: - super(ir_attachment, self).write(cr, SUPERUSER_ID, [id], {'db_datas': value, 'file_size': file_size}, context=context) + super(ir_attachment, self).write(cr, SUPERUSER_ID, [id], {'db_datas': value, 'file_size': file_size, 'store_fname': False}, context=context) return True _name = 'ir.attachment' @@ -285,11 +315,9 @@ class ir_attachment(osv.osv): if isinstance(ids, (int, long)): ids = [ids] self.check(cr, uid, ids, 'unlink', context=context) - location = self.pool.get('ir.config_parameter').get_param(cr, uid, 'ir_attachment.location') - if location: - for attach in self.browse(cr, uid, ids, context=context): - if attach.store_fname: - self._file_delete(cr, uid, location, attach.store_fname) + for attach in self.browse(cr, uid, ids, context=context): + if attach.store_fname: + self._file_delete(cr, uid, attach.store_fname) return super(ir_attachment, self).unlink(cr, uid, ids, context) def create(self, cr, uid, values, context=None): @@ -303,4 +331,3 @@ class ir_attachment(osv.osv): cr, uid, 'base', 'action_attachment', context=context) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/openerp/addons/base/ir/ir_cron.py b/openerp/addons/base/ir/ir_cron.py index 60a69cd6b38..e5a5e5f024b 100644 --- a/openerp/addons/base/ir/ir_cron.py +++ b/openerp/addons/base/ir/ir_cron.py @@ -225,12 +225,21 @@ class ir_cron(osv.osv): lock_cr = db.cursor() try: # Try to grab an exclusive lock on the job row from within the task transaction + # Restrict to the same conditions as for the search since the job may have already + # been run by an other thread when cron is running in multi thread lock_cr.execute("""SELECT * FROM ir_cron - WHERE id=%s + WHERE numbercall != 0 + AND active + AND nextcall <= (now() at time zone 'UTC') + AND id=%s FOR UPDATE NOWAIT""", (job['id'],), log_exceptions=False) + locked_job = lock_cr.fetchone() + if not locked_job: + # job was already executed by another parallel process/thread, skipping it. + continue # Got the lock on the job row, run its code _logger.debug('Starting job `%s`.', job['name']) job_cr = db.cursor() diff --git a/openerp/addons/base/ir/ir_http.py b/openerp/addons/base/ir/ir_http.py index 18699110605..258d405deb5 100644 --- a/openerp/addons/base/ir/ir_http.py +++ b/openerp/addons/base/ir/ir_http.py @@ -53,8 +53,8 @@ class ir_http(osv.AbstractModel): def _get_converters(self): return {'model': ModelConverter, 'models': ModelsConverter} - def _find_handler(self): - return self.routing_map().bind_to_environ(request.httprequest.environ).match() + def _find_handler(self, return_rule=False): + return self.routing_map().bind_to_environ(request.httprequest.environ).match(return_rule=return_rule) def _auth_method_user(self): request.uid = request.session.uid @@ -77,19 +77,22 @@ class ir_http(osv.AbstractModel): # what if error in security.check() # -> res_users.check() # -> res_users.check_credentials() - except Exception: + except (openerp.exceptions.AccessDenied, openerp.http.SessionExpiredException): + # All other exceptions mean undetermined status (e.g. connection pool full), + # let them bubble up request.session.logout() getattr(self, "_auth_method_%s" % auth_method)() return auth_method def _handle_exception(self, exception): - # If handle exception return something different than None, it will be used as a response - raise + # If handle_exception returns something different than None, it will be used as a response + return request._handle_exception(exception) def _dispatch(self): # locate the controller method try: - func, arguments = self._find_handler() + rule, arguments = self._find_handler(return_rule=True) + func = rule.endpoint except werkzeug.exceptions.NotFound, e: return self._handle_exception(e) @@ -102,7 +105,7 @@ class ir_http(osv.AbstractModel): convert_exception_to( werkzeug.exceptions.Forbidden)) - processing = self._postprocess_args(arguments) + processing = self._postprocess_args(arguments, rule) if processing: return processing @@ -118,7 +121,7 @@ class ir_http(osv.AbstractModel): return result - def _postprocess_args(self, arguments): + def _postprocess_args(self, arguments, rule): """ post process arg to set uid on browse records """ for arg in arguments.itervalues(): if isinstance(arg, orm.browse_record) and arg._uid is UID_PLACEHOLDER: @@ -135,6 +138,8 @@ class ir_http(osv.AbstractModel): m = request.registry.get('ir.module.module') ids = m.search(cr, openerp.SUPERUSER_ID, [('state', '=', 'installed'), ('name', '!=', 'web')], context=request.context) installed = set(x['name'] for x in m.read(cr, 1, ids, ['name'], context=request.context)) + if openerp.tools.config['test_enable']: + installed.add(openerp.modules.module.current_test) mods = [''] + openerp.conf.server_wide_modules + sorted(installed) self._routing_map = http.routing_map(mods, False, converters=self._get_converters()) diff --git a/openerp/addons/base/ir/ir_logging.py b/openerp/addons/base/ir/ir_logging.py new file mode 100644 index 00000000000..dd06a19c0ae --- /dev/null +++ b/openerp/addons/base/ir/ir_logging.py @@ -0,0 +1,46 @@ +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2014 OpenERP SA () +# +# 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 . +# +############################################################################## +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), + } + diff --git a/openerp/addons/base/ir/ir_logging_view.xml b/openerp/addons/base/ir/ir_logging_view.xml new file mode 100644 index 00000000000..f963fc0d393 --- /dev/null +++ b/openerp/addons/base/ir/ir_logging_view.xml @@ -0,0 +1,66 @@ + + + + + ir.logging + +
    + + + + + + + + + + + +
    +
    +
    + + ir.logging + + + + + + + + + + + + + + + + ir.logging + + + + + + + + + + + + + + + + + + + Logging + ir.logging + form + tree,form + + + +
    +
    diff --git a/openerp/addons/base/ir/ir_model.py b/openerp/addons/base/ir/ir_model.py index d119c0344b4..76166ee92e0 100644 --- a/openerp/addons/base/ir/ir_model.py +++ b/openerp/addons/base/ir/ir_model.py @@ -33,7 +33,7 @@ from openerp.osv.orm import Model, browse_null from openerp.tools.safe_eval import safe_eval as eval from openerp.tools import config from openerp.tools.translate import _ -from openerp.osv.orm import except_orm, browse_record +from openerp.osv.orm import except_orm, browse_record, MAGIC_COLUMNS _logger = logging.getLogger(__name__) @@ -302,6 +302,8 @@ class ir_model_fields(osv.osv): def _drop_column(self, cr, uid, ids, context=None): for field in self.browse(cr, uid, ids, context): + if field.name in MAGIC_COLUMNS: + continue model = self.pool[field.model] cr.execute('select relkind from pg_class where relname=%s', (model._table,)) result = cr.fetchone() @@ -1117,6 +1119,10 @@ class ir_model_data(osv.osv): # Don't remove the LOG_ACCESS_COLUMNS unless _log_access # has been turned off on the model. field = self.pool[model].browse(cr, uid, [res_id], context=context)[0] + if not field.exists(): + _logger.info('Deleting orphan external_ids %s', external_ids) + self.unlink(cr, uid, external_ids) + continue if field.name in openerp.osv.orm.LOG_ACCESS_COLUMNS and self.pool[field.model]._log_access: continue if field.name == 'id': diff --git a/openerp/addons/base/ir/ir_qweb.py b/openerp/addons/base/ir/ir_qweb.py index 590ce90188f..4608f63bd49 100644 --- a/openerp/addons/base/ir/ir_qweb.py +++ b/openerp/addons/base/ir/ir_qweb.py @@ -32,7 +32,7 @@ class QWebException(Exception): class QWebTemplateNotFound(QWebException): pass -def convert_to_qweb_exception(etype=None, **kw): +def raise_qweb_exception(etype=None, **kw): if etype is None: etype = QWebException orig_type, original, tb = sys.exc_info() @@ -43,7 +43,7 @@ def convert_to_qweb_exception(etype=None, **kw): e.qweb[k] = v # Will use `raise foo from bar` in python 3 and rename cause to __cause__ e.qweb['cause'] = original - return e + raise class QWebContext(dict): def __init__(self, cr, uid, data, loader=None, templates=None, context=None): @@ -144,7 +144,7 @@ class QWeb(orm.AbstractModel): """Add a parsed template in the context. Used to preprocess templates.""" qwebcontext.templates[name] = node - def load_document(self, document, qwebcontext): + def load_document(self, document, res_id, qwebcontext): """ Loads an XML document and installs any contained template in the engine """ @@ -156,9 +156,13 @@ class QWeb(orm.AbstractModel): dom = xml.dom.minidom.parse(document) for node in dom.documentElement.childNodes: - if node.nodeType == self.node.ELEMENT_NODE and node.getAttribute('t-name'): - name = str(node.getAttribute("t-name")) - self.add_template(qwebcontext, name, node) + if node.nodeType == self.node.ELEMENT_NODE: + if node.getAttribute('t-name'): + name = str(node.getAttribute("t-name")) + self.add_template(qwebcontext, name, node) + if res_id and node.tagName == "t": + self.add_template(qwebcontext, res_id, node) + res_id = None def get_template(self, name, qwebcontext): origin_template = qwebcontext.get('__caller__') or qwebcontext['__stack__'][0] @@ -166,8 +170,8 @@ class QWeb(orm.AbstractModel): try: xml_doc = qwebcontext.loader(name) except ValueError: - raise convert_to_qweb_exception(QWebTemplateNotFound, message="Loader could not find template %r" % name, template=origin_template) - self.load_document(xml_doc, qwebcontext=qwebcontext) + raise_qweb_exception(QWebTemplateNotFound, message="Loader could not find template %r" % name, template=origin_template) + self.load_document(xml_doc, isinstance(name, (int, long)) and name or None, qwebcontext=qwebcontext) if name in qwebcontext.templates: return qwebcontext.templates[name] @@ -179,7 +183,7 @@ class QWeb(orm.AbstractModel): return qwebcontext.safe_eval(expr) except Exception: template = qwebcontext.get('__template__') - raise convert_to_qweb_exception(message="Could not evaluate expression %r" % expr, expression=expr, template=template) + raise_qweb_exception(message="Could not evaluate expression %r" % expr, expression=expr, template=template) def eval_object(self, expr, qwebcontext): return self.eval(expr, qwebcontext) @@ -207,7 +211,7 @@ class QWeb(orm.AbstractModel): return str(expr % qwebcontext) except Exception: template = qwebcontext.get('__template__') - raise convert_to_qweb_exception(message="Format error for expression %r" % expr, expression=expr, template=template) + raise_qweb_exception(message="Format error for expression %r" % expr, expression=expr, template=template) def eval_bool(self, expr, qwebcontext): return int(bool(self.eval(expr, qwebcontext))) @@ -241,7 +245,7 @@ class QWeb(orm.AbstractModel): if attribute_name == "groups": cr = qwebcontext.get('request') and qwebcontext['request'].cr or None uid = qwebcontext.get('request') and qwebcontext['request'].uid or None - can_see = self.user_has_groups(cr, uid, groups=attribute_value) + can_see = self.user_has_groups(cr, uid, groups=attribute_value) if cr and uid else False if not can_see: return '' continue @@ -292,7 +296,7 @@ class QWeb(orm.AbstractModel): raise except Exception: template = qwebcontext.get('__template__') - raise convert_to_qweb_exception(message="Could not render element %r" % element.nodeName, node=element, template=template) + raise_qweb_exception(message="Could not render element %r" % element.nodeName, node=element, template=template) name = str(element.nodeName) inner = "".join(g_inner) trim = template_attributes.get("trim", 0) @@ -332,7 +336,9 @@ class QWeb(orm.AbstractModel): return self.render_element(element, template_attributes, generated_attributes, qwebcontext, inner) def render_tag_esc(self, element, template_attributes, generated_attributes, qwebcontext): - inner = werkzeug.utils.escape(self.eval_str(template_attributes["esc"], qwebcontext)) + options = json.loads(template_attributes.get('esc-options') or '{}') + widget = self.get_widget_for(options.get('widget', '')) + inner = widget.format(template_attributes['esc'], options, qwebcontext) return self.render_element(element, template_attributes, generated_attributes, qwebcontext, inner) def render_tag_foreach(self, element, template_attributes, generated_attributes, qwebcontext): @@ -383,7 +389,12 @@ class QWeb(orm.AbstractModel): cr = d.get('request') and d['request'].cr or None uid = d.get('request') and d['request'].uid or None - return self.render(cr, uid, self.eval_format(template_attributes["call"], d), d) + template = self.eval_format(template_attributes["call"], d) + try: + template = int(template) + except ValueError: + pass + return self.render(cr, uid, template, d) def render_tag_set(self, element, template_attributes, generated_attributes, qwebcontext): if "value" in template_attributes: @@ -416,8 +427,10 @@ class QWeb(orm.AbstractModel): element, template_attributes, generated_attributes, qwebcontext, context=qwebcontext.context) def get_converter_for(self, field_type): - return self.pool.get('ir.qweb.field.' + field_type, - self.pool['ir.qweb.field']) + return self.pool.get('ir.qweb.field.' + field_type, self.pool['ir.qweb.field']) + + def get_widget_for(self, widget): + return self.pool.get('ir.qweb.widget.' + widget, self.pool['ir.qweb.widget']) #-------------------------------------------------------------------- # QWeb Fields converters @@ -488,7 +501,6 @@ class FieldConverter(osv.AbstractModel): A default configuration key is ``widget`` which can override the field's own ``_type``. """ - content = None try: content = self.record_to_html( cr, uid, field_name, record, @@ -503,12 +515,14 @@ class FieldConverter(osv.AbstractModel): field_name, record._model._name, exc_info=True) content = None - g_att += ''.join( - ' %s="%s"' % (name, werkzeug.utils.escape(value)) - for name, value in self.attributes( - cr, uid, field_name, record, options, - source_element, g_att, t_att, qweb_context) - ) + if context and context.get('inherit_branding'): + # add branding attributes + g_att += ''.join( + ' %s="%s"' % (name, werkzeug.utils.escape(value)) + for name, value in self.attributes( + cr, uid, field_name, record, options, + source_element, g_att, t_att, qweb_context) + ) return self.render_element(cr, uid, source_element, t_att, g_att, qweb_context, content) @@ -602,7 +616,7 @@ class DateTimeConverter(osv.AbstractModel): if isinstance(value, basestring): value = datetime.datetime.strptime( value, openerp.tools.DEFAULT_SERVER_DATETIME_FORMAT) - value = column.context_timestamp( + value = fields.datetime.context_timestamp( cr, uid, timestamp=value, context=context) if options and 'format' in options: @@ -611,6 +625,9 @@ class DateTimeConverter(osv.AbstractModel): strftime_pattern = (u"%s %s" % (lang.date_format, lang.time_format)) pattern = openerp.tools.posix_to_ldml(strftime_pattern, locale=locale) + if options and options.get('hide_seconds'): + pattern = pattern.replace(":ss", "").replace(":s", "") + return babel.dates.format_datetime(value, format=pattern, locale=locale) class TextConverter(osv.AbstractModel): @@ -804,6 +821,93 @@ 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): + if options is None: + options = {} + 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, + 'object': field_browse, + '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 QwebView(orm.AbstractModel): + _name = 'ir.qweb.field.qweb' + _inherit = 'ir.qweb.field.many2one' + + def record_to_html(self, cr, uid, field_name, record, column, options=None, context=None): + if not getattr(record, field_name): + return None + + view = getattr(record, field_name) + + if view._model._name != "ir.ui.view": + _logger.warning("%s.%s must be a 'ir.ui.view' model." % (record, field_name)) + return None + + ctx = (context or {}).copy() + ctx['object'] = record + html = view.render(ctx, engine='ir.qweb', context=ctx).decode('utf8') + + return HTMLSafe(html) + +class QwebWidget(osv.AbstractModel): + _name = 'ir.qweb.widget' + + def _format(self, inner, options, qwebcontext): + return self.pool['ir.qweb'].eval_str(inner, qwebcontext) + + def format(self, inner, options, qwebcontext): + return werkzeug.utils.escape(self._format(inner, options, qwebcontext)) + +class QwebWidgetMonetary(osv.AbstractModel): + _name = 'ir.qweb.widget.monetary' + _inherit = 'ir.qweb.widget' + + def _format(self, inner, options, qwebcontext): + inner = self.pool['ir.qweb'].eval(inner, qwebcontext) + display = self.pool['ir.qweb'].eval_object(options['display_currency'], qwebcontext) + precision = int(round(math.log10(display.rounding))) + fmt = "%.{0}f".format(-precision if precision < 0 else 0) + lang_code = qwebcontext.context.get('lang') or 'en_US' + formatted_amount = self.pool['res.lang'].format( + qwebcontext.cr, qwebcontext.uid, [lang_code], fmt, inner, grouping=True, monetary=True + ) + pre = post = u'' + if display.position == 'before': + pre = u'{symbol} ' + else: + post = u' {symbol}' + + return u'{pre}{0}{post}'.format( + formatted_amount, pre=pre, post=post + ).format(symbol=display.symbol,) + 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 diff --git a/openerp/addons/base/ir/ir_qweb.xml b/openerp/addons/base/ir/ir_qweb.xml new file mode 100644 index 00000000000..a21a3fcf2af --- /dev/null +++ b/openerp/addons/base/ir/ir_qweb.xml @@ -0,0 +1,26 @@ + + + + + diff --git a/openerp/addons/base/ir/ir_ui_view.py b/openerp/addons/base/ir/ir_ui_view.py index fe62d9e80cc..314865ae066 100644 --- a/openerp/addons/base/ir/ir_ui_view.py +++ b/openerp/addons/base/ir/ir_ui_view.py @@ -73,12 +73,18 @@ class view_custom(osv.osv): class view(osv.osv): _name = 'ir.ui.view' - def _get_model_data(self, cr, uid, ids, *args, **kwargs): - ir_model_data = self.pool.get('ir.model.data') - data_ids = ir_model_data.search(cr, uid, [('model', '=', self._name), ('res_id', 'in', ids)]) - result = dict(zip(ids, data_ids)) + def _get_model_data(self, cr, uid, ids, fname, args, context=None): + result = dict.fromkeys(ids, False) + IMD = self.pool['ir.model.data'] + data_ids = IMD.search_read(cr, uid, [('res_id', 'in', ids), ('model', '=', 'ir.ui.view')], ['res_id'], context=context) + result.update(map(itemgetter('res_id', 'id'), data_ids)) return result + def _views_from_model_data(self, cr, uid, ids, context=None): + IMD = self.pool['ir.model.data'] + data_ids = IMD.search_read(cr, uid, [('id', 'in', ids), ('model', '=', 'ir.ui.view')], ['res_id'], context=context) + return map(itemgetter('res_id'), data_ids) + _columns = { 'name': fields.char('View Name', required=True), 'model': fields.char('Object', select=True), @@ -97,7 +103,11 @@ class view(osv.osv): 'inherit_id': fields.many2one('ir.ui.view', 'Inherited View', ondelete='cascade', select=True), 'inherit_children_ids': fields.one2many('ir.ui.view','inherit_id', 'Inherit Views'), 'field_parent': fields.char('Child Field'), - 'model_data_id': fields.function(_get_model_data, type='many2one', relation='ir.model.data', string="Model Data", store=True), + 'model_data_id': fields.function(_get_model_data, type='many2one', relation='ir.model.data', string="Model Data", + store={ + _name: (lambda s, c, u, i, ctx=None: i, None, 10), + 'ir.model.data': (_views_from_model_data, ['model', 'res_id'], 10), + }), 'xml_id': fields.function(osv.osv.get_xml_id, type='char', size=128, string="External ID", help="ID of the view defined in xml file"), 'groups_id': fields.many2many('res.groups', 'ir_ui_view_group_rel', 'view_id', 'group_id', @@ -316,14 +326,14 @@ class view(osv.osv): return node return None - def inherit_branding(self, specs_tree, view_id, source_id): + def inherit_branding(self, specs_tree, view_id, root_id): for node in specs_tree.iterchildren(tag=etree.Element): xpath = node.getroottree().getpath(node) if node.tag == 'data' or node.tag == 'xpath': - self.inherit_branding(node, view_id, source_id) + self.inherit_branding(node, view_id, root_id) else: node.set('data-oe-id', str(view_id)) - node.set('data-oe-source-id', str(source_id)) + node.set('data-oe-source-id', str(root_id)) node.set('data-oe-xpath', xpath) node.set('data-oe-model', 'ir.ui.view') node.set('data-oe-field', 'arch') @@ -397,7 +407,7 @@ class view(osv.osv): return source - def apply_view_inheritance(self, cr, uid, source, source_id, model, context=None): + def apply_view_inheritance(self, cr, uid, source, source_id, model, root_id=None, context=None): """ Apply all the (directly and indirectly) inheriting views. :param source: a parent architecture to modify (with parent modifications already applied) @@ -408,13 +418,15 @@ class view(osv.osv): :return: a modified source where all the modifying architecture are applied """ if context is None: context = {} + if root_id is None: + root_id = source_id sql_inherit = self.pool.get('ir.ui.view').get_inheriting_views_arch(cr, uid, source_id, model, context=context) for (specs, view_id) in sql_inherit: specs_tree = etree.fromstring(specs.encode('utf-8')) if context.get('inherit_branding'): - self.inherit_branding(specs_tree, view_id, source_id) + self.inherit_branding(specs_tree, view_id, root_id) source = self.apply_inheritance_specs(cr, uid, source, specs_tree, view_id, context=context) - source = self.apply_view_inheritance(cr, uid, source, view_id, model, context=context) + source = self.apply_view_inheritance(cr, uid, source, view_id, model, root_id=root_id, context=context) return source def read_combined(self, cr, uid, view_id, fields=None, context=None): @@ -686,6 +698,16 @@ class view(osv.osv): for action, operation in (('create', 'create'), ('delete', 'unlink'), ('edit', 'write')): if not node.get(action) and not Model.check_access_rights(cr, user, operation, raise_exception=False): node.set(action, 'false') + if node.tag in ('kanban'): + group_by_field = node.get('default_group_by') + if group_by_field and Model._all_columns.get(group_by_field): + group_by_column = Model._all_columns[group_by_field].column + if group_by_column._type == 'many2one': + group_by_model = Model.pool.get(group_by_column._obj) + for action, operation in (('group_create', 'create'), ('group_delete', 'unlink'), ('group_edit', 'write')): + if not node.get(action) and not group_by_model.check_access_rights(cr, user, operation, raise_exception=False): + node.set(action, 'false') + arch = etree.tostring(node, encoding="utf-8").replace('\t', '') for k in fields.keys(): if k not in fields_def: @@ -707,10 +729,13 @@ class view(osv.osv): #------------------------------------------------------ @tools.ormcache_context(accepted_keys=('lang','inherit_branding', 'editable', 'translatable')) def read_template(self, cr, uid, xml_id, context=None): - if '.' not in xml_id: - raise ValueError('Invalid template id: %r' % (xml_id,)) + if isinstance(xml_id, (int, long)): + view_id = xml_id + else: + if '.' not in xml_id: + raise ValueError('Invalid template id: %r' % (xml_id,)) + view_id = self.pool['ir.model.data'].xmlid_to_res_id(cr, uid, xml_id, raise_if_not_found=True) - view_id = self.pool['ir.model.data'].xmlid_to_res_id(cr, uid, xml_id, raise_if_not_found=True) arch = self.read_combined(cr, uid, view_id, fields=['arch'], context=context)['arch'] arch_tree = etree.fromstring(arch) @@ -726,9 +751,26 @@ class view(osv.osv): def clear_cache(self): self.read_template.clear_cache(self) + def _contains_branded(self, node): + return node.tag == 't'\ + or 't-raw' in node.attrib\ + or any(self.is_node_branded(child) for child in node.iterdescendants()) + + def _pop_view_branding(self, element): + distributed_branding = dict( + (attribute, element.attrib.pop(attribute)) + for attribute in MOVABLE_BRANDING + if element.get(attribute)) + return distributed_branding + def distribute_branding(self, e, branding=None, parent_xpath='', index_map=misc.ConstantMapping(1)): if e.get('t-ignore') or e.tag == 'head': + # remove any view branding possibly injected by inheritance + attrs = set(MOVABLE_BRANDING) + for descendant in e.iterdescendants(tag=etree.Element): + if not attrs.intersection(descendant.attrib): continue + self._pop_view_branding(descendant) # TODO: find a better name and check if we have a string to boolean helper return @@ -740,25 +782,30 @@ class view(osv.osv): e.set('data-oe-xpath', node_path) if not e.get('data-oe-model'): return - # if a branded element contains branded elements distribute own - # branding to children unless it's t-raw, then just remove branding - # on current element - if e.tag == 't' or 't-raw' in e.attrib or \ - any(self.is_node_branded(child) for child in e.iterdescendants()): - distributed_branding = dict( - (attribute, e.attrib.pop(attribute)) - for attribute in MOVABLE_BRANDING - if e.get(attribute)) + if set(('t-esc', 't-escf', 't-raw', 't-rawf')).intersection(e.attrib): + # nodes which fully generate their content and have no reason to + # be branded because they can not sensibly be edited + self._pop_view_branding(e) + elif self._contains_branded(e): + # if a branded element contains branded elements distribute own + # branding to children unless it's t-raw, then just remove branding + # on current element + distributed_branding = self._pop_view_branding(e) if 't-raw' not in e.attrib: # TODO: collections.Counter if remove p2.6 compat # running index by tag type, for XPath query generation indexes = collections.defaultdict(lambda: 0) for child in e.iterchildren(tag=etree.Element): - indexes[child.tag] += 1 - self.distribute_branding(child, distributed_branding, - parent_xpath=node_path, - index_map=indexes) + if child.get('data-oe-xpath'): + # injected by view inheritance, skip otherwise + # generated xpath is incorrect + self.distribute_branding(child) + else: + indexes[child.tag] += 1 + self.distribute_branding( + child, distributed_branding, + parent_xpath=node_path, index_map=indexes) def is_node_branded(self, node): """ Finds out whether a node is branded or qweb-active (bears a @@ -813,9 +860,6 @@ class view(osv.osv): def render(self, cr, uid, id_or_xml_id, values=None, engine='ir.qweb', context=None): if isinstance(id_or_xml_id, list): id_or_xml_id = id_or_xml_id[0] - tname = id_or_xml_id - if isinstance(tname, (int, long)): - tname = self.get_view_xmlid(cr, uid, tname) if not context: context = {} @@ -833,7 +877,7 @@ class view(osv.osv): def loader(name): return self.read_template(cr, uid, name, context=context) - return self.pool[engine].render(cr, uid, tname, qcontext, loader=loader, context=context) + return self.pool[engine].render(cr, uid, id_or_xml_id, qcontext, loader=loader, context=context) #------------------------------------------------------ # Misc diff --git a/openerp/addons/base/ir/ir_values.py b/openerp/addons/base/ir/ir_values.py index a21b034d1b0..6af09b7ecbb 100644 --- a/openerp/addons/base/ir/ir_values.py +++ b/openerp/addons/base/ir/ir_values.py @@ -394,17 +394,16 @@ class ir_values(osv.osv): for action in cr.dictfetchall(): if not action['value']: continue # skip if undefined - action_model,id = action['value'].split(',') - fields = [ - field - for field in self.pool[action_model]._all_columns - if field not in EXCLUDED_FIELDS] + action_model_name, action_id = action['value'].split(',') + action_model = self.pool.get(action_model_name) + if not action_model: + continue # unknow model? skip it + fields = [field for field in action_model._all_columns if field not in EXCLUDED_FIELDS] # FIXME: needs cleanup try: - action_def = self.pool[action_model].read(cr, uid, int(id), fields, context) + action_def = action_model.read(cr, uid, int(action_id), fields, context) if action_def: - if action_model in ('ir.actions.report.xml','ir.actions.act_window', - 'ir.actions.wizard'): + if action_model_name in ('ir.actions.report.xml', 'ir.actions.act_window'): groups = action_def.get('groups_id') if groups: cr.execute('SELECT 1 FROM res_groups_users_rel WHERE gid IN %s AND uid=%s', diff --git a/openerp/addons/base/module/module.py b/openerp/addons/base/module/module.py index 6ad74857f39..b82e6b8242d 100644 --- a/openerp/addons/base/module/module.py +++ b/openerp/addons/base/module/module.py @@ -31,6 +31,7 @@ import shutil import tempfile import urllib import urllib2 +import urlparse import zipfile import zipimport import lxml.html @@ -41,6 +42,7 @@ except ImportError: from StringIO import StringIO # NOQA import openerp +import openerp.exceptions from openerp import modules, tools from openerp.modules.db import create_categories from openerp.modules import get_module_resource @@ -621,40 +623,14 @@ class module(osv.osv): return res def download(self, cr, uid, ids, download=True, context=None): - res = [] - default_version = modules.adapt_version('1.0') - for mod in self.browse(cr, uid, ids, context=context): - if not mod.url: - continue - match = re.search('-([a-zA-Z0-9\._-]+)(\.zip)', mod.url, re.I) - version = default_version - if match: - version = match.group(1) - if parse_version(mod.installed_version) >= parse_version(version): - continue - res.append(mod.url) - if not download: - continue - zip_content = urllib.urlopen(mod.url).read() - fname = modules.get_module_path(str(mod.name) + '.zip', downloaded=True) - try: - with open(fname, 'wb') as fp: - fp.write(zip_content) - except Exception: - _logger.exception('Error when trying to create module ' - 'file %s', fname) - raise orm.except_orm(_('Error'), _('Can not create the module file:\n %s') % (fname,)) - terp = self.get_module_info(mod.name) - self.write(cr, uid, mod.id, self.get_values_from_terp(terp)) - cr.execute('DELETE FROM ir_module_module_dependency WHERE module_id = %s', (mod.id,)) - self._update_dependencies(cr, uid, mod, terp.get('depends', [])) - self._update_category(cr, uid, mod, terp.get('category', 'Uncategorized')) - # Import module - zimp = zipimport.zipimporter(fname) - zimp.load_module(mod.name) - return res + return [] def install_from_urls(self, cr, uid, urls, context=None): + if not self.pool['res.users'].has_group(cr, uid, 'base.group_system'): + raise openerp.exceptions.AccessDenied() + + apps_server = urlparse.urlparse(self.get_apps_server(cr, uid, context=context)) + OPENERP = 'openerp' tmp = tempfile.mkdtemp() _logger.debug('Install from url: %r', urls) @@ -663,6 +639,11 @@ class module(osv.osv): for module_name, url in urls.items(): if not url: continue # nothing to download, local version is already the last one + + up = urlparse.urlparse(url) + if up.scheme != apps_server.scheme or up.netloc != apps_server.netloc: + raise openerp.exceptions.AccessDenied() + try: _logger.info('Downloading module `%s` from OpenERP Apps', module_name) content = urllib2.urlopen(url).read() @@ -727,8 +708,8 @@ class module(osv.osv): finally: shutil.rmtree(tmp) - def install_by_names(self, cr, uid, names, context=None): - raise NotImplementedError('# TODO') + def get_apps_server(self, cr, uid, context=None): + return tools.config.get('apps_server', 'https://apps.openerp.com/apps') def _update_dependencies(self, cr, uid, mod_browse, depends=None): if depends is None: diff --git a/openerp/addons/base/module/module_data.xml b/openerp/addons/base/module/module_data.xml index 2b7fd2bdab5..ad5998b091b 100644 --- a/openerp/addons/base/module/module_data.xml +++ b/openerp/addons/base/module/module_data.xml @@ -85,12 +85,6 @@ 11 - - Survey - Lets you create, send, share and answer to surveys. - 11 - - Marketing Helps you manage your marketing campaigns step by step. diff --git a/openerp/addons/base/module/wizard/base_module_import.py b/openerp/addons/base/module/wizard/base_module_import.py index 6d6f0e1ef8d..2ba789f3332 100644 --- a/openerp/addons/base/module/wizard/base_module_import.py +++ b/openerp/addons/base/module/wizard/base_module_import.py @@ -28,8 +28,6 @@ from openerp import tools from openerp.osv import osv, fields from openerp.tools.translate import _ -ADDONS_PATH = tools.config['addons_path'].split(",")[-1] - class base_module_import(osv.osv_memory): """ Import Module """ diff --git a/openerp/addons/base/res/res_company.py b/openerp/addons/base/res/res_company.py index 558afbeaae0..64ab5676ca2 100644 --- a/openerp/addons/base/res/res_company.py +++ b/openerp/addons/base/res/res_company.py @@ -124,7 +124,8 @@ class res_company(osv.osv): 'rml_footer': fields.text('Report Footer', help="Footer text displayed at the bottom of all reports."), 'rml_footer_readonly': fields.related('rml_footer', type='text', string='Report Footer', readonly=True), 'custom_footer': fields.boolean('Custom Footer', help="Check this to define the report footer manually. Otherwise it will be filled in automatically."), - 'font': fields.many2one('res.font', string="Font",help="Set the font into the report header, it will be used as default font in the RML reports of the user company"), + 'font': fields.many2one('res.font', string="Font", domain=[('mode', 'in', ('Normal', 'Regular', 'all', 'Book'))], + help="Set the font into the report header, it will be used as default font in the RML reports of the user company"), 'logo': fields.related('partner_id', 'image', string="Logo", type="binary"), 'logo_web': fields.function(_get_logo_web, string="Logo Web", type="binary", store={ 'res.company': (lambda s, c, u, i, x: i, ['partner_id'], 10), @@ -147,7 +148,7 @@ class res_company(osv.osv): 'website': fields.related('partner_id', 'website', string="Website", type="char", size=64), 'vat': fields.related('partner_id', 'vat', string="Tax ID", type="char", size=32), 'company_registry': fields.char('Company Registry', size=64), - 'paper_format': fields.selection([('a4', 'A4'), ('us_letter', 'US Letter')], "Paper Format", required=True), + 'rml_paper_format': fields.selection([('a4', 'A4'), ('us_letter', 'US Letter')], "Paper Format", required=True, oldname='paper_format'), } _sql_constraints = [ ('name_uniq', 'unique (name)', 'The company name must be unique !') @@ -207,20 +208,19 @@ class res_company(osv.osv): res['value'] = {'currency_id': currency_id} return res - def _search(self, cr, uid, args, offset=0, limit=None, order=None, - context=None, count=False, access_rights_uid=None): + def name_search(self, cr, uid, name='', args=None, operator='ilike', context=None, limit=100): if context is None: context = {} - if context.get('user_preference'): + if context.pop('user_preference', None): # We browse as superuser. Otherwise, the user would be able to # select only the currently visible companies (according to rules, # which are probably to allow to see the child companies) even if # she belongs to some other companies. user = self.pool.get('res.users').browse(cr, SUPERUSER_ID, uid, context=context) cmp_ids = list(set([user.company_id.id] + [cmp.id for cmp in user.company_ids])) - return cmp_ids - return super(res_company, self)._search(cr, uid, args, offset=offset, limit=limit, order=order, - context=context, count=count, access_rights_uid=access_rights_uid) + uid = SUPERUSER_ID + args = (args or []) + [('id', 'in', cmp_ids)] + return super(res_company, self).name_search(cr, uid, name=name, args=args, operator=operator, context=context, limit=limit) def _company_default_get(self, cr, uid, object=False, field=False, context=None): """ @@ -388,8 +388,8 @@ class res_company(osv.osv): _header_a4 = _header_main % ('21.7cm', '27.7cm', '27.7cm', '27.7cm', '27.8cm', '27.3cm', '25.3cm', '25.0cm', '25.0cm', '24.6cm', '24.6cm', '24.5cm', '24.5cm') _header_letter = _header_main % ('20cm', '26.0cm', '26.0cm', '26.0cm', '26.1cm', '25.6cm', '23.6cm', '23.3cm', '23.3cm', '22.9cm', '22.9cm', '22.8cm', '22.8cm') - def onchange_paper_format(self, cr, uid, ids, paper_format, context=None): - if paper_format == 'us_letter': + def onchange_rml_paper_format(self, cr, uid, ids, rml_paper_format, context=None): + if rml_paper_format == 'us_letter': return {'value': {'rml_header': self._header_letter}} return {'value': {'rml_header': self._header_a4}} @@ -398,7 +398,7 @@ class res_company(osv.osv): _defaults = { 'currency_id': _get_euro, - 'paper_format': 'a4', + 'rml_paper_format': 'a4', 'rml_header':_get_header, 'rml_header2': _header2, 'rml_header3': _header3, diff --git a/openerp/addons/base/res/res_company_view.xml b/openerp/addons/base/res/res_company_view.xml index c037b0e76ac..5139623031f 100644 --- a/openerp/addons/base/res/res_company_view.xml +++ b/openerp/addons/base/res/res_company_view.xml @@ -23,9 +23,6 @@
    -
    -