[MERGE] from trunk

bzr revid: rco@openerp.com-20130213082352-t3wbhkxfh3z10ukt
This commit is contained in:
Raphael Collet 2013-02-13 09:23:52 +01:00
commit 6f045b48e8
156 changed files with 6473 additions and 4284 deletions

12
doc/changelog.rst Normal file
View File

@ -0,0 +1,12 @@
.. _changelog:
Changelog
=========
`trunk`
-------
- Removed support for `__terp__.py` descriptor files.
- Removed support for `<terp>` root element in XML files.
- Removed support for the non-openerp namespace (e.g. importing `tools` instead
of `openerp.tools` in an addons).

View File

@ -0,0 +1,73 @@
.. _using-mod-wsgi:
Deploying with ``mod_wsgi``
===========================
``mod_wsgi`` makes it possible to run a WSGI_ application (such as OpenERP)
under the Apache_ HTTP server.
.. _WSGI: http://en.wikipedia.org/wiki/Web_Server_Gateway_Interface
.. _Apache: https://httpd.apache.org/
Summary
-------
Similarly to :doc:`deployment-gunicorn`, running OpenERP behind Apache with
``mod_wsgi`` requires to modify the sample ``openerp-wsgi.py`` script. Then
that Python script can be set in the Apache configuration.
Python (WSGI) application
-------------------------
Apache needs a Python script providing the WSGI application. By default the
symbol looked up by Apache is ``application`` but it can be overidden with the
``WSGICallableObject`` directive if necessary. A sample script
``openerp-wsgi.py`` is provided with OpenERP and you can adapt it to your
needs. For instance, make sure to correctly set the ``addons_path``
configuration (using absolute paths).
.. note ::
The script provided to Apache has often the extension ``.wsgi`` but the
``openerp-wsgi.py`` script will do just as fine.
Apache Configuration
--------------------
In Apache's configuration, add the following line to activate ``mod_wsgi``::
LoadModule wsgi_module modules/mod_wsgi.so
Then a possible (straightforward, with e.g. no virtual server) configuration is
as follow::
WSGIScriptAlias / /home/thu/repos/server/trunk/openerp-wsgi.py
WSGIDaemonProcess oe user=thu group=users processes=2 python-path=/home/thu/repos/server/trunk/ display-name=apache-openerp
WSGIProcessGroup oe
<Directory /home/thu/repos/server/trunk>
Order allow,deny
Allow from all
</Directory>
The ``WSGIScriptAlias`` directive indicates that any URL matching ``/`` will
run the application defined in the ``openerp-wsgi.py`` script.
The ``WSGIDaemonProcess`` and ``WSGIProcessGroup`` directives create a process
configuration. The configuration makes it possible for isntance to specify
which user runs the OpenERP process. The ``display-name`` option will make the
processes appear as ``apache-openerp`` in ``ps`` (instead of the normal
``httpd``).
Finally, it is necessary to make sure the source directory where the script can
be found is allowed by Apache with the ``Directory`` block.
``mod_wsgi`` supports a lot of directives, please see this ``mod_wsgi`` wiki
page for more details:
http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives.
Running
-------
When the Apache configuration changes, it is necessary to restart Apache, e.g. with::
/etc/init.d/httpd restart

View File

@ -17,6 +17,7 @@ OpenERP Server
05_test_framework
06_misc
deployment-gunicorn
deployment-mod-wsgi
OpenERP Command
'''''''''''''''
@ -36,6 +37,15 @@ OpenERP Server API
orm-methods.rst
api_models.rst
routing.rst
Changelog
'''''''''
.. toctree::
:maxdepth: 1
changelog.rst
Concepts
''''''''

27
doc/routing.rst Normal file
View File

@ -0,0 +1,27 @@
.. _routing:
Routing
=======
.. versionchanged:: 7.1
The OpenERP framework, as an HTTP server, serves a few hard-coded URLs
(``models``, ``db``, ...) to expose RPC endpoints. When running the web addons
(which is almost always the case), it also serves URLs without them being RPC
endpoints.
In older version of OpenERP, adding RPC endpoints was done by subclassing the
``openerp.netsvc.ExportService`` class. Adding WSGI handlers was done by
registering them with the :py:func:`openerp.wsgi.register_wsgi_handler`
function.
Starting with OpenERP 7.1, exposing a new arbitrary WSGI handler is done with
the :py:func:`openerp.http.handler` decorator while adding an RPC endpoint is
done with the :py:func:`openerp.http.rpc` decorator.
Routing decorators
------------------
.. automodule:: openerp.http
:members:
:undoc-members:

View File

@ -1 +0,0 @@
excludes: pychart release openerp-server test run_tests addons/base_quality_interrogation

View File

@ -28,6 +28,7 @@ SUPERUSER_ID = 1
import addons
import cli
import conf
import http
import loglevels
import modules
import netsvc
@ -35,10 +36,8 @@ import osv
import pooler
import release
import report
import run_tests
import service
import sql_db
import test
import tools
import workflow
# backward compatilbility

View File

@ -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: 2013-01-19 05:12+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:43+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:12+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:43+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:12+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:43+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:12+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:43+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:13+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:44+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:13+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:44+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:13+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:44+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:13+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:44+0000\n"
"X-Generator: Launchpad (build 16477)\n"
"X-Poedit-Language: Czech\n"
#. module: base

View File

@ -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: 2013-01-19 05:14+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:44+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:15+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:45+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
@ -8397,7 +8397,6 @@ msgid ""
" </p>\n"
" "
msgstr ""
"Copy text \t\n"
"<p class=\"oe_view_nocontent_create\">\n"
" Klicken Sie hier, um einen Kontakt zu Ihrem Adressbuch "
"hinzzufügen.\n"
@ -9693,6 +9692,18 @@ msgid ""
"\n"
" "
msgstr ""
"\n"
"Diese Anwendung zeigt die grundlegenden Prozesse, an denen die ausgewählten "
"Anwendungen und in der Reihenfolge ihres Auftreten sie beteiligt sind.\n"
"============================================================================="
"=========================\n"
"\n"
"**Hinweis:** Dies gilt für die Anwendungen, die den Anwendungsnamen "
"_process.xml. beinhalten.\n"
"\n"
"** z. B.** product/process/product_process.xml.\n"
"\n"
" "
#. module: base
#: view:res.lang:0
@ -10922,6 +10933,14 @@ msgid ""
"pads (by default, http://ietherpad.com/).\n"
" "
msgstr ""
"\n"
"Fügt erweiterte Unterstützung für (Ether)Pad Anlagen in den Web-Client.\n"
"===================================================================\n"
"\n"
"Ermöglicht dem Unternehmen festzulegen, welche Pad-Installation verwendet "
"werden soll, um zu\n"
"neuen Pads zu verlinken(standardmäßig, http://ietherpad.com/).\n"
" "
#. module: base
#: sql_constraint:res.lang:0
@ -12489,6 +12508,45 @@ msgid ""
"\n"
"**PASSWORD:** ${object.moodle_user_password}\n"
msgstr ""
"\n"
"Konfigurieren Sie Ihren Moodle-Server\n"
"=============================== \n"
"\n"
"Mit dieser Anwendung können Sie Ihr OpenERP mit einer Moodle-Plattform "
"verbinden.\n"
"Diese Anwendung erstellt Kurse und Schüler automatisch in Ihrer Moodle-"
"Plattform,\n"
"um Zeitverschwendung zu vermeiden.\n"
"Nun haben sie eine einfache Möglichkeit, Schulungen oder Kurse mit OpenERP "
"und Moodle zu erstellen. \n"
"\n"
"SCHRITTE ZUM KONFIGURIEREN:\n"
"-----------------------------------------------------\n"
"\n"
"1. Aktivieren Sie den Web-Service in Moodle\n"
"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"
">site administration >plugins >web services >manage protocols activate the "
"xmlrpc web service \n"
">site administration >plugins >web services >manage tokens create a token \n"
"\n"
"\n"
">site administration >plugins >web services >overview activate webservice\n"
"\n"
"\n"
"2. Erstellen Sie eine Bestätigungsemail mit Login und Passwort\n"
"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"
"Wir empfehlen Ihnen dringen, diese folgenden Zeilen am Ende Ihrer "
"Bestätigungsemail hinzuzufügen, um Ihren Abonnenten Login und Passwort von "
"Moodle mitzuteilen.\n"
"\n"
"\n"
"........Ihr voreingestellter Text.......\n"
"\n"
"**URL:** Ihr Link zu Moodle zum Beispiel: http://openerp.moodle.com\n"
"\n"
"**LOGIN:** ${object.moodle_username}\n"
"\n"
"**PASSWORD:** ${object.moodle_user_password}\n"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_uk
@ -12800,6 +12858,21 @@ msgid ""
" * Repair quotation report\n"
" * Notes for the technician and for the final customer\n"
msgstr ""
"\n"
"Ziel ist es, eine komplette Anwendung zu haben, die alle Reparaturen von "
"Produkten verwaltet.\n"
"============================================================================="
"=\n"
"\n"
"Die folgenden Themen werden in dieser Anwendung abgedeckt:\n"
"-----------------------------------------------------------------------------"
"-----------------------------\n"
" * Hinzufügen / Löschen von Produkten in der Reparatur\n"
" * Auswirkungen auf Bestände\n"
" * Fakturierung (Produkte und / oder Dienstleistungen)\n"
" * Garantie-Konzept\n"
" * Reparatur Angebotsbericht\n"
" * Hinweise für den Techniker und für den Endkunden\n"
#. module: base
#: model:res.country,name:base.cd
@ -13132,6 +13205,17 @@ msgid ""
"\n"
" "
msgstr ""
"\n"
"Management der Finanz- und Rechnungswesen der Vermögenswerte\n"
"========================================================\n"
"\n"
"Diese Anwendung verwaltet die Vermögenswerte von einem Unternehemen oder "
"einer Person. Sie behält\n"
"immer eine Übersicht über die Abschreibungen dieser Vermögenswerte. "
"Weiterhin ermöglicht es die\n"
"Bewegungen der Abschreibungslinien zu erstellen.\n"
"\n"
" "
#. module: base
#: field:ir.cron,numbercall:0
@ -14273,6 +14357,22 @@ msgid ""
"modules.\n"
" "
msgstr ""
"\n"
"Diese Anwendung fügt eine Verknüpfung zu ein oder mehreren möglichen Fällen "
"im CRM hinzu. \n"
"===========================================================================\n"
"\n"
"Diese Verknüpfung ermöglicht es Ihnen, einen Kundenauftrag, basierend auf "
"dem ausgewählten Fall,\n"
"zu erstellen Wenn verschiedene Fälle geöffnet sind (eine Liste), wird ein "
"Verkaufsauftrag pro Fall\n"
"erstellt. Der Fall wird dann geschlossen und mit dem erzeugten Kundenauftrag "
"verbunden.\n"
"\n"
"Wir raten Ihnen diese Anwendung zu installieren, wenn Sie die beiden "
"Anwendungen Sale und CRM \n"
"installiert haben.\n"
" "
#. module: base
#: model:res.country,name:base.bq

View File

@ -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: 2013-01-19 05:15+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:46+0000\n"
"X-Generator: Launchpad (build 16477)\n"
"X-Poedit-Country: GREECE\n"
"X-Poedit-Language: Greek\n"
"X-Poedit-SourceCharset: utf-8\n"

View File

@ -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: 2013-01-19 05:21+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:51+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:19+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:50+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
@ -7758,7 +7758,7 @@ msgstr "Acción"
#. module: base
#: view:ir.actions.server:0
msgid "Email Configuration"
msgstr "Configuración Email"
msgstr "Configuración del correo electrónico"
#. module: base
#: model:ir.model,name:base.model_ir_cron
@ -16623,7 +16623,7 @@ msgstr "Se requiere acceso como administrador para desinstalar un módulo"
#. module: base
#: model:ir.model,name:base.model_base_module_configuration
msgid "base.module.configuration"
msgstr "base.modulo.configuracion"
msgstr "Configuración del módulo base"
#. module: base
#: model:ir.module.module,description:base.module_point_of_sale

View File

@ -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: 2013-01-19 05:20+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:51+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:21+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:52+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:21+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:52+0000\n"
"X-Generator: Launchpad (build 16477)\n"
"Language: \n"
#. module: base

View File

@ -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: 2013-01-19 05:21+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:51+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:22+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:53+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
@ -578,7 +578,7 @@ msgstr "Guayana francesa"
#. module: base
#: model:ir.module.module,summary:base.module_hr
msgid "Jobs, Departments, Employees Details"
msgstr ""
msgstr "Trabajos, Departamentos, Detalle de Empleados"
#. module: base
#: model:ir.module.module,description:base.module_analytic
@ -656,7 +656,7 @@ msgstr ""
#. module: base
#: selection:base.language.install,lang:0
msgid "Spanish (VE) / Español (VE)"
msgstr "Spanish (es_EC) / Español (es_EC)"
msgstr "Spanish (es_VE) / Español (es_VE)"
#. module: base
#: model:ir.module.module,shortdesc:base.module_hr_timesheet_invoice
@ -729,7 +729,7 @@ msgstr ""
#. module: base
#: field:res.company,logo_web:0
msgid "Logo Web"
msgstr ""
msgstr "Logo Web"
#. module: base
#: code:addons/base/ir/ir_model.py:339
@ -1220,7 +1220,7 @@ msgstr "Modelo de documento"
#. module: base
#: view:res.users:0
msgid "Change the user password."
msgstr ""
msgstr "Cambiar password de usuario"
#. module: base
#: view:res.lang:0
@ -1849,7 +1849,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_portal_project_issue
msgid "Portal Issue"
msgstr ""
msgstr "Tarea de Portal"
#. module: base
#: model:ir.ui.menu,name:base.menu_tools
@ -1873,7 +1873,7 @@ msgstr ""
#. module: base
#: field:res.partner,image_small:0
msgid "Small-sized image"
msgstr ""
msgstr "Tamaño pequeño de imagen"
#. module: base
#: model:ir.module.module,shortdesc:base.module_stock
@ -1975,7 +1975,7 @@ msgstr ""
#: code:addons/base/ir/ir_fields.py:164
#, python-format
msgid "Unknown value '%s' for boolean field '%%(field)s', assuming '%s'"
msgstr ""
msgstr "Valor desconocido '%s' para campo lógico '%%(field)s', sumiendo '%s'"
#. module: base
#: model:res.country,name:base.nl
@ -1985,12 +1985,12 @@ msgstr "Países Bajos-Holanda"
#. module: base
#: model:ir.module.module,shortdesc:base.module_portal_event
msgid "Portal Event"
msgstr ""
msgstr "Evento de Portal"
#. module: base
#: selection:ir.translation,state:0
msgid "Translation in Progress"
msgstr ""
msgstr "Traducción en Progreso"
#. module: base
#: model:ir.model,name:base.model_ir_rule
@ -2005,7 +2005,7 @@ msgstr "Días"
#. module: base
#: model:ir.module.module,summary:base.module_fleet
msgid "Vehicle, leasing, insurances, costs"
msgstr ""
msgstr "Vehículo, arrendamiento, seguros, costos"
#. module: base
#: view:ir.model.access:0
@ -2016,7 +2016,7 @@ msgstr "Acceso de lectura"
#. module: base
#: help:ir.attachment,res_id:0
msgid "The record id this is attached to"
msgstr ""
msgstr "El id de registro está adjunto a"
#. module: base
#: model:ir.module.module,description:base.module_share
@ -2097,7 +2097,7 @@ msgstr "Crear Tareas en SO"
#: code:addons/base/ir/ir_model.py:318
#, python-format
msgid "This column contains module data and cannot be removed!"
msgstr ""
msgstr "Esta columna contiene datos del módulo y no puede ser eliminado !"
#. module: base
#: field:res.partner.bank,footer:0
@ -2235,7 +2235,7 @@ msgstr "Ruta de acceso completa"
#. module: base
#: view:base.language.export:0
msgid "The next step depends on the file format:"
msgstr ""
msgstr "El siguiente paso, depende el formato de archivo:"
#. module: base
#: view:res.lang:0
@ -2251,7 +2251,7 @@ msgstr ""
#. module: base
#: view:base.language.export:0
msgid "PO(T) format: you should edit it with a PO editor such as"
msgstr ""
msgstr "PO(T) formato: Debes editarlo con un Editor de archivos PO."
#. module: base
#: model:ir.ui.menu,name:base.menu_administration
@ -2275,7 +2275,7 @@ msgstr "Crear / Escribir / Copiar"
#. module: base
#: view:ir.sequence:0
msgid "Second: %(sec)s"
msgstr ""
msgstr "Segundo: %(sec)s"
#. module: base
#: field:ir.actions.act_window,view_mode:0
@ -2340,12 +2340,12 @@ msgstr "Bahamas"
#. module: base
#: field:ir.rule,perm_create:0
msgid "Apply for Create"
msgstr ""
msgstr "Aplicar para Creación"
#. module: base
#: model:ir.module.category,name:base.module_category_tools
msgid "Extra Tools"
msgstr ""
msgstr "Herramientas Extras"
#. module: base
#: view:ir.attachment:0
@ -2363,6 +2363,8 @@ msgid ""
"Appears by default on the top right corner of your printed documents (report "
"header)."
msgstr ""
"Aparece por defecto en la esquina superior derecha de sus documentos "
"impresos (cabecera de reporte)"
#. module: base
#: field:base.module.update,update:0
@ -2377,7 +2379,7 @@ msgstr "Método"
#. module: base
#: model:ir.module.module,shortdesc:base.module_auth_crypt
msgid "Password Encryption"
msgstr ""
msgstr "Encriptación de Contraseña"
#. module: base
#: view:workflow.activity:0
@ -2417,11 +2419,13 @@ msgstr ""
msgid ""
"No matching record found for %(field_type)s '%(value)s' in field '%%(field)s'"
msgstr ""
"No se encuentra un registro para %(field_type)s '%(value)s' en campo "
"'%%(field)s'"
#. module: base
#: field:change.password.user,new_passwd:0
msgid "New Password"
msgstr ""
msgstr "Nueva Contraseña"
#. module: base
#: model:ir.actions.act_window,help:base.action_ui_view
@ -2695,7 +2699,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_auth_oauth_signup
msgid "Signup with OAuth2 Authentication"
msgstr ""
msgstr "Ingreos con OAuth2"
#. module: base
#: selection:ir.model,state:0
@ -2722,7 +2726,7 @@ msgstr "Greek / Ελληνικά"
#. module: base
#: field:res.company,custom_footer:0
msgid "Custom Footer"
msgstr ""
msgstr "Pie de página personalizado"
#. module: base
#: model:ir.module.module,shortdesc:base.module_sale_crm
@ -2790,7 +2794,7 @@ msgstr "Nombre de acceso rápido"
#. module: base
#: field:res.partner,contact_address:0
msgid "Complete Address"
msgstr ""
msgstr "Dirección Completa"
#. module: base
#: help:ir.actions.act_window,limit:0
@ -2873,7 +2877,7 @@ msgstr "Id de registro"
#. module: base
#: view:ir.filters:0
msgid "My Filters"
msgstr ""
msgstr "Mis filtros"
#. module: base
#: field:ir.actions.server,email:0
@ -2893,6 +2897,7 @@ msgstr ""
#, python-format
msgid "Found multiple matches for field '%%(field)s' (%d matches)"
msgstr ""
"Se encontró multiples resultados para el campo '%%(field)s' (%d ocurrencias)"
#. module: base
#: selection:base.language.install,lang:0
@ -2926,7 +2931,7 @@ msgstr "Argumentos enviados al cliente junto con el tag view"
#. module: base
#: model:ir.module.module,summary:base.module_contacts
msgid "Contacts, People and Companies"
msgstr ""
msgstr "Contactos personas y Empresas"
#. module: base
#: model:res.country,name:base.tt
@ -2972,7 +2977,7 @@ msgstr "Gerente"
#: code:addons/base/ir/ir_model.py:719
#, python-format
msgid "Sorry, you are not allowed to access this document."
msgstr ""
msgstr "Perdón, no estas permitido para acceder a este documento."
#. module: base
#: model:res.country,name:base.py
@ -2987,7 +2992,7 @@ msgstr "Fiji"
#. module: base
#: view:ir.actions.report.xml:0
msgid "Report Xml"
msgstr ""
msgstr "Reporte Xml"
#. module: base
#: model:ir.module.module,description:base.module_purchase
@ -3058,7 +3063,7 @@ msgstr "Heredado"
#: code:addons/base/ir/ir_fields.py:146
#, python-format
msgid "yes"
msgstr ""
msgstr "si"
#. module: base
#: field:ir.model.fields,serialization_field_id:0
@ -3088,7 +3093,7 @@ msgstr ""
#: code:addons/base/ir/ir_fields.py:174
#, python-format
msgid "'%s' does not seem to be an integer for field '%%(field)s'"
msgstr ""
msgstr "'%s' no parece ser un entero para el campo '%%(field)s'"
#. module: base
#: model:ir.module.category,description:base.module_category_report_designer
@ -3198,6 +3203,8 @@ msgid ""
"the user will have an access to the sales configuration as well as statistic "
"reports."
msgstr ""
"el usuario tendra acceso a la configuración de ventas así como a las "
"estadísticas."
#. module: base
#: model:res.country,name:base.nz
@ -3327,7 +3334,7 @@ msgstr "Tipo de reporte desconocido: %s"
#. module: base
#: model:ir.module.module,summary:base.module_hr_expense
msgid "Expenses Validation, Invoicing"
msgstr ""
msgstr "Validación de gastos, Facturación"
#. module: base
#: model:ir.module.module,description:base.module_l10n_be_hr_payroll_account
@ -3346,7 +3353,7 @@ msgstr "Armenia"
#. module: base
#: model:ir.module.module,summary:base.module_hr_evaluation
msgid "Periodical Evaluations, Appraisals, Surveys"
msgstr ""
msgstr "Evaluaciones periódicas, valoraciones, encuentas"
#. module: base
#: model:ir.actions.act_window,name:base.ir_property_form
@ -3367,7 +3374,7 @@ msgstr "Suecia"
#. module: base
#: field:ir.actions.report.xml,report_file:0
msgid "Report File"
msgstr ""
msgstr "Archivo de reporte"
#. module: base
#: selection:ir.actions.act_window.view,view_mode:0
@ -3400,7 +3407,7 @@ msgstr ""
#: code:addons/orm.py:3870
#, python-format
msgid "Missing document(s)"
msgstr ""
msgstr "Documento faltante"
#. module: base
#: model:ir.model,name:base.model_res_partner_bank_type
@ -3465,7 +3472,7 @@ msgstr "Calendario"
#. module: base
#: model:ir.module.category,name:base.module_category_knowledge_management
msgid "Knowledge"
msgstr ""
msgstr "Gestión de Conocimiento"
#. module: base
#: field:workflow.activity,signal_send:0
@ -3608,7 +3615,7 @@ msgstr "workflow.actividad"
#. module: base
#: view:base.language.export:0
msgid "Export Complete"
msgstr ""
msgstr "Exportación completa"
#. module: base
#: help:ir.ui.view_sc,res_id:0
@ -3637,7 +3644,7 @@ msgstr "Finlandes"
#. module: base
#: view:ir.config_parameter:0
msgid "System Properties"
msgstr ""
msgstr "Propiedades del sistema"
#. module: base
#: field:ir.sequence,prefix:0
@ -3681,12 +3688,12 @@ msgstr "Seleccione el Paquete del Módulo de Importación (Archivo zip.):"
#. module: base
#: view:ir.filters:0
msgid "Personal"
msgstr ""
msgstr "Personal"
#. module: base
#: field:base.language.export,modules:0
msgid "Modules To Export"
msgstr ""
msgstr "Módulos a exportar"
#. module: base
#: model:res.country,name:base.mt
@ -3699,6 +3706,8 @@ msgstr "Malta"
msgid ""
"Only users with the following access level are currently allowed to do that"
msgstr ""
"Sólo los usuarios con los siguientes niveles de acceso están permitidos a "
"hacer eso"
#. module: base
#: field:ir.actions.server,fields_lines:0
@ -3789,7 +3798,7 @@ msgstr "Antártida"
#. module: base
#: view:res.partner:0
msgid "Persons"
msgstr ""
msgstr "Personas"
#. module: base
#: view:base.language.import:0
@ -3849,7 +3858,7 @@ msgstr "Interacción entre reglas"
#: field:res.company,rml_footer:0
#: field:res.company,rml_footer_readonly:0
msgid "Report Footer"
msgstr ""
msgstr "Píe de Página de Reporte"
#. module: base
#: selection:res.lang,direction:0
@ -3950,7 +3959,7 @@ msgstr "Togo"
#: field:ir.actions.act_window,res_model:0
#: field:ir.actions.client,res_model:0
msgid "Destination Model"
msgstr ""
msgstr "Modelo destino"
#. module: base
#: selection:ir.sequence,implementation:0
@ -3974,7 +3983,7 @@ msgstr "Tayiko / اردو"
#: code:addons/orm.py:3901
#, python-format
msgid "Access Denied"
msgstr ""
msgstr "Acceso Denegado"
#. module: base
#: field:res.company,name:0
@ -4084,7 +4093,7 @@ msgstr "%x - Representación apropiada de fecha."
#. module: base
#: view:res.partner:0
msgid "Tag"
msgstr ""
msgstr "Tag"
#. module: base
#: view:res.lang:0
@ -4135,7 +4144,7 @@ msgstr "Nauru"
#: code:addons/base/res/res_company.py:166
#, python-format
msgid "Reg"
msgstr ""
msgstr "Reg"
#. module: base
#: model:ir.model,name:base.model_ir_property
@ -4299,7 +4308,7 @@ msgstr "S.L."
#. module: base
#: model:ir.actions.server,name:base.action_run_ir_action_todo
msgid "Run Remaining Action Todo"
msgstr ""
msgstr "Correr acciones pendientes"
#. module: base
#: field:res.partner,ean13:0
@ -4396,7 +4405,7 @@ msgstr "Plan de Cuentas"
#. module: base
#: model:ir.ui.menu,name:base.menu_event_main
msgid "Events Organization"
msgstr ""
msgstr "Organización de Eventos"
#. module: base
#: model:ir.actions.act_window,name:base.action_partner_customer_form
@ -4424,7 +4433,7 @@ msgstr "Campo base"
#. module: base
#: model:ir.module.category,name:base.module_category_managing_vehicles_and_contracts
msgid "Managing vehicles and contracts"
msgstr ""
msgstr "Gestión de Vehículos y contratos"
#. module: base
#: model:ir.module.module,description:base.module_base_setup
@ -4540,12 +4549,12 @@ msgstr ""
#. module: base
#: model:ir.module.module,summary:base.module_sale
msgid "Quotations, Sales Orders, Invoicing"
msgstr ""
msgstr "Cotizaciones, Ordenes de Venta, Facturación"
#. module: base
#: field:res.partner,parent_id:0
msgid "Related Company"
msgstr ""
msgstr "Compañía Relacionada"
#. module: base
#: help:ir.actions.act_url,help:0
@ -4591,7 +4600,7 @@ msgstr "'código' debe ser único"
#. module: base
#: model:ir.module.module,shortdesc:base.module_knowledge
msgid "Knowledge Management System"
msgstr ""
msgstr "Gestión del Conocimiento"
#. module: base
#: view:workflow.activity:0
@ -4687,12 +4696,12 @@ msgstr "Hindi / हिंदी"
#: model:ir.actions.act_window,name:base.action_view_base_language_install
#: model:ir.ui.menu,name:base.menu_view_base_language_install
msgid "Load a Translation"
msgstr ""
msgstr "Cargar Traducción"
#. module: base
#: field:ir.module.module,latest_version:0
msgid "Installed Version"
msgstr ""
msgstr "Versión Instalada"
#. module: base
#: model:ir.module.module,description:base.module_account_test
@ -4806,7 +4815,7 @@ msgstr "Vista"
#: code:addons/base/ir/ir_fields.py:146
#, python-format
msgid "no"
msgstr ""
msgstr "no"
#. module: base
#: model:ir.module.module,description:base.module_crm_partner_assign
@ -4840,7 +4849,7 @@ msgstr "Guinea ecuatorial"
#. module: base
#: model:ir.module.module,shortdesc:base.module_web_api
msgid "OpenERP Web API"
msgstr ""
msgstr "Web API OpenERP"
#. module: base
#: model:ir.module.module,description:base.module_l10n_fr_rib
@ -5047,7 +5056,7 @@ msgstr "Flujos"
#. module: base
#: model:ir.ui.menu,name:base.next_id_73
msgid "Purchase"
msgstr ""
msgstr "Compra"
#. module: base
#: selection:base.language.install,lang:0
@ -5062,12 +5071,12 @@ msgstr ""
#. module: base
#: view:base.language.export:0
msgid "This file was generated using the universal"
msgstr ""
msgstr "Este archivo fue generado usando el universal"
#. module: base
#: model:res.partner.category,name:base.res_partner_category_7
msgid "IT Services"
msgstr ""
msgstr "Servicios de TI"
#. module: base
#: model:ir.module.category,name:base.module_category_specific_industry_applications
@ -5077,7 +5086,7 @@ msgstr "Aplicaciones para Industrias Específicas"
#. module: base
#: model:ir.module.module,shortdesc:base.module_google_docs
msgid "Google Docs integration"
msgstr ""
msgstr "Integración con Google Docs"
#. module: base
#: help:ir.attachment,res_model:0
@ -5088,7 +5097,7 @@ msgstr ""
#: code:addons/base/ir/ir_fields.py:327
#, python-format
msgid "name"
msgstr ""
msgstr "nombre"
#. module: base
#: model:ir.module.module,description:base.module_mrp_operations
@ -5134,7 +5143,7 @@ msgstr "Saltar"
#. module: base
#: model:ir.module.module,shortdesc:base.module_event_sale
msgid "Events Sales"
msgstr ""
msgstr "Eventos de Ventas"
#. module: base
#: model:res.country,name:base.ls
@ -5144,7 +5153,7 @@ msgstr "Lesotho"
#. module: base
#: view:base.language.export:0
msgid ", or your preferred text editor"
msgstr ""
msgstr ", o tu editor de texto preferido"
#. module: base
#: model:ir.module.module,shortdesc:base.module_crm_partner_assign
@ -5186,7 +5195,7 @@ msgstr "Genérico"
#. module: base
#: model:ir.module.module,shortdesc:base.module_document_ftp
msgid "Shared Repositories (FTP)"
msgstr ""
msgstr "Appraisals, Surveys\""
#. module: base
#: model:res.country,name:base.sm
@ -5211,12 +5220,12 @@ msgstr "Establecer a NULL"
#. module: base
#: view:res.users:0
msgid "Save"
msgstr ""
msgstr "Appraisals, Surveys\""
#. module: base
#: field:ir.actions.report.xml,report_xml:0
msgid "XML Path"
msgstr ""
msgstr "Path XML"
#. module: base
#: model:res.country,name:base.bj
@ -5404,7 +5413,7 @@ msgstr "Tasas"
#. module: base
#: model:ir.module.module,shortdesc:base.module_email_template
msgid "Email Templates"
msgstr ""
msgstr "Plantillas de Correo"
#. module: base
#: model:res.country,name:base.sy

View File

@ -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: 2013-01-19 05:22+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:52+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
@ -673,7 +673,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_mx
msgid "Mexico - Accounting"
msgstr ""
msgstr "México - Contabilidad"
#. module: base
#: help:ir.actions.server,action_id:0
@ -8634,7 +8634,7 @@ msgstr ""
#. module: base
#: model:res.country,name:base.mx
msgid "Mexico"
msgstr ""
msgstr "México"
#. module: base
#: code:addons/orm.py:3902

View File

@ -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: 2013-01-19 05:20+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:51+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:14+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:45+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:13+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:44+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:17+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:48+0000\n"
"X-Generator: Launchpad (build 16477)\n"
"X-Poedit-Country: IRAN, ISLAMIC REPUBLIC OF\n"
"X-Poedit-Language: Persian\n"

View File

@ -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: 2013-01-19 05:22+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:53+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:14+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:45+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:14+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:45+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:15+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:45+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:15+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:46+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:15+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:46+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:15+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:46+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

File diff suppressed because it is too large Load Diff

View File

@ -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: 2013-01-19 05:15+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:46+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
@ -2774,15 +2774,15 @@ msgstr ""
"szolgáltatás (belépés/Kilépés) és munka kódolás (időkimutatás) szervezését. "
"Időkimutatás bevitelét minden nap a munkások biztosítják. Egy meghatározott "
"periódus végén, a munkavállalók érvényesítik az időkimutatásukat és a "
"vezetőjüknek kell nyugtáznia a csoport beírásait. A periódusok a vállalkozás "
"osztályaihoz lesznek meghatározva és beállíthatóak havi vagy heti "
"futtatásra.\n"
"vezetőjüknek kell jóváhagynia a csoport beírásait. A periódusok a "
"vállalkozás osztályaihoz lesznek meghatározva és beállíthatóak havi vagy "
"heti futtatásra.\n"
"\n"
"A teljes időkimutatás érvényesítési folyamat a következő:\n"
"---------------------------------------------\n"
"* Terve lap\n"
"* Munkavállalók érvényesítései a periódus végén\n"
"* A projekt vezető nyugtázása\n"
"* A projekt vezető jóváhagyása\n"
"\n"
"A nyugtázást a vállalatnál be lehet állítani:\n"
"------------------------------------------------\n"
@ -4107,18 +4107,18 @@ msgstr ""
"\n"
"Ez az alkalmazás lehetővé teszi a munkavállalók napi kiadásainak kezelését. "
"Hozzáférést biztosít a munkavállalók kiadás jegyzékéhez valamint joga van "
"kiegészíteni és érvényesíteni illetve elutasítani azokat. Érvényesítés után "
"kiegészíteni és jóváhagyni illetve elutasítani azokat. Érvényesítés után "
"számlát állít ki a munkavállaló részére.\n"
"A munkavállalók beiktathatják a kiadásaikat amit az érvényesítés után a "
"könyveléshez iktathat az érvényesítésre jogosultak.\n"
"A munkavállalók beiktathatják a kiadásaikat amit a jóváhagyás után a "
"könyveléshez iktathat a jóváhagyásra jogosultak.\n"
"\n"
"\n"
"A következő iktatási folyamat van beépítve:\n"
"---------------------------------\n"
"* Tervezett kiadás\n"
"* A munkavállalók által jóváhagyott jegyzetek\n"
"* Az osztályvezető általi érvényesítés\n"
"* A könyvelő általi érvényesítés és nyugta kiadás\n"
"* Az osztályvezető általi jóváhagyás\n"
"* A könyvelő általi jóváhagyás és nyugta kiadás\n"
"\n"
"Ez a modul az könyvelés elemzőt is használja és kompatibilis a számlázó és "
"az időkimutatás modullal, így automatikus ügyfél kiadás újra-számlázást is "
@ -7584,7 +7584,7 @@ msgid ""
msgstr ""
"Ha a műveleti átmenet a kliens űrlapon található gomb megnyomásával "
"történik, a jelző ellenőrzi a megnyomott gomb nevét. Ha a jel NULLA, nem "
"szükséges gomb az átmenet érvényesítéséhez."
"szükséges gomb az átmenet jóváhagyásához."
#. module: base
#: field:ir.ui.view.custom,ref_id:0
@ -10067,7 +10067,7 @@ msgstr ""
"Ha a számlának ez a sora érvényesítve lesz, ez generálni fog 3 elemző sort, "
"egy könyvelési bejegyzéshez.\n"
"\n"
"Az elemzési terv érvényesíti a minimum és maximum százalékot a megoszlási "
"Az elemzési terv jóváhagyja a minimum és maximum százalékot a megoszlási "
"modell létrehozásakor.\n"
" "
@ -13383,7 +13383,7 @@ msgstr "Probléma a 'Rekord Azonosító' beállításánál a Szerver müveletbe
#: code:addons/orm.py:2816
#, python-format
msgid "ValidateError"
msgstr "ValidateError"
msgstr "Jóváhagyásihiba"
#. module: base
#: view:base.module.import:0
@ -13714,7 +13714,7 @@ msgstr "Normál"
#. module: base
#: model:ir.module.module,shortdesc:base.module_purchase_double_validation
msgid "Double Validation on Purchases"
msgstr "A vásárlásokra kétszeres érvényesítés"
msgstr "A vásárlásokra kétszeres jóváhagyás"
#. module: base
#: field:res.bank,street2:0
@ -14414,11 +14414,11 @@ msgstr ""
"\n"
"A jelentésnek van felelőse és különböző állapot színekből alakul ki:\n"
"-----------------------------------------------------------------\n"
" * terv, nyitott, megszakított, végrehajtott.\n"
" * terv, nyitott, visszavont, végrehajtott.\n"
"\n"
"Kötegelt végrehajtások egy különálló jelentésen kezelhetők az összes eladás "
"egyszeri\n"
"visszaigazolására, érvényesítésére vagy számla csomagra.\n"
"visszaigazolására, jóváhagyásra vagy számla csomagra.\n"
"\n"
"Támogatja a kötegelt számlázási módot mely beállítható partnerekre és "
"megrendelésekre, például:\n"
@ -16039,7 +16039,7 @@ msgstr ""
"=========================================================\n"
"\n"
"Ez a modul módosítja a vásárlás munkafolyamatot úgy, hogy a varázslóval "
"beállított minimum mennyiséget elért vásárlás után érvényesíteni kell a "
"beállított minimum mennyiséget elért vásárlás után jóvá kell hagyni a "
"vásárlást\n"
" "

View File

@ -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: 2013-01-19 05:13+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:43+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:16+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:46+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:16+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:46+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:16+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:47+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
@ -8258,7 +8258,7 @@ msgstr "Numero successivo di questa sequenza"
#. module: base
#: view:res.partner:0
msgid "at"
msgstr "alle"
msgstr "di"
#. module: base
#: view:ir.rule:0

View File

@ -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: 2013-01-19 05:16+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:47+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:14+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:45+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:16+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:47+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:16+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:47+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
@ -137,7 +137,7 @@ msgstr ""
#. module: base
#: help:res.partner,employee:0
msgid "Check this box if this contact is an Employee."
msgstr ""
msgstr "이 연락처가 직원인 경우 체크하세요."
#. module: base
#: help:ir.model.fields,domain:0
@ -165,7 +165,7 @@ msgstr "타겟 윈도우"
#. module: base
#: field:ir.actions.report.xml,report_rml:0
msgid "Main Report File Path"
msgstr ""
msgstr "주 보고서 파일 경로"
#. module: base
#: model:ir.module.module,shortdesc:base.module_sale_analytic_plans
@ -234,7 +234,7 @@ msgstr "생성됨."
#. module: base
#: field:ir.actions.report.xml,report_xsl:0
msgid "XSL Path"
msgstr ""
msgstr "XSL 경로"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_tr
@ -260,7 +260,7 @@ msgstr "이뉴잇"
#. module: base
#: model:res.groups,name:base.group_multi_currency
msgid "Multi Currencies"
msgstr ""
msgstr "다중 화폐"
#. module: base
#: model:ir.module.module,description:base.module_l10n_cl
@ -354,7 +354,7 @@ msgstr ""
#. module: base
#: model:ir.module.category,name:base.module_category_customer_relationship_management
msgid "Customer Relationship Management"
msgstr ""
msgstr "고객 관계 관리"
#. module: base
#: model:ir.module.module,description:base.module_delivery
@ -386,7 +386,7 @@ msgstr "잘못된 group_by"
#. module: base
#: field:ir.module.category,child_ids:0
msgid "Child Applications"
msgstr ""
msgstr "하위 어플리케이션"
#. module: base
#: field:res.partner,credit_limit:0
@ -470,7 +470,7 @@ msgstr ""
#. module: base
#: view:ir.rule:0
msgid "Create Access Right"
msgstr ""
msgstr "접근 권한 생성"
#. module: base
#: model:res.country,name:base.tv
@ -490,7 +490,7 @@ msgstr "날짜 포맷"
#. module: base
#: model:ir.module.module,shortdesc:base.module_base_report_designer
msgid "OpenOffice Report Designer"
msgstr ""
msgstr "오픈오피스 보고서 디자이너"
#. module: base
#: model:res.country,name:base.an
@ -539,7 +539,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_idea
msgid "Ideas"
msgstr ""
msgstr "아이디어"
#. module: base
#: model:ir.module.module,description:base.module_event
@ -600,7 +600,7 @@ msgstr "스페인어"
#. module: base
#: model:ir.module.module,shortdesc:base.module_hr_timesheet_invoice
msgid "Invoice on Timesheets"
msgstr ""
msgstr "타임시트 상의 인보이스"
#. module: base
#: view:base.module.upgrade:0
@ -691,7 +691,7 @@ msgstr "키는 유일해야 한다."
#. module: base
#: model:ir.module.module,shortdesc:base.module_plugin_outlook
msgid "Outlook Plug-In"
msgstr ""
msgstr "아웃룩 플러그인"
#. module: base
#: model:ir.module.module,description:base.module_account
@ -829,12 +829,12 @@ msgstr ""
#. module: base
#: view:ir.mail_server:0
msgid "Security and Authentication"
msgstr ""
msgstr "보안 및 인증"
#. module: base
#: model:ir.module.module,shortdesc:base.module_web_calendar
msgid "Web Calendar"
msgstr ""
msgstr "웹 캘린더"
#. module: base
#: selection:base.language.install,lang:0
@ -845,7 +845,7 @@ msgstr "스웨덴"
#: field:base.language.export,name:0
#: field:ir.attachment,datas_fname:0
msgid "File Name"
msgstr ""
msgstr "파일 이름"
#. module: base
#: model:res.country,name:base.rs
@ -925,12 +925,12 @@ msgstr "보고서 유형, 예: pdf, html, raw, sxw, odt, html2html, mako2html, .
#. module: base
#: model:ir.module.module,shortdesc:base.module_document_webdav
msgid "Shared Repositories (WebDAV)"
msgstr ""
msgstr "공유 저장소(WebDAV)"
#. module: base
#: view:res.users:0
msgid "Email Preferences"
msgstr ""
msgstr "이메일 설정"
#. module: base
#: code:addons/base/ir/ir_fields.py:195
@ -1047,7 +1047,7 @@ msgstr "번호 유형을 요청"
#. module: base
#: model:ir.module.module,shortdesc:base.module_google_base_account
msgid "Google Users"
msgstr ""
msgstr "구글 사용자"
#. module: base
#: model:ir.module.module,shortdesc:base.module_fleet
@ -1077,7 +1077,7 @@ msgstr ""
#. module: base
#: model:res.country,name:base.mn
msgid "Mongolia"
msgstr ""
msgstr "몽고"
#. module: base
#: model:ir.module.module,description:base.module_crm
@ -1134,7 +1134,7 @@ msgstr ""
#. module: base
#: view:res.users:0
msgid "Change the user password."
msgstr ""
msgstr "사용자 암호 변경"
#. module: base
#: view:res.lang:0
@ -1159,7 +1159,7 @@ msgstr "타입"
#. module: base
#: field:ir.mail_server,smtp_user:0
msgid "Username"
msgstr ""
msgstr "사용자명"
#. module: base
#: model:ir.module.module,description:base.module_l10n_br
@ -1226,23 +1226,23 @@ msgstr "괌"
#. module: base
#: sql_constraint:res.country:0
msgid "The name of the country must be unique !"
msgstr ""
msgstr "국가명은 유일해야 합니다!"
#. module: base
#: field:ir.module.module,installed_version:0
msgid "Latest Version"
msgstr ""
msgstr "최신 버전"
#. module: base
#: view:ir.rule:0
msgid "Delete Access Right"
msgstr ""
msgstr "접근 권한 삭제"
#. module: base
#: code:addons/base/ir/ir_mail_server.py:212
#, python-format
msgid "Connection test failed!"
msgstr ""
msgstr "연결 테스트에 실패했습니다!"
#. module: base
#: selection:ir.actions.server,state:0
@ -1299,12 +1299,12 @@ msgstr "Char"
#. module: base
#: field:ir.module.category,visible:0
msgid "Visible"
msgstr ""
msgstr "보이기"
#. module: base
#: model:ir.actions.client,name:base.action_client_base_menu
msgid "Open Settings Menu"
msgstr ""
msgstr "설정 메뉴 열기"
#. module: base
#: selection:base.language.install,lang:0
@ -1349,7 +1349,7 @@ msgstr "스페인"
#. module: base
#: field:ir.mail_server,smtp_port:0
msgid "SMTP Port"
msgstr ""
msgstr "SMTP 포트"
#. module: base
#: help:res.users,login:0
@ -1364,6 +1364,8 @@ msgid ""
" for uploading to OpenERP's translation "
"platform,"
msgstr ""
"TGZ 파일 형식: PO파일을 포함한 압축파일로,\n"
" OpenERP의 번역 플랫폼에 올리기 적합한 형식입니다."
#. module: base
#: view:res.lang:0
@ -1379,12 +1381,12 @@ msgstr ""
#: code:addons/base/module/wizard/base_language_install.py:53
#, python-format
msgid "Language Pack"
msgstr ""
msgstr "언어 팩"
#. module: base
#: model:ir.module.module,shortdesc:base.module_web_tests
msgid "Tests"
msgstr ""
msgstr "테스트"
#. module: base
#: field:ir.actions.report.xml,attachment:0
@ -1450,7 +1452,7 @@ msgstr ""
#. module: base
#: field:ir.module.category,parent_id:0
msgid "Parent Application"
msgstr ""
msgstr "부모 어플리케이션"
#. module: base
#: model:ir.actions.act_window,name:base.ir_action_wizard
@ -1468,7 +1470,7 @@ msgstr "오퍼레이션 취소"
#. module: base
#: model:ir.module.module,shortdesc:base.module_document
msgid "Document Management System"
msgstr ""
msgstr "문서 관리 시스템"
#. module: base
#: model:ir.module.module,shortdesc:base.module_crm_claim
@ -1562,6 +1564,8 @@ msgid ""
"use the accounting application of OpenERP, journals and accounts will be "
"created automatically based on these data."
msgstr ""
"회사 은행계좌를 설정하고 바닥글에 표시할 계좌를 선택하십시오. 은행 계좌는 목록 보기에서 순서를 변경할 수 있습니다. 만약 "
"OpenERP의 회계 모듈을 사용하는 경우, 이 자료를 기본으로 분개장 및 계정항목이 자동으로 생성됩니다."
#. module: base
#: report:ir.module.reference:0
@ -1609,7 +1613,7 @@ msgstr "코드 \"%s\"를 가진 언어가 존재하지 않습니다."
#: model:ir.module.category,name:base.module_category_social_network
#: model:ir.module.module,shortdesc:base.module_mail
msgid "Social Network"
msgstr ""
msgstr "소셜 네트워크"
#. module: base
#: view:res.lang:0
@ -1619,12 +1623,12 @@ msgstr "%Y - 년도"
#. module: base
#: view:res.company:0
msgid "Report Footer Configuration"
msgstr ""
msgstr "보고서 바닥글 설정"
#. module: base
#: field:ir.translation,comments:0
msgid "Translation comments"
msgstr ""
msgstr "번역 주석"
#. module: base
#: model:ir.module.module,description:base.module_lunch
@ -1744,7 +1748,7 @@ msgstr ""
#. module: base
#: model:ir.ui.menu,name:base.menu_tools
msgid "Tools"
msgstr ""
msgstr "도구"
#. module: base
#: selection:ir.property,type:0
@ -1763,12 +1767,12 @@ msgstr ""
#. module: base
#: field:res.partner,image_small:0
msgid "Small-sized image"
msgstr ""
msgstr "작은 크기의 사진"
#. module: base
#: model:ir.module.module,shortdesc:base.module_stock
msgid "Warehouse Management"
msgstr ""
msgstr "창고 관리"
#. module: base
#: model:ir.model,name:base.model_res_request_link
@ -1808,7 +1812,7 @@ msgstr "동티모르"
#: view:ir.module.module:0
#, python-format
msgid "Install"
msgstr ""
msgstr "설치"
#. module: base
#: field:res.currency,accuracy:0
@ -1867,7 +1871,7 @@ msgstr ""
#. module: base
#: model:res.country,name:base.nl
msgid "Netherlands"
msgstr ""
msgstr "네덜란드"
#. module: base
#: model:ir.module.module,shortdesc:base.module_portal_event
@ -1877,7 +1881,7 @@ msgstr ""
#. module: base
#: selection:ir.translation,state:0
msgid "Translation in Progress"
msgstr ""
msgstr "번역 진행 중"
#. module: base
#: model:ir.model,name:base.model_ir_rule
@ -1929,7 +1933,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_process
msgid "Enterprise Process"
msgstr ""
msgstr "엔터프라이즈 프로세스"
#. module: base
#: help:res.partner,supplier:0
@ -1941,7 +1945,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_hr_evaluation
msgid "Employee Appraisals"
msgstr ""
msgstr "직원 평가"
#. module: base
#: selection:ir.actions.server,state:0
@ -1984,12 +1988,12 @@ msgstr ""
#: code:addons/base/ir/ir_model.py:318
#, python-format
msgid "This column contains module data and cannot be removed!"
msgstr ""
msgstr "이 컬럼은 모듈 데이터를 포함하고 있으며 삭제할 수 없습니다."
#. module: base
#: field:res.partner.bank,footer:0
msgid "Display on Reports"
msgstr ""
msgstr "보고서에 표시"
#. module: base
#: model:ir.module.module,description:base.module_project_timesheet
@ -2032,7 +2036,7 @@ msgstr "소스 활동"
#. module: base
#: view:ir.sequence:0
msgid "Legend (for prefix, suffix)"
msgstr ""
msgstr "범례(접두사, 접미사)"
#. module: base
#: selection:ir.server.object.lines,type:0
@ -2106,6 +2110,23 @@ msgid ""
"* *Before Delivery*: A Draft invoice is created and must be paid before "
"delivery\n"
msgstr ""
"\n"
"매출 견적 및 주문 관리\n"
"==================================\n"
"\n"
"이 모듈은 매출과 창고 관리 어플리케이션과 연계됩니다.\n"
"\n"
"설정\n"
"-----------\n"
"* 선적: 일괄 배송, 분할 배송 선택\n"
"* 송장청구: 송장금액 결제 방법 선택\n"
"* 무역조건: 국제 무역조건\n"
"\n"
"다양한 송장청구 방법 선택 가능:\n"
"\n"
"* *요구 시*: 매출 주문 후 필요 시 송장 발행\n"
"* *배송 주문 시*: 화물 수령(배송)시 송장 발행\n"
"* *배송 전*: 송장 초안이 작성되어 배송 전 결제\n"
#. module: base
#: field:ir.ui.menu,complete_name:0
@ -2115,7 +2136,7 @@ msgstr "전체 경로"
#. module: base
#: view:base.language.export:0
msgid "The next step depends on the file format:"
msgstr ""
msgstr "파일 형식에 따라 다음 단계 결정"
#. module: base
#: view:res.lang:0
@ -2130,13 +2151,13 @@ msgstr ""
#. module: base
#: view:base.language.export:0
msgid "PO(T) format: you should edit it with a PO editor such as"
msgstr ""
msgstr "PO(T) 파일 형식 : 다음과 같은 PO 편집기로 편집해야 합니다."
#. module: base
#: model:ir.ui.menu,name:base.menu_administration
#: model:res.groups,name:base.group_system
msgid "Settings"
msgstr ""
msgstr "설정"
#. module: base
#: selection:ir.actions.act_window,view_type:0
@ -2166,7 +2187,7 @@ msgstr "보기 모드"
msgid ""
"Display this bank account on the footer of printed documents like invoices "
"and sales orders."
msgstr ""
msgstr "이 은행 계좌는 송장이나 매출 주문서와 같은 출력 서류의 바닥글에 표시됩니다."
#. module: base
#: selection:base.language.install,lang:0
@ -2181,7 +2202,7 @@ msgstr ""
#. module: base
#: model:res.country,name:base.ax
msgid "Åland Islands"
msgstr ""
msgstr "올란드 제도"
#. module: base
#: field:res.company,logo:0
@ -2222,7 +2243,7 @@ msgstr ""
#. module: base
#: model:ir.module.category,name:base.module_category_tools
msgid "Extra Tools"
msgstr ""
msgstr "기타 도구"
#. module: base
#: view:ir.attachment:0
@ -2239,7 +2260,7 @@ msgstr "아일랜드"
msgid ""
"Appears by default on the top right corner of your printed documents (report "
"header)."
msgstr ""
msgstr "출력 문서의 우측 상단에 기본으로 출력됩니다. (보고서 머릿글)"
#. module: base
#: field:base.module.update,update:0
@ -2254,7 +2275,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_auth_crypt
msgid "Password Encryption"
msgstr ""
msgstr "비밀번호 암호화"
#. module: base
#: view:workflow.activity:0
@ -2298,7 +2319,7 @@ msgstr ""
#. module: base
#: field:change.password.user,new_passwd:0
msgid "New Password"
msgstr ""
msgstr "새 비밀번호"
#. module: base
#: model:ir.actions.act_window,help:base.action_ui_view
@ -2312,7 +2333,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_base_setup
msgid "Initial Setup Tools"
msgstr ""
msgstr "초기 설정 도구"
#. module: base
#: field:ir.actions.act_window,groups_id:0
@ -2443,7 +2464,7 @@ msgstr ""
#. module: base
#: field:ir.mail_server,smtp_debug:0
msgid "Debugging"
msgstr ""
msgstr "디버깅"
#. module: base
#: model:ir.module.module,description:base.module_crm_helpdesk
@ -2465,7 +2486,7 @@ msgstr ""
msgid ""
"View type: Tree type to use for the tree view, set to 'tree' for a "
"hierarchical tree view, or 'form' for a regular list view"
msgstr ""
msgstr "표시 형식: 'tree'로 계층구조의 트리 뷰를 표시하거나 'form'으로 일반적인 목록을 표시"
#. module: base
#: sql_constraint:ir.ui.view_sc:0
@ -2555,7 +2576,7 @@ msgstr "오브젝트 이름은 x_로 시작해야 하며, 특수 문자를 포
#. module: base
#: model:ir.module.module,shortdesc:base.module_auth_oauth_signup
msgid "Signup with OAuth2 Authentication"
msgstr ""
msgstr "OAuth2 인증으로 등록"
#. module: base
#: selection:ir.model,state:0
@ -2582,7 +2603,7 @@ msgstr "그리스"
#. module: base
#: field:res.company,custom_footer:0
msgid "Custom Footer"
msgstr ""
msgstr "바닥글 설정"
#. module: base
#: model:ir.module.module,shortdesc:base.module_sale_crm
@ -2633,7 +2654,7 @@ msgstr ""
#. module: base
#: model:ir.ui.menu,name:base.menu_invoiced
msgid "Invoicing"
msgstr ""
msgstr "송장 발행"
#. module: base
#: field:ir.ui.view_sc,name:0
@ -2721,7 +2742,7 @@ msgstr ""
#: field:ir.translation,res_id:0
#: field:ir.values,res_id:0
msgid "Record ID"
msgstr ""
msgstr "레코드 ID"
#. module: base
#: view:ir.filters:0
@ -2819,13 +2840,13 @@ msgstr ""
#: model:res.groups,name:base.group_sale_manager
#: model:res.groups,name:base.group_tool_manager
msgid "Manager"
msgstr ""
msgstr "관리자"
#. module: base
#: code:addons/base/ir/ir_model.py:719
#, python-format
msgid "Sorry, you are not allowed to access this document."
msgstr ""
msgstr "죄송합니다. 이 문서에 접근이 거부되었습니다."
#. module: base
#: model:res.country,name:base.py
@ -2835,7 +2856,7 @@ msgstr "파라과이"
#. module: base
#: model:res.country,name:base.fj
msgid "Fiji"
msgstr ""
msgstr "피지"
#. module: base
#: view:ir.actions.report.xml:0
@ -2911,7 +2932,7 @@ msgstr ""
#: code:addons/base/ir/ir_fields.py:146
#, python-format
msgid "yes"
msgstr ""
msgstr ""
#. module: base
#: field:ir.model.fields,serialization_field_id:0

View File

@ -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: 2013-01-19 05:17+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:47+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:17+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:47+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:17+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:48+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0.0-rc1\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
"PO-Revision-Date: 2012-12-18 05:45+0000\n"
"Last-Translator: gobi <Unknown>\n"
"PO-Revision-Date: 2013-02-07 04:04+0000\n"
"Last-Translator: Tenuun Khangaitan <tenuun.khangaitan@gmail.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-01-19 05:17+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-08 04:35+0000\n"
"X-Generator: Launchpad (build 16482)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
@ -5396,7 +5396,7 @@ msgstr ""
#: field:ir.model.relation,model:0
#: view:ir.values:0
msgid "Model"
msgstr "Загвар"
msgstr "Модел"
#. module: base
#: view:base.language.install:0
@ -7983,7 +7983,7 @@ msgstr ""
#. module: base
#: selection:res.currency,position:0
msgid "After Amount"
msgstr "Дараах Дүн"
msgstr "Дүнгийн ард"
#. module: base
#: selection:base.language.install,lang:0
@ -10680,7 +10680,7 @@ msgstr "дууссан"
#. module: base
#: view:ir.actions.act_window:0
msgid "General Settings"
msgstr "Ерөнхий тохируулга"
msgstr "Ерөнхий Тохиргоо"
#. module: base
#: model:ir.module.module,description:base.module_l10n_in
@ -12386,7 +12386,7 @@ msgstr ""
#. module: base
#: field:ir.attachment,res_model:0
msgid "Resource Model"
msgstr ""
msgstr "Нөөцийн модел"
#. module: base
#: code:addons/custom.py:555
@ -15179,7 +15179,7 @@ msgstr "Үндсэн компаниуд"
#. module: base
#: field:ir.translation,src:0
msgid "Source"
msgstr "Эх"
msgstr "Эх үүсвэр"
#. module: base
#: field:ir.model.constraint,date_init:0
@ -15354,7 +15354,7 @@ msgstr "Олон баримт дээрх үйлдэл"
#: model:ir.actions.act_window,name:base.action_partner_title_partner
#: model:ir.ui.menu,name:base.menu_partner_title_partner
msgid "Titles"
msgstr ""
msgstr "Гарчигууд"
#. module: base
#: model:ir.module.module,description:base.module_anonymization
@ -15824,7 +15824,7 @@ msgstr ""
#. module: base
#: field:ir.actions.act_window,src_model:0
msgid "Source Model"
msgstr ""
msgstr "Эх модел"
#. module: base
#: view:ir.sequence:0
@ -16879,7 +16879,7 @@ msgstr "Харилцагчид: "
#. module: base
#: view:res.partner:0
msgid "Is a Company?"
msgstr ""
msgstr "Компаний нэр"
#. module: base
#: code:addons/base/res/res_company.py:173

View File

@ -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: 2013-01-19 05:17+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:48+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

File diff suppressed because it is too large Load Diff

View File

@ -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: 2013-01-19 05:21+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:52+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:17+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:48+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
@ -4031,7 +4031,7 @@ msgstr ""
#. module: base
#: model:res.country,name:base.sk
msgid "Slovakia"
msgstr "Slovakia"
msgstr "Słowacja"
#. module: base
#: model:res.country,name:base.nr
@ -5474,7 +5474,7 @@ msgstr "Historia"
#. module: base
#: model:res.country,name:base.im
msgid "Isle of Man"
msgstr "Isle of Man"
msgstr "Wyspa Man"
#. module: base
#: help:ir.actions.client,res_model:0
@ -7353,7 +7353,7 @@ msgstr "Kontakty"
#. module: base
#: model:res.country,name:base.fo
msgid "Faroe Islands"
msgstr "Faroe Islands"
msgstr "Wyspy Owcze"
#. module: base
#: field:ir.mail_server,smtp_encryption:0
@ -11307,7 +11307,7 @@ msgstr "Użytkownik"
#. module: base
#: model:res.country,name:base.pr
msgid "Puerto Rico"
msgstr "Puerto Rico"
msgstr "Portoryko"
#. module: base
#: model:ir.module.module,shortdesc:base.module_web_tests_demo

View File

@ -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: 2013-01-19 05:18+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:48+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
@ -11110,7 +11110,7 @@ msgstr "Email"
#. module: base
#: model:res.partner.category,name:base.res_partner_category_12
msgid "Office Supplies"
msgstr ""
msgstr "Materiais de Escritórios"
#. module: base
#: field:ir.attachment,res_model:0

File diff suppressed because it is too large Load Diff

View File

@ -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: 2013-01-19 05:18+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:49+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
@ -489,7 +489,7 @@ msgstr "Obiect Sursa"
#. module: base
#: model:res.partner.bank.type,format_layout:base.bank_normal
msgid "%(bank_name)s: %(acc_number)s"
msgstr "%(nume_banca)s: %(numar_cont)s"
msgstr "%(bank_name)s: %(acc_number)s"
#. module: base
#: view:ir.actions.todo:0
@ -8921,7 +8921,7 @@ msgstr "Tip Camp"
#. module: base
#: field:res.country.state,code:0
msgid "State Code"
msgstr "Cod Stat"
msgstr "Cod judet"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_multilang
@ -13642,7 +13642,7 @@ msgstr "Campanii de Marketing"
#. module: base
#: field:res.country.state,name:0
msgid "State Name"
msgstr "Numele starii"
msgstr "Nume judet"
#. module: base
#: help:ir.attachment,type:0
@ -14386,7 +14386,7 @@ msgstr "Declanseaza Semnalul"
#: model:ir.actions.act_window,name:base.action_country_state
#: model:ir.ui.menu,name:base.menu_country_state_partner
msgid "Fed. States"
msgstr "State federale"
msgstr "Judete"
#. module: base
#: view:ir.model:0

View File

@ -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: 2013-01-25 05:24+0000\n"
"X-Generator: Launchpad (build 16445)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:49+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
@ -3969,7 +3969,7 @@ msgstr "Отчетность"
#: field:res.partner,title:0
#: field:res.partner.title,name:0
msgid "Title"
msgstr "Название"
msgstr "Обращение"
#. module: base
#: help:ir.property,res_id:0
@ -8275,8 +8275,7 @@ msgid ""
" </p>\n"
" "
msgstr ""
"<p class=\"oe_view_nocontent_create\">\n"
" Нажмите чтобы добавить контакт в вашу адресную книгу.\n"
"Нажмите чтобы добавить контакт в вашу адресную книгу.\n"
" </p><p>\n"
" OpenERP помогает вам легко отслеживать всю активность "
"связанную с\n"
@ -9746,7 +9745,7 @@ msgstr "сделано"
#. module: base
#: view:ir.actions.act_window:0
msgid "General Settings"
msgstr "Основные параметры"
msgstr "Общие настройки"
#. module: base
#: model:ir.module.module,description:base.module_l10n_in
@ -10335,6 +10334,14 @@ msgid ""
" </p>\n"
" "
msgstr ""
"Нажмите чтобы добавить контакт в вашу адресную книгу.\n"
" </p><p>\n"
" OpenERP помогает вам легко отслеживать всю активность "
"связанную с\n"
" поставщиком: общение, историю закупок, \n"
" документы и т.д.\n"
" </p>\n"
" "
#. module: base
#: model:res.country,name:base.lr
@ -15953,6 +15960,14 @@ msgid ""
" </p>\n"
" "
msgstr ""
"Нажмите чтобы добавить контакт в вашу адресную книгу.\n"
" </p><p>\n"
" OpenERP помогает вам легко отслеживать всю активность "
"связанную с\n"
" клиентом: общение, историю деловых возможностей, \n"
" документы и т.д.\n"
" </p>\n"
" "
#. module: base
#: model:res.partner.category,name:base.res_partner_category_2

View File

@ -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: 2013-01-19 05:18+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:49+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:19+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:49+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:12+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:43+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:18+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:49+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:22+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:53+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:19+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:50+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:19+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:50+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:19+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:50+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

File diff suppressed because it is too large Load Diff

View File

@ -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: 2013-01-19 05:20+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:50+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:20+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:50+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:20+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:51+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:21+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:52+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -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: 2013-01-19 05:20+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-02-07 04:51+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

File diff suppressed because it is too large Load Diff

View File

@ -28,6 +28,7 @@ import time
from openerp import SUPERUSER_ID
from openerp import netsvc, tools
from openerp.osv import fields, osv
import openerp.report.interface
from openerp.report.report_sxw import report_sxw, report_rml
from openerp.tools.config import config
from openerp.tools.safe_eval import safe_eval as eval
@ -93,9 +94,9 @@ class report_xml(osv.osv):
opj = os.path.join
cr.execute("SELECT * FROM ir_act_report_xml WHERE auto=%s ORDER BY id", (True,))
result = cr.dictfetchall()
svcs = netsvc.Service._services
reports = openerp.report.interface.report_int._reports
for r in result:
if svcs.has_key('report.'+r['report_name']):
if reports.has_key('report.'+r['report_name']):
continue
if r['report_rml'] or r['report_rml_content_data']:
report_sxw('report.'+r['report_name'], r['model'],

View File

@ -21,12 +21,15 @@
import hashlib
import itertools
import logging
import os
import re
from openerp import tools
from openerp.osv import fields,osv
_logger = logging.getLogger(__name__)
class ir_attachment(osv.osv):
"""Attachments are used to link binary files or url to any openerp document.

View File

@ -19,6 +19,7 @@
<field name="name"/>
<field name="user_id"/>
<field name="model_id"/>
<field name="is_default"/>
</group>
<group>
<field name="domain"/>
@ -35,6 +36,7 @@
<field name="name"/>
<field name="model_id"/>
<field name="user_id"/>
<field name="is_default"/>
<field name="domain" groups="base.group_no_one"/>
<field name="context" groups="base.group_no_one"/>
</tree>
@ -45,12 +47,14 @@
<field name="arch" type="xml">
<search string="Filters">
<field name="name" string="Filter Name"/>
<filter string="Personal" domain="[('user_id','!=',False)]" help="Filters visible only for one user"/>
<filter string="Shared" domain="[('user_id','=',False)]" help="Filters shared with all users"/>
<filter string="User" domain="[('user_id','!=',False)]" name="user" help="Filters visible only for one user"/>
<filter string="Shared" domain="[('user_id','=',False)]" name="shared" help="Filters shared with all users"/>
<filter string="My filters" domain="[('user_id','=',uid)]" name="my_filters" help="Filters created by myself"/>
<separator/>
<filter icon="terp-personal" domain="[('user_id','in',(uid, False))]"
name="my_filters"
string="My Filters"/>
<group expand="0" string="Group By...">
<filter string="User" domain="[]" context="{'group_by':'user_id'}"/>
<filter string="Model" domain="[]" context="{'group_by':'model_id'}"/>
</group>
<field name="model_id"/>
<field name="user_id"/>
</search>

View File

@ -1062,9 +1062,13 @@ class ir_model_data(osv.osv):
continue
_logger.info('Deleting %s@%s', res_id, model)
try:
cr.execute('SAVEPOINT record_unlink_save')
self.pool.get(model).unlink(cr, uid, [res_id], context=context)
except Exception:
_logger.info('Unable to delete %s@%s', res_id, model, exc_info=True)
cr.execute('ROLLBACK TO SAVEPOINT record_unlink_save')
else:
cr.execute('RELEASE SAVEPOINT record_unlink_save')
# Remove non-model records first, then model fields, and finish with models
unlink_if_refcount((model, res_id) for model, res_id in to_unlink

View File

@ -28,7 +28,7 @@ class osv_memory_autovacuum(openerp.osv.osv.osv_memory):
def power_on(self, cr, uid, context=None):
for model in self.pool.models.values():
if model.is_transient():
model._transient_vacuum(cr, uid)
model._transient_vacuum(cr, uid, force=True)
return True

View File

@ -2,7 +2,7 @@
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2012 OpenERP S.A. (<http://openerp.com>).
# Copyright (C) 2004-2013 OpenERP S.A. (<http://openerp.com>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@ -254,9 +254,9 @@ class module(osv.osv):
'website': fields.char("Website", size=256, readonly=True),
# attention: Incorrect field names !!
# installed_version refer the latest version (the one on disk)
# latest_version refer the installed version (the one in database)
# published_version refer the version available on the repository
# installed_version refers the latest version (the one on disk)
# latest_version refers the installed version (the one in database)
# published_version refers the version available on the repository
'installed_version': fields.function(_get_latest_version, string='Latest Version', type='char'),
'latest_version': fields.char('Installed Version', size=64, readonly=True),
'published_version': fields.char('Published Version', size=64, readonly=True),
@ -500,6 +500,7 @@ class module(osv.osv):
raise orm.except_orm(_('Error'), _("The `base` module cannot be uninstalled"))
dep_ids = self.downstream_dependencies(cr, uid, ids, context=context)
self.write(cr, uid, ids + dep_ids, {'state': 'to remove'})
openerp.modules.registry.RegistryManager.signal_registry_change(cr.dbname)
return dict(ACTION_DICT, name=_('Uninstall'))
def button_uninstall_cancel(self, cr, uid, ids, context=None):
@ -656,32 +657,38 @@ class module(osv.osv):
def install_from_urls(self, cr, uid, urls, context=None):
OPENERP = 'openerp'
tmp = tempfile.mkdtemp()
_logger.debug('Install from url: %r', urls)
try:
# 1. Download & unzip missing modules
for module_name, url in urls.items():
if not url:
continue # nothing to download, local version is already the last one
try:
_logger.info('Downloading module `%s` from OpenERP Apps', module_name)
content = urllib2.urlopen(url).read()
except Exception, e:
_logger.exception('ggr')
raise osv.except_osv('grrr', e)
except Exception:
_logger.exception('Failed to fetch module %s', module_name)
raise osv.except_osv(_('Module not found'),
_('The `%s` module appears to be unavailable at the moment, please try again later.') % module_name)
else:
zipfile.ZipFile(StringIO(content)).extractall(tmp)
assert os.path.isdir(os.path.join(tmp, module_name))
for module_name in urls:
if module_name == OPENERP:
continue # special case. handled below
# 2a. Copy/Replace module source in addons path
for module_name, url in urls.items():
if module_name == OPENERP or not url:
continue # OPENERP is special case, handled below, and no URL means local module
module_path = modules.get_module_path(module_name, downloaded=True, display_warning=False)
bck = backup(module_path, False)
_logger.info('Copy downloaded module `%s` to `%s`', module_name, module_path)
shutil.move(os.path.join(tmp, module_name), module_path)
if bck:
shutil.rmtree(bck)
# 2b. Copy/Replace server+base module source if downloaded
if urls.get(OPENERP, None):
# special case. it containt the server and the base module.
# special case. it contains the server and the base module.
# extract path is not the same
base_path = os.path.dirname(modules.get_module_path('base'))
# copy all modules in the SERVER/openerp/addons directory to the new "openerp" module (except base itself)
@ -693,15 +700,22 @@ class module(osv.osv):
# then replace the server by the new "base" module
server_dir = openerp.tools.config['root_path'] # XXX or dirname()
bck = backup(server_dir)
_logger.info('Copy downloaded module `openerp` to `%s`', server_dir)
shutil.move(os.path.join(tmp, OPENERP), server_dir)
#if bck:
# shutil.rmtree(bck)
self.update_list(cr, uid, context=context)
ids = self.search(cr, uid, [('name', 'in', urls.keys())], context=context)
if self.search_count(cr, uid, [('id', 'in', ids), ('state', '=', 'installed')], context=context):
# if any to update
with_urls = [m for m, u in urls.items() if u]
downloaded_ids = self.search(cr, uid, [('name', 'in', with_urls)], context=context)
already_installed = self.search(cr, uid, [('id', 'in', downloaded_ids), ('state', '=', 'installed')], context=context)
to_install_ids = self.search(cr, uid, [('name', 'in', urls.keys()), ('state', '=', 'uninstalled')], context=context)
post_install_action = self.button_immediate_install(cr, uid, to_install_ids, context=context)
if already_installed:
# in this case, force server restart to reload python code...
cr.commit()
openerp.service.restart_server()
return {
@ -709,7 +723,7 @@ class module(osv.osv):
'tag': 'home',
'params': {'wait': True},
}
return self.button_immediate_install(cr, uid, ids, context=context)
return post_install_action
finally:
shutil.rmtree(tmp)

View File

@ -171,23 +171,18 @@
</field>
</record>
<record id="open_module_tree" model="ir.actions.act_window">
<!-- uncomment on released
<field name="name">Installed Modules</field>
-->
<field name="name">Modules</field>
<field name="res_model">ir.module.module</field>
<field name="view_type">form</field>
<field name="view_mode">kanban,tree,form</field>
<!-- uncomment on released
<field name="context">{'search_default_installed':1}</field>
-->
<field name="search_view_id" ref="view_module_filter"/>
<field name="help" type="html">
<p><b>No module found!</b></p>
<p>You should try others search criteria.</p>
</field>
</record>
<menuitem id="menu_module_tree" parent="menu_management" name="Installed Modules" sequence="10" action="open_module_tree"/>
<menuitem id="menu_module_tree" parent="menu_management" name="Installed Modules" sequence="30" action="open_module_tree" />
<!-- Apps modules -->
@ -195,20 +190,14 @@
<field name="name">Apps</field>
<field name="tag">apps</field>
</record>
<!-- uncomment on released
<menuitem id="module_mi" parent="base.menu_management" sequence="3" action="modules_act_cl"/>
-->
<menuitem id="module_mi" parent="base.menu_management" sequence="20" action="modules_act_cl"/>
<menuitem id="module_mi" parent="base.menu_management" sequence="10" action="modules_act_cl"/>
<record model="ir.actions.client" id="modules_updates_act_cl">
<field name="name">Updates</field>
<field name="tag">apps.updates</field>
<field name="params">{}</field>
</record>
<!-- uncomment on released
<menuitem id="menu_module_updates" parent="base.menu_management" sequence="7" action="modules_updates_act_cl"/>
-->
<menuitem id="menu_module_updates" parent="base.menu_management" sequence="30" action="modules_updates_act_cl"/>
<menuitem id="menu_module_updates" parent="base.menu_management" sequence="20" action="modules_updates_act_cl"/>
</data>
</openerp>

View File

@ -1,74 +0,0 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import os
import glob
import imp
import zipfile
from openerp import tools
from openerp.osv import osv
class base_module_scan(osv.osv_memory):
""" scan module """
_name = "base.module.scan"
_description = "scan module"
def watch_dir(self, cr, uid, ids, context):
mod_obj = self.pool.get('ir.module.module')
all_mods = mod_obj.read(cr, uid, mod_obj.search(cr, uid, []), ['name', 'state'])
known_modules = [x['name'] for x in all_mods]
ls_ad = glob.glob(os.path.join(tools.config['addons_path'], '*', '__terp__.py'))
modules = [module_name_re.match(name).group(1) for name in ls_ad]
for fname in os.listdir(tools.config['addons_path']):
if zipfile.is_zipfile(fname):
modules.append( fname.split('.')[0])
for module in modules:
if module in known_modules:
continue
terp = mod_obj.get_module_info(module)
if not terp.get('installable', True):
continue
# XXX check if this code is correct...
fm = imp.find_module(module)
try:
imp.load_module(module, *fm)
finally:
if fm[0]:
fm[0].close()
values = mod_obj.get_values_from_terp(terp)
mod_id = mod_obj.create(cr, uid, dict(name=module, state='uninstalled', **values))
dependencies = terp.get('depends', [])
for d in dependencies:
cr.execute('insert into ir_module_module_dependency (module_id,name) values (%s, %s)', (mod_id, d))
for module in known_modules:
terp = mod_obj.get_module_info(module)
if terp.get('installable', True):
for mod in all_mods:
if mod['name'] == module and mod['state'] == 'uninstallable':
mod_obj.write(cr, uid, [mod['id']], {'state': 'uninstalled'})
return {}
base_module_scan()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -21,7 +21,8 @@
import time
from openerp.osv import osv,fields
from openerp.osv import osv, fields
from openerp.osv.orm import browse_record
from openerp.tools.misc import attrgetter
# -------------------------------------------------------------------------
@ -111,7 +112,7 @@ class ir_property(osv.osv):
raise osv.except_osv('Error', 'Invalid type')
if field == 'value_reference':
if isinstance(value, osv.orm.browse_record):
if isinstance(value, browse_record):
value = '%s,%d' % (value._name, value.id)
elif isinstance(value, (int, long)):
field_id = values.get('fields_id')

View File

@ -125,6 +125,7 @@
<field name="model">res.partner.bank</field>
<field name="arch" type="xml">
<tree string="Bank Accounts">
<field name="state" invisible="1"/>
<field name="sequence" invisible="1"/>
<field name="acc_number"/>
<field name="bank_name"/>

View File

@ -318,7 +318,7 @@ class res_company(osv.osv):
<lines>1.3cm %s 20cm %s</lines>
<drawRightString x="20cm" y="%s">[[ company.rml_header1 ]]</drawRightString>
<drawString x="1.3cm" y="%s">[[ company.partner_id.name ]]</drawString>
<place x="1.3cm" y="%s" height="1.55cm" width="15.0cm">
<place x="1.3cm" y="%s" height="1.8cm" width="15.0cm">
<para style="main_header">[[ display_address(company.partner_id) or '' ]]</para>
</place>
<drawString x="1.3cm" y="%s">Phone:</drawString>
@ -344,8 +344,8 @@ class res_company(osv.osv):
</pageTemplate>
</header>"""
_header_a4 = _header_main % ('23.0cm', '27.6cm', '27.7cm', '27.7cm', '27.8cm', '27.4cm', '25.8cm', '26.0cm', '26.0cm', '25.6cm', '25.6cm', '25.5cm', '25.5cm')
_header_letter = _header_main % ('21.3cm', '25.9cm', '26.0cm', '26.0cm', '26.1cm', '25.7cm', '24.1cm', '24.3cm', '24.3cm', '23.9cm', '23.9cm', '23.8cm', '23.8cm')
_header_a4 = _header_main % ('23.0cm', '27.6cm', '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 % ('21.3cm', '25.9cm', '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':

View File

@ -21,6 +21,7 @@
import logging
from operator import attrgetter
import openerp
from openerp import pooler
from openerp.osv import osv, fields
from openerp.tools import ustr
@ -358,7 +359,8 @@ class res_config_installer(osv.osv_memory):
cr, uid,
modules.search(cr, uid, [('name','in',to_install)]),
'to install', ['uninstalled'], context=context)
cr.commit() #TOFIX: after remove this statement, installation wizard is fail
cr.commit()
openerp.modules.registry.RegistryManager.signal_registry_change(cr.dbname)
new_db, self.pool = pooler.restart_pool(cr.dbname, update_module=True)
res_config_installer()

View File

@ -71,7 +71,7 @@ addresses belonging to this country.\n\nYou can use the python-style string pate
name_search = location_name_search
def create(self, cursor, user, vals, context=None):
if 'code' in vals:
if vals.get('code'):
vals['code'] = vals['code'].upper()
return super(Country, self).create(cursor, user, vals,
context=context)

View File

@ -228,45 +228,6 @@ class lang(osv.osv):
lang()
def original_group(s, grouping, thousands_sep=''):
if not grouping:
return s, 0
result = ""
seps = 0
spaces = ""
if s[-1] == ' ':
sp = s.find(' ')
spaces = s[sp:]
s = s[:sp]
while s and grouping:
# if grouping is -1, we are done
if grouping[0] == -1:
break
# 0: re-use last group ad infinitum
elif grouping[0] != 0:
#process last group
group = grouping[0]
grouping = grouping[1:]
if result:
result = s[-group:] + thousands_sep + result
seps += 1
else:
result = s[-group:]
s = s[:-group]
if s and s[-1] not in "0123456789":
# the leading string is only spaces and signs
return s + result + spaces, seps
if not result:
return s + spaces, seps
if s:
result = s + thousands_sep + result
seps += 1
return result + spaces, seps
def split(l, counts):
"""
@ -317,52 +278,4 @@ def intersperse(string, counts, separator=''):
res = separator.join(map(reverse, reverse(splits)))
return left + res + right, len(splits) > 0 and len(splits) -1 or 0
# TODO rewrite this with a unit test library
def _group_examples():
for g in [original_group, intersperse]:
# print "asserts on", g.func_name
assert g("", []) == ("", 0)
assert g("0", []) == ("0", 0)
assert g("012", []) == ("012", 0)
assert g("1", []) == ("1", 0)
assert g("12", []) == ("12", 0)
assert g("123", []) == ("123", 0)
assert g("1234", []) == ("1234", 0)
assert g("123456789", []) == ("123456789", 0)
assert g("&ab%#@1", []) == ("&ab%#@1", 0)
assert g("0", []) == ("0", 0)
assert g("0", [1]) == ("0", 0)
assert g("0", [2]) == ("0", 0)
assert g("0", [200]) == ("0", 0)
# breaks original_group:
if g.func_name == 'intersperse':
assert g("12345678", [0], '.') == ('12345678', 0)
assert g("", [1], '.') == ('', 0)
assert g("12345678", [1], '.') == ('1234567.8', 1)
assert g("12345678", [1], '.') == ('1234567.8', 1)
assert g("12345678", [2], '.') == ('123456.78', 1)
assert g("12345678", [2,1], '.') == ('12345.6.78', 2)
assert g("12345678", [2,0], '.') == ('12.34.56.78', 3)
assert g("12345678", [-1,2], '.') == ('12345678', 0)
assert g("12345678", [2,-1], '.') == ('123456.78', 1)
assert g("12345678", [2,0,1], '.') == ('12.34.56.78', 3)
assert g("12345678", [2,0,0], '.') == ('12.34.56.78', 3)
assert g("12345678", [2,0,-1], '.') == ('12.34.56.78', 3)
assert g("12345678", [3,3,3,3], '.') == ('12.345.678', 2)
assert original_group("abc1234567xy", [2], '.') == ('abc1234567.xy', 1)
assert original_group("abc1234567xy8", [2], '.') == ('abc1234567xy8', 0) # difference here...
assert original_group("abc12", [3], '.') == ('abc12', 0)
assert original_group("abc12", [2], '.') == ('abc12', 0)
assert original_group("abc12", [1], '.') == ('abc1.2', 1)
assert intersperse("abc1234567xy", [2], '.') == ('abc1234567.xy', 1)
assert intersperse("abc1234567xy8", [2], '.') == ('abc1234567x.y8', 1) # ... w.r.t. here.
assert intersperse("abc12", [3], '.') == ('abc12', 0)
assert intersperse("abc12", [2], '.') == ('abc12', 0)
assert intersperse("abc12", [1], '.') == ('abc1.2', 1)
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -316,6 +316,7 @@
<group expand="0" string="Group By...">
<filter string="Salesperson" icon="terp-personal" domain="[]" context="{'group_by' : 'user_id'}" />
<filter string="Company" context="{'group_by': 'parent_id'}"/>
<filter string="Country" context="{'group_by': 'country_id'}"/>
</group>
</search>
</field>

View File

@ -1,14 +0,0 @@
import sys
import openerp
# TODO this loop will be exposed as open_openerp_namespace()
# once trunk-cleaning-vmt is merged.
for k, v in list(sys.modules.items()):
if k.startswith('openerp.') and sys.modules.get(k[8:]) is None:
sys.modules[k[8:]] = v
import openerp.addons.base.res.res_lang as res_lang
res_lang._group_examples()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,27 +0,0 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2011-TODAY OpenERP S.A. <http://www.openerp.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
# Useful for manual testing of cron jobs scheduling.
# This must be (un)commented with the corresponding yml file
# in ../__openerp__.py.
# import test_ir_cron
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -5,7 +5,7 @@
1. Try a few common expressions to verify they work with safe_eval
-
!python {model: ir.model}: |
from tools.safe_eval import safe_eval
from openerp.tools.safe_eval import safe_eval
expected = (1, {"a": 9 * 2}, (True, False, None))
actual = safe_eval('(1, {"a": 9 * 2}, (True, False, None))')
assert actual == expected, "Simple python expressions are not working with safe_eval"
@ -41,8 +41,8 @@
5. Try forbidden expressions in safe_eval to verify they are not allowed (open)
-
!python {model: ir.model}: |
from tools.safe_eval import safe_eval
from tools.misc import mute_logger
from openerp.tools.safe_eval import safe_eval
from openerp.tools.misc import mute_logger
try:
with mute_logger('openerp.tools.safe_eval'):
safe_eval('open("/etc/passwd","r")')
@ -146,7 +146,7 @@
"Float precision tests: verify that float rounding methods are working correctly via res.currency"
-
!python {model: res.currency}: |
from tools import float_repr
from openerp.tools import float_repr
from math import log10
currency = self.browse(cr, uid, ref('base.EUR'))
def try_round(amount, expected, self=self, cr=cr, currency=currency, float_repr=float_repr,
@ -197,7 +197,7 @@
"Float precision tests: verify that float rounding methods are working correctly via tools"
-
!python {model: res.currency}: |
from tools import float_compare, float_is_zero, float_round, float_repr
from openerp.tools import float_compare, float_is_zero, float_round, float_repr
def try_round(amount, expected, precision_digits=3, float_round=float_round, float_repr=float_repr):
result = float_repr(float_round(amount, precision_digits=precision_digits),
precision_digits=precision_digits)
@ -271,7 +271,7 @@
!python {model: res.currency}: |
currency = self.browse(cr, uid, ref('base.EUR'))
res_currency_rate = self.pool.get('res.currency.rate')
from tools import float_compare, float_is_zero, float_round, float_repr
from openerp.tools import float_compare, float_is_zero, float_round, float_repr
def try_roundtrip(value, expected, self=self, cr=cr, currency=currency,
res_currency_rate=res_currency_rate):
rate_id = res_currency_rate.create(cr, 1, {'name':'2000-01-01',
@ -289,7 +289,7 @@
"Float precision tests: verify that invalid parameters are forbidden"
-
!python {model: res.currency}: |
from tools import float_compare, float_is_zero, float_round
from openerp.tools import float_compare, float_is_zero, float_round
try:
float_is_zero(0.01, precision_digits=3, precision_rounding=0.01)
except AssertionError:

View File

@ -12,7 +12,7 @@
I will prepare the context
-
!python {model: res.users }: |
from tools import config
from openerp.tools import config
host = config.get_misc('httpd', 'interface')
port = config.get_misc('httpd', 'port', 8069)
if not host:
@ -70,4 +70,4 @@
raise AssertionError("User should not be enabled!")
except Fault, e:
if e.faultCode != 'AccessDenied':
raise
raise

View File

@ -3,6 +3,7 @@ import test_expression
import test_ir_attachment
import test_ir_values
import test_menu
import test_res_lang
import test_search
checks = [
@ -11,5 +12,6 @@ checks = [
test_ir_attachment,
test_ir_values,
test_menu,
test_res_lang,
test_search,
]

View File

@ -40,4 +40,4 @@ class test_base(common.TransactionCase):
if __name__ == '__main__':
unittest2.main()
unittest2.main()

View File

@ -0,0 +1,43 @@
import unittest2
import openerp.tests.common as common
class test_res_lang(common.TransactionCase):
def test_00_intersperse(self):
from openerp.addons.base.res.res_lang import intersperse
assert intersperse("", []) == ("", 0), "Assert passed"
assert intersperse("0", []) == ("0", 0), "Assert passed"
assert intersperse("012", []) == ("012", 0), "Assert passed"
assert intersperse("1", []) == ("1", 0), "Assert passed"
assert intersperse("12", []) == ("12", 0), "Assert passed"
assert intersperse("123", []) == ("123", 0), "Assert passed"
assert intersperse("1234", []) == ("1234", 0), "Assert passed"
assert intersperse("123456789", []) == ("123456789", 0), "Assert passed"
assert intersperse("&ab%#@1", []) == ("&ab%#@1", 0), "Assert passed"
assert intersperse("0", []) == ("0", 0), "Assert passed"
assert intersperse("0", [1]) == ("0", 0), "Assert passed"
assert intersperse("0", [2]) == ("0", 0), "Assert passed"
assert intersperse("0", [200]) == ("0", 0), "Assert passed"
assert intersperse("12345678", [1], '.') == ('1234567.8', 1)
assert intersperse("12345678", [1], '.') == ('1234567.8', 1)
assert intersperse("12345678", [2], '.') == ('123456.78', 1)
assert intersperse("12345678", [2,1], '.') == ('12345.6.78', 2)
assert intersperse("12345678", [2,0], '.') == ('12.34.56.78', 3)
assert intersperse("12345678", [-1,2], '.') == ('12345678', 0)
assert intersperse("12345678", [2,-1], '.') == ('123456.78', 1)
assert intersperse("12345678", [2,0,1], '.') == ('12.34.56.78', 3)
assert intersperse("12345678", [2,0,0], '.') == ('12.34.56.78', 3)
assert intersperse("12345678", [2,0,-1], '.') == ('12.34.56.78', 3)
assert intersperse("12345678", [3,3,3,3], '.') == ('12.345.678', 2)
assert intersperse("abc1234567xy", [2], '.') == ('abc1234567.xy', 1)
assert intersperse("abc1234567xy8", [2], '.') == ('abc1234567x.y8', 1) # ... w.r.t. here.
assert intersperse("abc12", [3], '.') == ('abc12', 0)
assert intersperse("abc12", [2], '.') == ('abc12', 0)
assert intersperse("abc12", [1], '.') == ('abc1.2', 1)
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,352 +0,0 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import xmlrpclib
import optparse
import sys
import threading
import os
import time
import base64
import socket
import string
admin_passwd = 'admin'
waittime = 10
wait_count = 0
wait_limit = 12
def to_decode(s):
try:
return s.encode('utf-8')
except UnicodeError:
try:
return s.encode('latin')
except UnicodeError:
try:
return s.decode('ascii')
except UnicodeError:
return s
def start_server(root_path, port, netport, addons_path):
os.system('python2.5 %sopenerp-server --pidfile=openerp.pid --no-xmlrpcs --xmlrpc-port=%s --netrpc-port=%s --addons-path=%s' %(root_path, str(port),str(netport),addons_path))
def clean():
if os.path.isfile('openerp.pid'):
ps = open('openerp.pid')
if ps:
pid = int(ps.read())
ps.close()
if pid:
os.kill(pid,9)
def execute(connector, method, *args):
global wait_count
res = False
try:
res = getattr(connector,method)(*args)
except socket.error,e:
if e.args[0] == 111:
if wait_count > wait_limit:
print "Server is taking too long to start, it has exceeded the maximum limit of %d seconds." % wait_limit
clean()
sys.exit(1)
print 'Please wait %d sec to start server....' % waittime
wait_count += 1
time.sleep(waittime)
res = execute(connector, method, *args)
else:
raise e
wait_count = 0
return res
def login(uri, dbname, user, pwd):
conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/common')
uid = execute(conn,'login',dbname, user, pwd)
return uid
def import_translate(uri, user, pwd, dbname, translate_in):
uid = login(uri, dbname, user, pwd)
if uid:
conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/wizard')
wiz_id = execute(conn,'create',dbname, uid, pwd, 'base.language.import')
for trans_in in translate_in:
lang,ext = os.path.splitext(trans_in.split('/')[-1])
state = 'init'
datas = {'form':{}}
while state!='end':
res = execute(conn,'execute',dbname, uid, pwd, wiz_id, datas, state, {})
if 'datas' in res:
datas['form'].update( res['datas'].get('form',{}) )
if res['type']=='form':
for field in res['fields'].keys():
datas['form'][field] = res['fields'][field].get('value', False)
state = res['state'][-1][0]
trans_obj = open(trans_in)
datas['form'].update({
'name': lang,
'code': lang,
'data' : base64.encodestring(trans_obj.read())
})
trans_obj.close()
elif res['type']=='action':
state = res['state']
def check_quality(uri, user, pwd, dbname, modules, quality_logs):
uid = login(uri, dbname, user, pwd)
quality_logs += 'quality-logs'
if uid:
conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/object')
final = {}
for module in modules:
qualityresult = {}
test_detail = {}
quality_result = execute(conn,'execute', dbname, uid, pwd,'module.quality.check','check_quality',module)
detail_html = ''
html = '''<html><body><a name="TOP"></a>'''
html +="<h1> Module: %s </h1>"%(quality_result['name'])
html += "<h2> Final score: %s</h2>"%(quality_result['final_score'])
html += "<div id='tabs'>"
html += "<ul>"
for x,y,detail in quality_result['check_detail_ids']:
test = detail.get('name')
msg = detail.get('message','')
score = round(float(detail.get('score',0)),2)
html += "<li><a href=\"#%s\">%s</a></li>"%(test.replace(' ','-'),test)
detail_html +='''<div id=\"%s\"><h3>%s (Score : %s)</h3><font color=red><h5>%s</h5></font>%s</div>'''%(test.replace(' ', '-'), test, score, msg, detail.get('detail', ''))
test_detail[test] = (score,msg,detail.get('detail',''))
html += "</ul>"
html += "%s"% detail_html
html += "</div></body></html>"
if not os.path.isdir(quality_logs):
os.mkdir(quality_logs)
fp = open('%s/%s.html'%(quality_logs,module),'wb')
fp.write(to_decode(html))
fp.close()
#final[quality_result['name']] = (quality_result['final_score'],html,test_detail)
#fp = open('quality_log.pck','wb')
#pck_obj = pickle.dump(final,fp)
#fp.close()
#print "LOG PATH%s"%(os.path.realpath('quality_log.pck'))
return True
else:
print 'Login Failed...'
clean()
sys.exit(1)
def wait(id,url=''):
progress=0.0
sock2 = xmlrpclib.ServerProxy(url+'/xmlrpc/db')
while not progress==1.0:
progress,users = execute(sock2,'get_progress',admin_passwd, id)
return True
def create_db(uri, dbname, user='admin', pwd='admin', lang='en_US'):
conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/db')
obj_conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/object')
wiz_conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/wizard')
login_conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/common')
db_list = execute(conn, 'list')
if dbname in db_list:
drop_db(uri, dbname)
id = execute(conn,'create',admin_passwd, dbname, True, lang)
wait(id,uri)
install_module(uri, dbname, ['base_module_quality'],user=user,pwd=pwd)
return True
def drop_db(uri, dbname):
conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/db')
db_list = execute(conn,'list')
if dbname in db_list:
execute(conn, 'drop', admin_passwd, dbname)
return True
def make_links(uri, uid, dbname, source, destination, module, user, pwd):
if module in ('base','quality_integration_server'):
return True
if os.path.islink(destination + '/' + module):
os.unlink(destination + '/' + module)
for path in source:
if os.path.isdir(path + '/' + module):
os.symlink(path + '/' + module, destination + '/' + module)
obj_conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/object')
execute(obj_conn, 'execute', dbname, uid, pwd, 'ir.module.module', 'update_list')
module_ids = execute(obj_conn, 'execute', dbname, uid, pwd, 'ir.module.module', 'search', [('name','=',module)])
if len(module_ids):
data = execute(obj_conn, 'execute', dbname, uid, pwd, 'ir.module.module', 'read', module_ids[0],['name','dependencies_id'])
dep_datas = execute(obj_conn, 'execute', dbname, uid, pwd, 'ir.module.module.dependency', 'read', data['dependencies_id'],['name'])
for dep_data in dep_datas:
make_links(uri, uid, dbname, source, destination, dep_data['name'], user, pwd)
return False
def install_module(uri, dbname, modules, addons='', extra_addons='', user='admin', pwd='admin'):
uid = login(uri, dbname, user, pwd)
if extra_addons:
extra_addons = extra_addons.split(',')
if uid:
if addons and extra_addons:
for module in modules:
make_links(uri, uid, dbname, extra_addons, addons, module, user, pwd)
obj_conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/object')
wizard_conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/wizard')
module_ids = execute(obj_conn, 'execute', dbname, uid, pwd, 'ir.module.module', 'search', [('name','in',modules)])
execute(obj_conn, 'execute', dbname, uid, pwd, 'ir.module.module', 'button_install', module_ids)
wiz_id = execute(wizard_conn, 'create', dbname, uid, pwd, 'module.upgrade.simple')
state = 'init'
datas = {}
#while state!='menu':
while state!='end':
res = execute(wizard_conn, 'execute', dbname, uid, pwd, wiz_id, datas, state, {})
if state == 'init':
state = 'start'
elif state == 'start':
state = 'end'
return True
def upgrade_module(uri, dbname, modules, user='admin', pwd='admin'):
uid = login(uri, dbname, user, pwd)
if uid:
obj_conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/object')
wizard_conn = xmlrpclib.ServerProxy(uri + '/xmlrpc/wizard')
module_ids = execute(obj_conn, 'execute', dbname, uid, pwd, 'ir.module.module', 'search', [('name','in',modules)])
execute(obj_conn, 'execute', dbname, uid, pwd, 'ir.module.module', 'button_upgrade', module_ids)
wiz_id = execute(wizard_conn, 'create', dbname, uid, pwd, 'module.upgrade.simple')
state = 'init'
datas = {}
#while state!='menu':
while state!='end':
res = execute(wizard_conn, 'execute', dbname, uid, pwd, wiz_id, datas, state, {})
if state == 'init':
state = 'start'
elif state == 'start':
state = 'end'
return True
usage = """%prog command [options]
Basic Commands:
start-server Start Server
create-db Create new database
drop-db Drop database
install-module Install module
upgrade-module Upgrade module
install-translation Install translation file
check-quality Calculate quality and dump quality result into quality_log.pck using pickle
"""
parser = optparse.OptionParser(usage)
parser.add_option("--modules", dest="modules",
help="specify modules to install or check quality")
parser.add_option("--addons-path", dest="addons_path", help="specify the addons path")
parser.add_option("--quality-logs", dest="quality_logs", help="specify the path of quality logs files which has to stores")
parser.add_option("--root-path", dest="root_path", help="specify the root path")
parser.add_option("-p", "--port", dest="port", help="specify the TCP port", type="int")
parser.add_option("--net_port", dest="netport",help="specify the TCP port for netrpc")
parser.add_option("-d", "--database", dest="db_name", help="specify the database name")
parser.add_option("--login", dest="login", help="specify the User Login")
parser.add_option("--password", dest="pwd", help="specify the User Password")
parser.add_option("--translate-in", dest="translate_in",
help="specify .po files to import translation terms")
parser.add_option("--extra-addons", dest="extra_addons",
help="specify extra_addons and trunkCommunity modules path ")
(opt, args) = parser.parse_args()
if len(args) != 1:
parser.error("incorrect number of arguments")
command = args[0]
if command not in ('start-server','create-db','drop-db','install-module','upgrade-module','check-quality','install-translation'):
parser.error("incorrect command")
def die(cond, msg):
if cond:
print msg
sys.exit(1)
die(opt.modules and (not opt.db_name),
"the modules option cannot be used without the database (-d) option")
die(opt.translate_in and (not opt.db_name),
"the translate-in option cannot be used without the database (-d) option")
options = {
'addons-path' : opt.addons_path or 'addons',
'quality-logs' : opt.quality_logs or '',
'root-path' : opt.root_path or '',
'translate-in': [],
'port' : opt.port or 8069,
'netport':opt.netport or 8070,
'database': opt.db_name or 'terp',
'modules' : map(string.strip, opt.modules.split(',')) if opt.modules else [],
'login' : opt.login or 'admin',
'pwd' : opt.pwd or '',
'extra-addons':opt.extra_addons or []
}
# Hint:i18n-import=purchase:ar_AR.po+sale:fr_FR.po,nl_BE.po
if opt.translate_in:
translate = opt.translate_in
for module_name,po_files in map(lambda x:tuple(x.split(':')),translate.split('+')):
for po_file in po_files.split(','):
if module_name == 'base':
po_link = '%saddons/%s/i18n/%s'%(options['root-path'],module_name,po_file)
else:
po_link = '%s/%s/i18n/%s'%(options['addons-path'], module_name, po_file)
options['translate-in'].append(po_link)
uri = 'http://localhost:' + str(options['port'])
server_thread = threading.Thread(target=start_server,
args=(options['root-path'], options['port'],options['netport'], options['addons-path']))
try:
server_thread.start()
if command == 'create-db':
create_db(uri, options['database'], options['login'], options['pwd'])
if command == 'drop-db':
drop_db(uri, options['database'])
if command == 'install-module':
install_module(uri, options['database'], options['modules'],options['addons-path'],options['extra-addons'],options['login'], options['pwd'])
if command == 'upgrade-module':
upgrade_module(uri, options['database'], options['modules'], options['login'], options['pwd'])
if command == 'check-quality':
check_quality(uri, options['login'], options['pwd'], options['database'], options['modules'], options['quality-logs'])
if command == 'install-translation':
import_translate(uri, options['login'], options['pwd'], options['database'], options['translate-in'])
clean()
sys.exit(0)
except xmlrpclib.Fault, e:
print e.faultString
clean()
sys.exit(1)
except Exception, e:
print e
clean()
sys.exit(1)
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -32,6 +32,7 @@ by the user to check if her code is future proof.
# without the 'openerp.' prefix. E.g. openerp.osv.osv and osv.osv refer to the
# same module.
# Introduced around 2011.02.
open_openerp_namespace = True
# Change to False around 2013.02.
open_openerp_namespace = False
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

37
openerp/http.py Normal file
View File

@ -0,0 +1,37 @@
# -*- coding: utf-8 -*-
"""
``openerp.http`` offers decorators to register WSGI and RPC endpoints handlers.
See :ref:`routing`.
"""
from . import service
def handler():
"""
Decorator to register a WSGI handler. The handler must return None if it
does not handle the request.
"""
def decorator(f):
service.wsgi_server.register_wsgi_handler(f)
return decorator
def route(url):
"""
Same as then handler() decorator but register the handler under a specific
url. Not yet implemented.
"""
def decorator(f):
pass # TODO
return decorator
def rpc(endpoint):
"""
Decorator to register a RPC endpoint handler. The handler will receive
already unmarshalled RCP arguments.
"""
def decorator(f):
service.wsgi_server.register_rpc_endpoint(endpoint, f)
return decorator
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -246,17 +246,10 @@
</rng:define>
<rng:start>
<rng:choice>
<rng:element name="openerp">
<rng:oneOrMore>
<rng:ref name="data" />
</rng:oneOrMore>
</rng:element>
<rng:element name="terp">
<rng:oneOrMore>
<rng:ref name="data" />
</rng:oneOrMore>
</rng:element>
</rng:choice>
<rng:element name="openerp">
<rng:oneOrMore>
<rng:ref name="data" />
</rng:oneOrMore>
</rng:element>
</rng:start>
</rng:grammar>

View File

@ -46,7 +46,7 @@ class Logger(object):
_logger.warning(
"notifyChannel API shouldn't be used anymore, please use "
"the standard `logging` module instead.")
from service.web_services import common
from service import common
log = logging.getLogger(__name__ + '.deprecated.' + ustr(name))
@ -63,7 +63,7 @@ class Logger(object):
try:
msg = ustr(msg).strip()
if level in (LOG_ERROR, LOG_CRITICAL): # and tools.config.get_misc('debug','env_info',False):
msg = common().exp_get_server_environment() + "\n" + msg
msg = common.exp_get_server_environment() + "\n" + msg
result = msg.split('\n')
except UnicodeDecodeError:

Some files were not shown because too many files have changed in this diff Show More