diff --git a/.bzrignore b/.bzrignore index 1e0564801ab..e7618c7b0ce 100644 --- a/.bzrignore +++ b/.bzrignore @@ -1,14 +1,21 @@ -.* -*.egg-info -*.orig -*.vim +.*.swp +.bzrignore +.idea +.project +.pydevproject +.ropeproject +.settings +.DS_Store +openerp/addons/* +openerp/filestore* +.Python +*.pyc +*.pyo +bin/* build/ -RE:^bin/ -RE:^dist/ -RE:^include/ - -RE:^share/ -RE:^man/ -RE:^lib/ - -RE:^addons/\w+/doc/_build/ +include/ +lib/ +share/ +doc/_build/* +win32/*.bat +win32/meta.py diff --git a/openerp/addons/base/__openerp__.py b/openerp/addons/base/__openerp__.py index b4473434cdf..f2df88506f5 100644 --- a/openerp/addons/base/__openerp__.py +++ b/openerp/addons/base/__openerp__.py @@ -3,7 +3,7 @@ # # OpenERP, Open Source Management Solution # Copyright (C) 2004-2009 Tiny SPRL (). -# Copyright (C) 2010, 2012 OpenERP s.a. (). +# Copyright (C) 2010-2012 OpenERP s.a. (). # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -80,6 +80,7 @@ The kernel of OpenERP, needed for all installation. 'res/res_bank_view.xml', 'res/res_country_view.xml', 'res/res_currency_view.xml', + 'res/wizard/change_password_wizard_view.xml', 'res/res_users_view.xml', 'res/res_partner_data.xml', 'res/ir_property_view.xml', @@ -93,19 +94,17 @@ The kernel of OpenERP, needed for all installation. 'res/res_partner_image_demo.xml', ], 'test': [ - 'test/base_test.xml', 'test/base_test.yml', 'test/test_context.xml', 'test/bug_lp541545.xml', 'test/test_osv_expression.yml', 'test/test_ir_rule.yml', # <-- These tests modify/add/delete ir_rules. - # Commented because this takes some time. - # This must be (un)commented with the corresponding import statement - # in test/__init__.py. - # 'test/test_ir_cron.yml', # <-- These tests perform a roolback. ], 'installable': True, 'auto_install': True, 'css': ['static/src/css/modules.css'], + 'js': [ + 'static/src/js/apps.js', + ], } # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/addons/base/base_data.xml b/openerp/addons/base/base_data.xml index 7526c4d02d9..2cf7d00600e 100644 --- a/openerp/addons/base/base_data.xml +++ b/openerp/addons/base/base_data.xml @@ -62,7 +62,7 @@ Your Company - Your Company Slogan + Your Company Tagline diff --git a/openerp/addons/base/i18n/en_GB.po b/openerp/addons/base/i18n/en_GB.po index e6f7fcdf2a7..5be4080d6a6 100644 --- a/openerp/addons/base/i18n/en_GB.po +++ b/openerp/addons/base/i18n/en_GB.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-server\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-03 16:01+0000\n" -"PO-Revision-Date: 2012-12-17 20:41+0000\n" +"PO-Revision-Date: 2012-12-19 19:54+0000\n" "Last-Translator: David Bowers \n" "Language-Team: English (United Kingdom) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-12-18 04:58+0000\n" -"X-Generator: Launchpad (build 16372)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:42+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -4199,6 +4199,13 @@ msgid "" "invite.\n" "\n" msgstr "" +"\n" +"This module updates memos inside OpenERP when using an external pad\n" +"=====================================================================\n" +"\n" +"Use to update your text memo in real time with a user following that you " +"invite.\n" +"\n" #. module: base #: code:addons/base/module/module.py:609 diff --git a/openerp/addons/base/i18n/es.po b/openerp/addons/base/i18n/es.po index 0b0474e092f..2a50ce20df6 100644 --- a/openerp/addons/base/i18n/es.po +++ b/openerp/addons/base/i18n/es.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.4\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-03 16:01+0000\n" -"PO-Revision-Date: 2012-12-13 16:14+0000\n" -"Last-Translator: Roberto Lizana (trey.es) \n" +"PO-Revision-Date: 2012-12-19 23:24+0000\n" +"Last-Translator: Pedro Manuel Baeza \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: 2012-12-14 05:35+0000\n" -"X-Generator: Launchpad (build 16369)\n" +"X-Launchpad-Export-Date: 2012-12-21 04:39+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -127,6 +127,17 @@ msgid "" " * Product Attributes\n" " " msgstr "" +"\n" +"Módulo que añade fabricantes y atributos en el formulario de producto.\n" +"===========================================================\n" +"\n" +"Puede definir los siguientes campos para un producto:\n" +"-------------------------------------------------\n" +"* Fabricante\n" +"* Nombre del producto del fabricante\n" +"* Código del producto del fabricante\n" +"* Atributos del producto\n" +" " #. module: base #: field:ir.actions.client,params:0 @@ -140,6 +151,9 @@ msgid "" "The module adds google user in res user.\n" "========================================\n" msgstr "" +"\n" +"El módulo añade usuarios Google res.user.\n" +"========================================\n" #. module: base #: help:res.partner,employee:0 @@ -196,6 +210,15 @@ msgid "" "revenue\n" "reports." msgstr "" +"\n" +"Genere facturas desde los gastos y partes de horas.\n" +"========================================================\n" +"\n" +"Módulo para generar facturas basadas en los costes (recursos humanos, " +"gastos, ...).\n" +"\n" +"Puede definir tarifas en la contabilidad analítica, realizando algún informe " +"teórico de beneficios." #. module: base #: model:ir.module.module,description:base.module_crm @@ -311,6 +334,12 @@ msgid "" "\n" " " msgstr "" +"\n" +"Plan de cuentas y localización de impuestos chilenos.\n" +"==============================================\n" +"Plan contable chileno e impuestos de acuerdo a disposiciones vigentes\n" +"\n" +" " #. module: base #: model:ir.module.module,shortdesc:base.module_sale @@ -358,6 +387,15 @@ msgid "" " * Commitment Date\n" " * Effective Date\n" msgstr "" +"\n" +"Añade información adicional al pedido de venta.\n" +"===================================================\n" +"\n" +"Puede añadir las siguientes fechas adicionales a un pedido de venta:\n" +"-----------------------------------------------------------\n" +" * Fecha solicitada\n" +" * Fecha de confirmación\n" +" * Fecha efectiva\n" #. module: base #: help:ir.actions.act_window,res_id:0 @@ -416,6 +454,13 @@ msgid "" "document and Wiki based Hidden.\n" " " msgstr "" +"\n" +"Instalador oculto para la gestión del conocimiento.\n" +"==========================================\n" +"\n" +"Hace disponible la configuración de la aplicación de conocimiento disponible " +"desde la que se puede instalar el módulo 'document' y el módulo 'wiki'.\n" +" " #. module: base #: model:ir.module.category,name:base.module_category_customer_relationship_management @@ -434,6 +479,13 @@ msgid "" "invoices from picking, OpenERP is able to add and compute the shipping " "line.\n" msgstr "" +"\n" +"Permite añadir métodos de envío en los pedidos de venta y en los albaranes.\n" +"==============================================================\n" +"\n" +"Puede definir su propio transportista y sus tarifas de envío. Cuando se " +"creen facturas desde el albarán, OpenERP podrá añadir y calcular la línea de " +"envío.\n" #. module: base #: code:addons/base/ir/ir_filters.py:83 @@ -863,6 +915,14 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"Pulse para añadir un contacto en la libreta de direcciones.\n" +"

\n" +"OpenERP le ayuda a gestionar todas las actividades relacionadas con los " +"clientes: discusiones, historial de oportunidades de negocio, documentos, " +"etc.\n" +"

\n" +" " #. module: base #: model:ir.module.module,description:base.module_web_linkedin @@ -934,6 +994,9 @@ msgid "" "image, with aspect ratio preserved. Use this field anywhere a small image is " "required." msgstr "" +"Imagen de tamaño pequeño de este contacto. Se redimensiona automáticamente a " +"64x64 px, con el ratio de aspecto preservado. Use este campo donde se " +"requiera una imagen pequeña." #. module: base #: help:ir.actions.server,mobile:0 @@ -1121,6 +1184,13 @@ msgid "" " * the Tax Code Chart for Luxembourg\n" " * the main taxes used in Luxembourg" msgstr "" +"\n" +"Éste es el módulo base para gestionar el plan de cuentas para Luxemburgo.\n" +"======================================================================\n" +"\n" +" * El plan de cuentas KLUWER\n" +" * Los códigos de impuestos para Luxemburgo\n" +" * Los impuestos principales usados en Luxembourg" #. module: base #: model:res.country,name:base.om @@ -1362,7 +1432,7 @@ msgstr "Contribuyentes" #. module: base #: field:ir.rule,perm_unlink:0 msgid "Apply for Delete" -msgstr "" +msgstr "Aplicar para eliminación" #. module: base #: selection:ir.property,type:0 @@ -1377,7 +1447,7 @@ msgstr "Visible" #. module: base #: model:ir.actions.client,name:base.action_client_base_menu msgid "Open Settings Menu" -msgstr "" +msgstr "Abrir menú 'Configuración'" #. module: base #: selection:base.language.install,lang:0 @@ -1437,6 +1507,8 @@ msgid "" " for uploading to OpenERP's translation " "platform," msgstr "" +"Formato TGZ: archivo comprimido que contiene un archivo PO, adecuado para " +"subirlo directamente a la plataforma de traducción de OpenERP." #. module: base #: view:res.lang:0 @@ -1601,6 +1673,15 @@ msgid "" "with a single statement.\n" " " msgstr "" +"\n" +"Este módulo instala la base para las cuentas bancarias IBAN (International " +"Bank Account Number) y comprueba su validez.\n" +"=============================================================================" +"======================\n" +"\n" +"Incluye la habilidad de extraer correctamente las cuentas locales " +"representadas por una cuenta IBAN con un sólo extracto.\n" +" " #. module: base #: view:ir.module.module:0 @@ -1622,6 +1703,12 @@ msgid "" "=============\n" " " msgstr "" +"\n" +"Este módulo añade el menú y características de reclamaciones al portal si " +"los módulos 'claim' y 'portal' están instalados.\n" +"=============================================================================" +"====================\n" +" " #. module: base #: model:ir.actions.act_window,help:base.action_res_partner_bank_account_form @@ -1654,7 +1741,7 @@ msgstr "" #. module: base #: model:res.country,name:base.mf msgid "Saint Martin (French part)" -msgstr "" +msgstr "San Martín (zona francesa)" #. module: base #: model:ir.model,name:base.model_ir_exports @@ -1817,7 +1904,7 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_portal_project_issue msgid "Portal Issue" -msgstr "" +msgstr "Incidencia de portal" #. module: base #: model:ir.ui.menu,name:base.menu_tools @@ -1837,11 +1924,15 @@ msgid "" "Launch Manually Once: after having been launched manually, it sets " "automatically to Done." msgstr "" +"Manual: Lanzado manualmente.\n" +"Automático: Se ejecuta siempre que se reconfigura el sistema.\n" +"Lanzado manualmente una vez: después de que se lanza manualmente, se " +"establece automáticamente a 'Realizado'." #. module: base #: field:res.partner,image_small:0 msgid "Small-sized image" -msgstr "" +msgstr "Imagen pequeña" #. module: base #: model:ir.module.module,shortdesc:base.module_stock @@ -1904,6 +1995,14 @@ msgid "" "Please keep in mind that you should review and adapt it with your " "Accountant, before using it in a live Environment.\n" msgstr "" +"\n" +"Este módulo provee el plan de cuentas estándar para Austria, que está basado " +"en la plantilla de BMF.gv.at.\n" +"=============================================================================" +"=========\n" +"\n" +"Tenga en mente que debe revisar y adaptarlo con sus contables, antes de " +"usarlo en un entorno en producción.\n" #. module: base #: model:res.country,name:base.kg @@ -1922,6 +2021,15 @@ msgid "" "It assigns manager and user access rights to the Administrator and only user " "rights to the Demo user. \n" msgstr "" +"\n" +"Permisos de acceso contables\n" +"========================\n" +"\n" +"Da al usuario administrador acceso a todas las características de " +"contabilidad, tales como asientos o el plan de cuentas.\n" +"\n" +"Asinga derechos de gestor y de usuario al administrador y sólo permisos de " +"usuario al usuario demo. \n" #. module: base #: field:ir.attachment,res_id:0 @@ -1959,7 +2067,7 @@ msgstr "Países Bajos-Holanda" #. module: base #: model:ir.module.module,shortdesc:base.module_portal_event msgid "Portal Event" -msgstr "" +msgstr "Evento del portal" #. module: base #: selection:ir.translation,state:0 @@ -2093,6 +2201,14 @@ msgid "" "with the effect of creating, editing and deleting either ways.\n" " " msgstr "" +"\n" +"Sincronización de las tareas con el parte de horas.\n" +"====================================================================\n" +"\n" +"Este módulo permite transferir las entradas de las tareas definidas para la " +"gestión de proyectos a las líneas del parte de horas para una fecha y un " +"usuario concretos, con el efecto de crear, editar y borrar en ambas vías.\n" +" " #. module: base #: model:ir.model,name:base.model_ir_model_access @@ -2112,6 +2228,15 @@ msgid "" " templates to target objects.\n" " " msgstr "" +"\n" +" * Soporte multiidioma para los planes de cuentas, impuestos, códigos de " +"impuesto, diarios, plantillas de contabilidad, planes de cuentas analíticos " +"y diarios analíticos.\n" +"* Cambios en el asistente de configuración\n" +" - Copiar traducciones para el plan de cuentas, los impuestos, los " +"códigos de impuesto, las posiciones fiscales de las plantillas a los " +"objetos.\n" +" " #. module: base #: field:workflow.transition,act_from:0 @@ -2234,7 +2359,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 "Formato PO(T): debería editarlo con un editor PO como" #. module: base #: model:ir.ui.menu,name:base.menu_administration @@ -2287,7 +2412,7 @@ msgstr "Coreano (KP) / 한국어 (KP)" #. module: base #: model:res.country,name:base.ax msgid "Åland Islands" -msgstr "" +msgstr "Islas Åland" #. module: base #: field:res.company,logo:0 @@ -2323,7 +2448,7 @@ 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 @@ -2346,6 +2471,8 @@ msgid "" "Appears by default on the top right corner of your printed documents (report " "header)." msgstr "" +"Aparece por defecto en la esquina superior derecho de los documentos " +"impresos (encabezado del informe)." #. module: base #: field:base.module.update,update:0 @@ -2395,6 +2522,8 @@ msgstr "" msgid "" "No matching record found for %(field_type)s '%(value)s' in field '%%(field)s'" msgstr "" +"No se han encontrado registros coincidentes para %(field_type)s '%(value)s' " +"en el campo '%%(field)s'" #. module: base #: model:ir.actions.act_window,help:base.action_ui_view @@ -2444,7 +2573,7 @@ msgstr "Belize" #. module: base #: help:ir.actions.report.xml,header:0 msgid "Add or not the corporate RML header" -msgstr "Añadir o no la cabecera corporativa en el informe RML" +msgstr "Añadir o no el encabezado corporativo en el informe RML" #. module: base #: model:res.country,name:base.ge @@ -2572,6 +2701,9 @@ 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 "" +"Tipo de vista: Tipo de árbol a usar para la vista de árbol. Establezca " +"'árbol' para una vista jerárquica de árbol, o 'formulario' para un vista de " +"lista regular" #. module: base #: sql_constraint:ir.ui.view_sc:0 @@ -2730,6 +2862,10 @@ msgid "" "==================================\n" " " msgstr "" +"\n" +"Estados Unidos - Plan de cuentas.\n" +"==================================\n" +" " #. module: base #: field:ir.actions.act_url,target:0 @@ -2850,12 +2986,17 @@ msgid "" "Module to attach a google document to any model.\n" "================================================\n" msgstr "" +"\n" +"Módulo para adjuntar un documento de Google a cualquier modelo.\n" +"========================================================\n" #. module: base #: code:addons/base/ir/ir_fields.py:334 #, python-format msgid "Found multiple matches for field '%%(field)s' (%d matches)" msgstr "" +"Se han encontrado múltiples coincidencias para el campo '%%(field)s' (%d " +"resultados)" #. module: base #: selection:base.language.install,lang:0 @@ -2874,6 +3015,14 @@ msgid "" "\n" " " msgstr "" +"\n" +"Plan de cuentas y localización de impuestos peruano. De acuerdo al 2010.\n" +"========================================================================\n" +"\n" +"Plan contable peruano e impuestos de acuerdo a disposiciones vigentes de la " +"SUNAT 2011 (PCGE 2010).\n" +"\n" +" " #. module: base #: view:ir.actions.server:0 @@ -2889,7 +3038,7 @@ msgstr "Argumentos enviados al cliente junto con la etiqueta de vista" #. module: base #: model:ir.module.module,summary:base.module_contacts msgid "Contacts, People and Companies" -msgstr "" +msgstr "Contactos, personas y compañías" #. module: base #: model:res.country,name:base.tt @@ -2998,6 +3147,19 @@ msgid "" " * Unlimited \"Group By\" levels (not stacked), two cross level analysis " "(stacked)\n" msgstr "" +"\n" +"Vistas de gráficos para el cliente web.\n" +"================================\n" +"\n" +" * Interpreta una vista , pero permite cambiar dinámicamente la " +"presentación\n" +" * Tipos de gráficos: de tarta, líneas, áreas, barras, radar\n" +" * Apilados/No apilados para las áreas y las barras\n" +" * Leyendas: arriba, dentro (arriba/izquierda), ocultas\n" +" * Características: descargables como PNG o CSV, examinar tabla de datos, " +"cambiar orientación\n" +" * Niveles de agrupación ilimitados (no apilados), análisis de dos " +"niveles de cruce (apilados)\n" #. module: base #: view:res.groups:0 @@ -3038,7 +3200,7 @@ msgstr "" #: code:addons/base/ir/ir_fields.py:175 #, 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 @@ -3095,6 +3257,15 @@ msgid "" " * ``base_stage``: stage management\n" " " msgstr "" +"\n" +"Este módulo gestiona estados y etapas. Se deriva de las clases crm_base y " +"crm_case del crm.\n" +"=============================================================================" +"======================\n" +"\n" +" * \"base_state\": gestión de estados\n" +" * \"base_stage\": gestión de etapas\n" +" " #. module: base #: model:ir.module.module,shortdesc:base.module_web_linkedin @@ -3279,7 +3450,7 @@ msgstr "Tipo de informe 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 @@ -3289,6 +3460,10 @@ msgid "" "==========================================\n" " " msgstr "" +"\n" +"Datos de contabilidad para las reglas de nóminas belgas.\n" +"==============================================\n" +" " #. module: base #: model:res.country,name:base.am @@ -3298,7 +3473,7 @@ msgstr "Armenia" #. module: base #: model:ir.module.module,summary:base.module_hr_evaluation msgid "Periodical Evaluations, Appraisals, Surveys" -msgstr "" +msgstr "Evaluaciones periódicas, encuestas" #. module: base #: model:ir.actions.act_window,name:base.ir_property_form @@ -3665,7 +3840,7 @@ msgstr "Seleccione el paquete del módulo que quiere importar (archivo .zip):" #. module: base #: view:ir.filters:0 msgid "Personal" -msgstr "" +msgstr "Personal" #. module: base #: field:base.language.export,modules:0 @@ -3760,6 +3935,13 @@ msgid "" "easily\n" "keep track and order all your purchase orders.\n" msgstr "" +"\n" +"Este módulo permite gestionar las solicitudes de compra.\n" +"===========================================================\n" +"\n" +"Cuando se crea un pedido de compra, tiene la oportunidad de guardar la " +"solicitud relacionada. Este nuevo objeto se reagrupará y permitirá rastrear " +"y ordenar fácilmente todos sus pedidos de compra.\n" #. module: base #: help:ir.mail_server,smtp_host:0 @@ -3844,7 +4026,7 @@ msgstr "Derecha-a-izquierda" #. module: base #: model:res.country,name:base.sx msgid "Sint Maarten (Dutch part)" -msgstr "" +msgstr "San Martín (parte holandesa)" #. module: base #: view:ir.actions.act_window:0 @@ -3930,7 +4112,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 @@ -4013,11 +4195,22 @@ msgid "" "If you need to manage your meetings, you should install the CRM module.\n" " " msgstr "" +"\n" +"Esto es un sistema completo de calendario.\n" +"========================================\n" +"\n" +"Soporta:\n" +"------------\n" +" - Calendario de eventos\n" +" - Eventos recurrentes\n" +"\n" +"Si necesita gestionar sus reuniones, debería instalar el módulo 'crm'.\n" +" " #. module: base #: model:res.country,name:base.je msgid "Jersey" -msgstr "" +msgstr "Jersey" #. module: base #: model:ir.module.module,description:base.module_auth_anonymous @@ -4027,6 +4220,10 @@ msgid "" "==================================\n" " " msgstr "" +"\n" +"Permite el acceso anónimo a OpenERP.\n" +"==================================\n" +" " #. module: base #: view:res.lang:0 @@ -4084,6 +4281,14 @@ msgid "" "invite.\n" "\n" msgstr "" +"\n" +"Este módulo actualiza los memorándum dentro de OpenERP para usar un pad " +"externo.\n" +"=======================================================================\n" +"\n" +"Úselo para actualizar los textos de los memorándum en tiempo real con los " +"usuarios a los que invite.\n" +"\n" #. module: base #: code:addons/base/module/module.py:609 @@ -4109,7 +4314,7 @@ msgstr "Nauru" #: code:addons/base/res/res_company.py:152 #, python-format msgid "Reg" -msgstr "" +msgstr "Reg" #. module: base #: model:ir.model,name:base.model_ir_property @@ -4258,7 +4463,7 @@ msgstr "Compartir cualquier documento" #. module: base #: model:ir.module.module,summary:base.module_crm msgid "Leads, Opportunities, Phone Calls" -msgstr "" +msgstr "Iniciativas, oportunidades, llamadas telefónicas" #. module: base #: view:res.lang:0 @@ -4438,7 +4643,7 @@ msgstr "Por defecto" #. module: base #: model:ir.module.module,summary:base.module_lunch msgid "Lunch Order, Meal, Food" -msgstr "" +msgstr "Pedidos de comida" #. module: base #: view:ir.model.fields:0 @@ -4494,7 +4699,7 @@ msgstr "Expresión" #. module: base #: view:res.company:0 msgid "Header/Footer" -msgstr "Cabecera / Pie de página" +msgstr "Encabezado / Pie de página" #. module: base #: help:ir.mail_server,sequence:0 @@ -4555,7 +4760,7 @@ msgstr "'código' debe ser único." #. module: base #: model:ir.module.module,shortdesc:base.module_knowledge msgid "Knowledge Management System" -msgstr "" +msgstr "Sistema de gestión del conocimiento" #. module: base #: view:workflow.activity:0 @@ -4618,6 +4823,10 @@ msgid "" "==========================\n" "\n" msgstr "" +"\n" +"Vista web del calendario de OpenERP.\n" +"===============================\n" +"\n" #. module: base #: selection:base.language.install,lang:0 @@ -4632,7 +4841,7 @@ msgstr "Tipo de secuencia" #. module: base #: view:base.language.export:0 msgid "Unicode/UTF-8" -msgstr "" +msgstr "Unicode/UTF-8" #. module: base #: selection:base.language.install,lang:0 @@ -4738,7 +4947,7 @@ msgstr "Guinea ecuatorial" #. module: base #: model:ir.module.module,shortdesc:base.module_web_api msgid "OpenERP Web API" -msgstr "" +msgstr "API de la web de OpenERP" #. module: base #: model:ir.module.module,description:base.module_l10n_fr_rib @@ -4792,7 +5001,7 @@ msgstr "ir.acciones.informe.xml" #. module: base #: model:res.country,name:base.ps msgid "Palestinian Territory, Occupied" -msgstr "" +msgstr "Palestina, Territorio ocupado de" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_ch @@ -4950,22 +5159,22 @@ msgstr "Compra" #. module: base #: selection:base.language.install,lang:0 msgid "Portuguese (BR) / Português (BR)" -msgstr "" +msgstr "Portugués (BR) / Português (BR)" #. module: base #: model:ir.model,name:base.model_ir_needaction_mixin msgid "ir.needaction_mixin" -msgstr "" +msgstr "Mezcla de acción necesaria" #. module: base #: view:base.language.export:0 msgid "This file was generated using the universal" -msgstr "" +msgstr "Este archivo se ha generado usando el universal" #. module: base #: model:res.partner.category,name:base.res_partner_category_7 msgid "IT Services" -msgstr "" +msgstr "Servicios TI" #. module: base #: model:ir.module.category,name:base.module_category_specific_industry_applications @@ -4981,7 +5190,7 @@ msgstr "Integración con Google Docs" #: code:addons/base/ir/ir_fields.py:328 #, python-format msgid "name" -msgstr "" +msgstr "nombre" #. module: base #: model:ir.module.module,description:base.module_mrp_operations @@ -5027,7 +5236,7 @@ msgstr "Saltar" #. module: base #: model:ir.module.module,shortdesc:base.module_event_sale msgid "Events Sales" -msgstr "" +msgstr "Ventas de eventos" #. module: base #: model:res.country,name:base.ls @@ -5109,7 +5318,7 @@ msgstr "Guardar" #. module: base #: field:ir.actions.report.xml,report_xml:0 msgid "XML Path" -msgstr "" +msgstr "Ruta XML" #. module: base #: model:res.country,name:base.bj @@ -5151,7 +5360,7 @@ msgstr "Clave" #. module: base #: field:res.company,rml_header:0 msgid "RML Header" -msgstr "Cabecera RML" +msgstr "Encabezado RML" #. module: base #: help:res.country,address_format:0 @@ -5205,7 +5414,7 @@ msgstr "Seguridad" #. module: base #: selection:base.language.install,lang:0 msgid "Portuguese / Português" -msgstr "" +msgstr "Portugués / Português" #. module: base #: code:addons/base/ir/ir_model.py:364 @@ -5223,7 +5432,7 @@ msgstr "Sólo si esta cuenta bancaria pertenece a su compañía" #: code:addons/base/ir/ir_fields.py:338 #, python-format msgid "Unknown sub-field '%s'" -msgstr "" +msgstr "Sub-campo '%s' desconocido" #. module: base #: model:res.country,name:base.za @@ -5329,6 +5538,10 @@ msgid "" "================\n" "\n" msgstr "" +"\n" +"API de la web de OpenERP.\n" +"======================\n" +"\n" #. module: base #: selection:res.request,state:0 @@ -5347,7 +5560,7 @@ msgstr "Fecha" #. module: base #: model:ir.module.module,shortdesc:base.module_event_moodle msgid "Event Moodle" -msgstr "" +msgstr "Evento Moodle" #. module: base #: model:ir.module.module,description:base.module_email_template @@ -5398,12 +5611,12 @@ msgstr "" #. module: base #: model:ir.ui.menu,name:base.menu_partner_category_form msgid "Partner Tags" -msgstr "" +msgstr "Etiquetas de empresa" #. module: base #: view:res.company:0 msgid "Preview Header/Footer" -msgstr "" +msgstr "Previsualizar encabezado/pie de página" #. module: base #: field:ir.ui.menu,parent_id:0 @@ -5437,12 +5650,12 @@ msgstr "Separador de decimales" #: code:addons/orm.py:5245 #, python-format msgid "Missing required value for the field '%s'." -msgstr "" +msgstr "Falta el valor requerido para el campo '%s'." #. module: base #: model:ir.model,name:base.model_res_partner_address msgid "res.partner.address" -msgstr "" +msgstr "Dirección de empresa" #. module: base #: view:ir.rule:0 @@ -5487,7 +5700,7 @@ msgstr "Isla de Man" #. module: base #: help:ir.actions.client,res_model:0 msgid "Optional model, mostly used for needactions." -msgstr "" +msgstr "Modelo opcional, usado en su mayoría para acciones requeridas." #. module: base #: field:ir.attachment,create_uid:0 @@ -5502,7 +5715,7 @@ msgstr "Isla Bouvet" #. module: base #: field:ir.model.constraint,type:0 msgid "Constraint Type" -msgstr "" +msgstr "Tipo de restricción" #. module: base #: field:res.company,child_ids:0 @@ -5563,6 +5776,10 @@ msgid "" "=======================\n" " " msgstr "" +"\n" +"Permite a los usuarios acceder.\n" +"==========================\n" +" " #. module: base #: model:res.country,name:base.zm @@ -5577,7 +5794,7 @@ msgstr "Iniciar asistente de configuración" #. module: base #: model:ir.module.module,summary:base.module_mrp msgid "Manufacturing Orders, Bill of Materials, Routing" -msgstr "" +msgstr "Órdenes de fabricación, lista de materiales, rutas de producción" #. module: base #: view:ir.module.module:0 @@ -5722,7 +5939,7 @@ msgstr "Configuración de la precisión decimal" #: model:ir.model,name:base.model_ir_actions_act_url #: selection:ir.ui.menu,action:0 msgid "ir.actions.act_url" -msgstr "" +msgstr "URL de acción" #. module: base #: model:ir.ui.menu,name:base.menu_translation_app @@ -5736,6 +5953,9 @@ msgid "" "

You should try others search criteria.

\n" " " msgstr "" +"

¡No se ha encontrado ningún módulo!

\n" +"

Debería intentar otros criterios de búsqueda.

\n" +" " #. module: base #: model:ir.model,name:base.model_ir_module_module @@ -5875,7 +6095,7 @@ msgstr "" #. module: base #: view:ir.translation:0 msgid "Comments" -msgstr "" +msgstr "Comentarios" #. module: base #: model:res.country,name:base.et @@ -5996,6 +6216,13 @@ msgid "" "membership products (schemes).\n" " " msgstr "" +"\n" +"Este módulo configura los módulos relacionados con una asociación.\n" +"==============================================================\n" +"\n" +"Instala el perfil para asociaciones para gestionar eventos, registros, " +"asociados y productos de asociados (esquemas).\n" +" " #. module: base #: model:ir.ui.menu,name:base.menu_base_config @@ -6033,7 +6260,7 @@ msgstr "" #: code:addons/base/ir/workflow/workflow.py:99 #, python-format msgid "Operation forbidden" -msgstr "" +msgstr "Operación prohibida" #. module: base #: view:ir.actions.server:0 @@ -6047,6 +6274,9 @@ msgid "" "deleting it (if you delete a native record rule, it may be re-created when " "you reload the module." msgstr "" +"Si desmarca el campo activo, se deshabilitará la regla de registro sin " +"eliminarla (si elimina una regla de registro nativa, se recreará cuando " +"recargue el módulo)." #. module: base #: selection:base.language.install,lang:0 @@ -6063,6 +6293,12 @@ msgid "" "Allows users to create custom dashboard.\n" " " msgstr "" +"\n" +"Deja al usuario crear un tablero personalizado.\n" +"========================================\n" +"\n" +"Permite al usuario crear un tablero personalizado.\n" +" " #. module: base #: model:ir.actions.act_window,name:base.ir_access_act @@ -6198,12 +6434,16 @@ msgid "" "========================\n" "\n" msgstr "" +"\n" +"Vista kanban de OpenERP web.\n" +"==========================\n" +"\n" #. module: base #: code:addons/base/ir/ir_fields.py:183 #, python-format msgid "'%s' does not seem to be a number for field '%%(field)s'" -msgstr "" +msgstr "'%s' no parece ser un número para el campo '%%(field)s'" #. module: base #: help:res.country.state,name:0 @@ -6251,7 +6491,7 @@ msgstr "Objeto afectado por esta regla" #. module: base #: selection:ir.actions.act_window,target:0 msgid "Inline View" -msgstr "" +msgstr "Vista incorporada" #. module: base #: field:ir.filters,is_default:0 @@ -6390,7 +6630,7 @@ msgstr "Malasia" #: code:addons/base/ir/ir_sequence.py:131 #, python-format msgid "Increment number must not be zero." -msgstr "" +msgstr "El número de incremento no debe ser cero." #. module: base #: model:ir.module.module,shortdesc:base.module_account_cancel @@ -6400,7 +6640,7 @@ msgstr "Cancelar asientos" #. module: base #: field:res.partner,tz_offset:0 msgid "Timezone offset" -msgstr "" +msgstr "Zona horaria" #. module: base #: model:ir.module.module,description:base.module_marketing_campaign @@ -6461,6 +6701,13 @@ msgid "" "Price and Cost Price.\n" " " msgstr "" +"\n" +"Este módulo añadir el campo 'Margen' en los pedidos de venta.\n" +"===================================================\n" +"\n" +"Da la rentabilidad calculando la diferencia entre el precio unitario y el " +"precio de coste.\n" +" " #. module: base #: selection:ir.actions.todo,type:0 @@ -6498,6 +6745,8 @@ msgid "" "the user will be able to manage his own human resources stuff (leave " "request, timesheets, ...), if he is linked to an employee in the system." msgstr "" +"el usuario podrá gestionar su propio material de recursos humanos (petición " +"de ausencia, partes de horas, ...), si se enlaza a un empleado en el sistema." #. module: base #: code:addons/orm.py:2247 @@ -6594,7 +6843,7 @@ msgstr "ir.cron" #. module: base #: model:res.country,name:base.cw msgid "Curaçao" -msgstr "" +msgstr "Curaçao" #. module: base #: view:ir.sequence:0 @@ -6657,6 +6906,7 @@ msgstr "Rastro de auditoría" #, python-format msgid "Value '%s' not found in selection field '%%(field)s'" msgstr "" +"El valor '%s' no se ha encontrado en el campo de selección '%%(field)s'" #. module: base #: model:res.country,name:base.sd @@ -6763,7 +7013,7 @@ msgstr "Algunas veces llamado BIC o Swift" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_in msgid "Indian - Accounting" -msgstr "" +msgstr "India - Contabilidad" #. module: base #: field:res.partner,mobile:0 @@ -6796,12 +7046,12 @@ msgstr "Formato de hora" #. module: base #: field:res.company,rml_header3:0 msgid "RML Internal Header for Landscape Reports" -msgstr "" +msgstr "Encabezado interno RML para informes apaisados" #. module: base #: model:res.groups,name:base.group_partner_manager msgid "Contact Creation" -msgstr "" +msgstr "Creación de contactos" #. module: base #: view:ir.module.module:0 @@ -6853,6 +7103,12 @@ msgid "" "This module provides the core of the OpenERP Web Client.\n" " " msgstr "" +"\n" +"Módulo principal de OpenERP web.\n" +"=============================\n" +"\n" +"Este módulo provee el núcleo del cliente web de OpenERP.\n" +" " #. module: base #: view:ir.sequence:0 @@ -6959,12 +7215,12 @@ msgstr "Elementos de trabajo" #: code:addons/base/res/res_bank.py:195 #, python-format msgid "Invalid Bank Account Type Name format." -msgstr "" +msgstr "Formato de nombre de tipo de banco no válido." #. module: base #: view:ir.filters:0 msgid "Filters visible only for one user" -msgstr "" +msgstr "Filtros visibles sólo para un usuario" #. module: base #: model:ir.model,name:base.model_ir_attachment @@ -7035,12 +7291,12 @@ msgstr "" #. module: base #: model:res.groups,comment:base.group_hr_user msgid "the user will be able to approve document created by employees." -msgstr "" +msgstr "el usuario podrá aprobar documentos creados por los empleados." #. module: base #: field:ir.ui.menu,needaction_enabled:0 msgid "Target model uses the need action mechanism" -msgstr "" +msgstr "El modelo objetivo usa el mecanismo de acción requerida" #. module: base #: help:ir.model.fields,relation:0 @@ -7094,7 +7350,7 @@ msgstr "¡Archivo de módulo importado con éxito!" #: view:ir.model.constraint:0 #: model:ir.ui.menu,name:base.ir_model_constraint_menu msgid "Model Constraints" -msgstr "" +msgstr "Restricciones del modelo" #. module: base #: model:ir.module.module,shortdesc:base.module_hr_timesheet @@ -7116,6 +7372,10 @@ msgid "" "============================================================\n" " " msgstr "" +"\n" +"Contabilidad china\n" +"============================================================\n" +" " #. module: base #: model:res.country,name:base.lc @@ -7141,7 +7401,7 @@ msgstr "Somalia" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_doctor msgid "Dr." -msgstr "" +msgstr "Dr." #. module: base #: model:res.groups,name:base.group_user @@ -7206,7 +7466,7 @@ msgstr "Copia de" #. module: base #: field:ir.model.data,display_name:0 msgid "Record Name" -msgstr "" +msgstr "Nombre del registro" #. module: base #: model:ir.model,name:base.model_ir_actions_client @@ -7217,12 +7477,12 @@ msgstr "ir.actions.client" #. module: base #: model:res.country,name:base.io msgid "British Indian Ocean Territory" -msgstr "Territorio Británico del Océano Índico" +msgstr "Territorio británico del Océano Índico" #. module: base #: model:ir.actions.server,name:base.action_server_module_immediate_install msgid "Module Immediate Install" -msgstr "" +msgstr "Módulo de instalación inmediata" #. module: base #: view:ir.actions.server:0 @@ -7256,6 +7516,12 @@ msgid "" "includes\n" "taxes and the Quetzal currency." msgstr "" +"\n" +"Éste es el módulo base para gestionar el plan de cuentas para Guatemala.\n" +"=====================================================================\n" +"\n" +"Agrega una nomenclatura contable para Guatemala. También incluye impuestos y " +"la moneda del Quetzal." #. module: base #: selection:res.lang,direction:0 @@ -7292,7 +7558,7 @@ msgstr "Nombre completo" #. module: base #: view:ir.attachment:0 msgid "on" -msgstr "" +msgstr "en" #. module: base #: code:addons/base/module/module.py:284 @@ -7349,7 +7615,7 @@ msgstr "En múltiples doc." #: view:res.users:0 #: view:wizard.ir.model.menu.create:0 msgid "or" -msgstr "" +msgstr "o" #. module: base #: model:ir.module.module,shortdesc:base.module_account_accountant @@ -7574,6 +7840,10 @@ msgid "" "use the same timezone that is otherwise used to pick and render date and " "time values: your computer's timezone." msgstr "" +"Zona horaria de la empresa, usada para mostrar la fecha y hora adecuadas en " +"los informes impresos. Es importante establecer un valor para este campo. " +"Debería usar la misma zona horaria que se coge en caso contrario para " +"mostrar los valores de fecha y hora: la zona horaria de su ordenador." #. module: base #: model:ir.module.module,shortdesc:base.module_account_analytic_default @@ -7588,7 +7858,7 @@ msgstr "mdx" #. module: base #: view:ir.cron:0 msgid "Scheduled Action" -msgstr "" +msgstr "Acción planificada" #. module: base #: model:res.country,name:base.bi @@ -7628,6 +7898,12 @@ msgid "" "=============\n" " " msgstr "" +"\n" +"Este módulo añade el menú y características de eventos a su portal si " +"'event' y 'portal' están instalados.\n" +"=============================================================================" +"=============\n" +" " #. module: base #: help:ir.sequence,number_next:0 @@ -7637,12 +7913,12 @@ msgstr "Número siguiente de esta secuencia." #. module: base #: view:res.partner:0 msgid "at" -msgstr "" +msgstr "en" #. module: base #: view:ir.rule:0 msgid "Rule Definition (Domain Filter)" -msgstr "" +msgstr "Definición de regla (filtro de dominio)" #. module: base #: selection:ir.actions.act_url,target:0 @@ -7704,12 +7980,12 @@ msgstr "Contraseña" #. module: base #: model:ir.module.module,shortdesc:base.module_portal_claim msgid "Portal Claim" -msgstr "" +msgstr "Reclamaciones en el portal" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_pe msgid "Peru Localization Chart Account" -msgstr "" +msgstr "Plan de cuentas peruano" #. module: base #: model:ir.module.module,description:base.module_auth_oauth @@ -7718,6 +7994,9 @@ msgid "" "Allow users to login through OAuth2 Provider.\n" "=============================================\n" msgstr "" +"\n" +"Permite a los usuarios iniciar sesión a través de un proveedor OAuth2.\n" +"==========================================================\n" #. module: base #: model:ir.actions.act_window,name:base.action_model_fields @@ -7737,7 +8016,7 @@ msgstr "Empleados" #. module: base #: field:res.company,rml_header2:0 msgid "RML Internal Header" -msgstr "Cabecera interna RML" +msgstr "Encabezado interno RML" #. module: base #: field:ir.actions.act_window,search_view_id:0 @@ -7747,7 +8026,7 @@ msgstr "Ref. vista búsqueda" #. module: base #: help:res.users,partner_id:0 msgid "Partner-related data of the user" -msgstr "" +msgstr "Datos del usuario relativos a la empresa" #. module: base #: model:ir.module.module,description:base.module_crm_todo @@ -7757,6 +8036,10 @@ msgid "" "==========================================\n" " " msgstr "" +"\n" +"Lista de cosas por hacer para las iniciativas y oportunidades del CRM.\n" +"========================================================\n" +" " #. module: base #: view:ir.mail_server:0 @@ -7863,7 +8146,7 @@ msgstr "Canadá" #. module: base #: view:base.language.export:0 msgid "Launchpad" -msgstr "" +msgstr "Launchpad" #. module: base #: help:res.currency.rate,currency_rate_type_id:0 @@ -7930,12 +8213,12 @@ msgstr "Campo personalizado" #. module: base #: model:ir.module.module,summary:base.module_account_accountant msgid "Financial and Analytic Accounting" -msgstr "" +msgstr "Contabilidad financiera y analítica" #. module: base #: model:ir.module.module,shortdesc:base.module_portal_project msgid "Portal Project" -msgstr "" +msgstr "Proyectos en el portal" #. module: base #: model:res.country,name:base.cc @@ -7968,7 +8251,7 @@ msgstr "Campos tipo de banco" #. module: base #: constraint:ir.rule:0 msgid "Rules can not be applied on Transient models." -msgstr "" +msgstr "Las reglas no se pueden aplicar en modelos transitorios." #. module: base #: selection:base.language.install,lang:0 @@ -8051,12 +8334,12 @@ msgstr "Asistente" #: code:addons/base/ir/ir_fields.py:304 #, python-format msgid "database id" -msgstr "" +msgstr "id de la base de datos" #. module: base #: model:ir.module.module,shortdesc:base.module_base_import msgid "Base import" -msgstr "" +msgstr "Importación base" #. module: base #: report:ir.module.reference:0 @@ -8089,6 +8372,8 @@ msgid "" "Select this if you want to set company's address information for this " "contact" msgstr "" +"Seleccione esto si quiere establecer la información de la dirección de la " +"compañía para este contacto" #. module: base #: field:ir.default,field_name:0 @@ -8127,6 +8412,8 @@ msgid "" "This field holds the image used as avatar for this contact, limited to " "1024x1024px" msgstr "" +"Este campo contiene la imagen utilizada como avatar para este contacto, " +"limitada a 1024x1024 px" #. module: base #: model:res.country,name:base.to @@ -8209,7 +8496,7 @@ msgstr "Numeración de la secuencia de asientos" #. module: base #: view:base.language.export:0 msgid "POEdit" -msgstr "" +msgstr "POEdit" #. module: base #: view:ir.values:0 @@ -8219,12 +8506,12 @@ msgstr "Acciones cliente" #. module: base #: field:res.partner.bank.type,field_ids:0 msgid "Type Fields" -msgstr "" +msgstr "Campos de tipo" #. module: base #: model:ir.module.module,summary:base.module_hr_recruitment msgid "Jobs, Recruitment, Applications, Job Interviews" -msgstr "" +msgstr "Trabajos, reclutamiento, solicitudes, entrevista de trabajo" #. module: base #: code:addons/base/module/module.py:513 @@ -8253,7 +8540,7 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_pad_project msgid "Pad on tasks" -msgstr "" +msgstr "Pad en las tareas" #. module: base #: model:ir.model,name:base.model_base_update_translations @@ -8271,7 +8558,7 @@ msgstr "¡Aviso!" #. module: base #: view:ir.rule:0 msgid "Full Access Right" -msgstr "" +msgstr "Derecho de acceso total" #. module: base #: field:res.partner.category,parent_id:0 @@ -8286,7 +8573,7 @@ msgstr "Finlandia" #. module: base #: model:ir.module.module,shortdesc:base.module_web_shortcuts msgid "Web Shortcuts" -msgstr "" +msgstr "Accesos rápidos para web" #. module: base #: view:res.partner:0 @@ -8330,17 +8617,17 @@ msgstr "Contabilidad analítica" #. module: base #: model:ir.model,name:base.model_ir_model_constraint msgid "ir.model.constraint" -msgstr "" +msgstr "Restricción de modelo" #. module: base #: model:ir.module.module,shortdesc:base.module_web_graph msgid "Graph Views" -msgstr "" +msgstr "Vistas de gráfico" #. module: base #: help:ir.model.relation,name:0 msgid "PostgreSQL table name implementing a many2many relation." -msgstr "" +msgstr "Nombre de la tabla PostgreSQL que implementa una relación many2many." #. module: base #: model:ir.module.module,description:base.module_base @@ -8349,6 +8636,9 @@ msgid "" "The kernel of OpenERP, needed for all installation.\n" "===================================================\n" msgstr "" +"\n" +"El núcleo de OpenERP, necesario para todas las instalaciones.\n" +"===================================================\n" #. module: base #: model:ir.model,name:base.model_ir_server_object_lines @@ -8373,7 +8663,7 @@ msgstr "Kuwait" #. module: base #: model:ir.module.module,shortdesc:base.module_account_followup msgid "Payment Follow-up Management" -msgstr "" +msgstr "Gestión de seguimientos de pago" #. module: base #: field:workflow.workitem,inst_id:0 @@ -8444,7 +8734,7 @@ msgstr "Siempre puede ser buscado" #. module: base #: help:res.country.state,code:0 msgid "The state code in max. three chars." -msgstr "" +msgstr "El código de provincia en tres caracteres como máximo." #. module: base #: model:res.country,name:base.hk @@ -8454,7 +8744,7 @@ msgstr "Hong Kong" #. module: base #: model:ir.module.module,shortdesc:base.module_portal_sale msgid "Portal Sale" -msgstr "" +msgstr "Ventas en el portal" #. module: base #: field:ir.default,ref_id:0 @@ -8469,7 +8759,7 @@ msgstr "Filipinas" #. module: base #: model:ir.module.module,summary:base.module_hr_timesheet_sheet msgid "Timesheets, Attendances, Activities" -msgstr "" +msgstr "Partes de horas, asistencias, actividades" #. module: base #: model:res.country,name:base.ma @@ -8497,6 +8787,8 @@ msgid "" "Translation features are unavailable until you install an extra OpenERP " "translation." msgstr "" +"Las características de traducción no están disponibles hasta que no instale " +"una traducción extra de OpenERP." #. module: base #: model:ir.module.module,description:base.module_l10n_nl @@ -8585,7 +8877,7 @@ msgstr "Informe detallado de objetos" #. module: base #: model:ir.module.module,shortdesc:base.module_web_analytics msgid "Google Analytics" -msgstr "" +msgstr "Google Analytics" #. module: base #: model:ir.module.module,description:base.module_note @@ -8613,7 +8905,7 @@ msgstr "Dominica" #. module: base #: field:ir.translation,name:0 msgid "Translated field" -msgstr "" +msgstr "Campo traducible" #. module: base #: model:ir.module.module,shortdesc:base.module_stock_location @@ -8633,17 +8925,17 @@ msgstr "Nepal" #. module: base #: model:ir.module.module,shortdesc:base.module_document_page msgid "Document Page" -msgstr "" +msgstr "Página de documento" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_ar msgid "Argentina Localization Chart Account" -msgstr "" +msgstr "Plan de cuentas argentino" #. module: base #: field:ir.module.module,description_html:0 msgid "Description HTML" -msgstr "" +msgstr "Descripción HTML" #. module: base #: help:res.groups,implied_ids:0 @@ -8654,7 +8946,7 @@ msgstr "" #. module: base #: model:ir.module.module,summary:base.module_note msgid "Sticky notes, Collaborative, Memos" -msgstr "" +msgstr "Notas fijadas, colaborativos, memorándums" #. module: base #: model:ir.module.module,shortdesc:base.module_hr_attendance @@ -8693,6 +8985,9 @@ msgid "" "If the selected language is loaded in the system, all documents related to " "this contact will be printed in this language. If not, it will be English." msgstr "" +"Si el idioma seleccionado está cargado en el sistema, todos los documentos " +"relacionados con el contacto se imprimirán en este idioma. Si no, se " +"imprimirán en inglés." #. module: base #: model:ir.module.module,description:base.module_hr_evaluation @@ -8789,7 +9084,7 @@ msgstr "Esloveno / slovenščina" #. module: base #: field:res.currency,position:0 msgid "Symbol Position" -msgstr "" +msgstr "Posición del símbolo" #. module: base #: model:ir.module.module,description:base.module_l10n_de @@ -8827,6 +9122,10 @@ msgid "" "\n" "(Document type: %s)" msgstr "" +"Para este tipo de documento, puede acceder sólo a los registros creados por " +"uno mismo.\n" +"\n" +"(Tipo de documento: %s)" #. module: base #: view:base.language.export:0 @@ -8839,6 +9138,8 @@ msgid "" "This field specifies whether the model is transient or not (i.e. if records " "are automatically deleted from the database or not)" msgstr "" +"Este campo especifica si el modelo es transitorio o no (por ejemplo si los " +"registros se eliminan automáticamente de la base de datos o no)" #. module: base #: code:addons/base/ir/ir_mail_server.py:441 @@ -8882,6 +9183,7 @@ msgstr "Lo siento, no está autorizado a eliminar este documento." #: constraint:ir.rule:0 msgid "Rules can not be applied on the Record Rules model." msgstr "" +"Las reglas no se han podido aplicar en el modelo de reglas de registro." #. module: base #: field:res.partner,supplier:0 @@ -8899,7 +9201,7 @@ msgstr "Multi acciones" #. module: base #: model:ir.module.module,summary:base.module_mail msgid "Discussions, Mailing Lists, News" -msgstr "" +msgstr "Discusiones, listas de correo, noticias" #. module: base #: model:ir.module.module,description:base.module_fleet @@ -8950,7 +9252,7 @@ msgstr "Samoa Americana" #. module: base #: view:ir.attachment:0 msgid "My Document(s)" -msgstr "" +msgstr "Mis documentos" #. module: base #: help:ir.actions.act_window,res_model:0 @@ -9000,7 +9302,7 @@ msgstr "Error de usuario" #. module: base #: model:ir.module.module,summary:base.module_project_issue msgid "Support, Bug Tracker, Helpdesk" -msgstr "" +msgstr "Soporte, gestión de errores, mesa de ayuda" #. module: base #: model:res.country,name:base.ae @@ -9014,6 +9316,8 @@ msgid "" "related to a model that uses the need_action mechanism, this field is set to " "true. Otherwise, it is false." msgstr "" +"Si la acción de menú es act_window, y si esta acción está relacionado con un " +"modelo que usa el mecanismo de acción requerida, este campo estará marcado." #. module: base #: code:addons/orm.py:3929 @@ -9226,11 +9530,15 @@ msgid "" "=============================\n" "\n" msgstr "" +"\n" +"Vista Gantt de OpenERP web.\n" +"=============================\n" +"\n" #. module: base #: model:ir.module.module,shortdesc:base.module_base_status msgid "State/Stage Management" -msgstr "" +msgstr "Gestión de estados/etapas" #. module: base #: model:ir.module.category,name:base.module_category_warehouse_management @@ -9259,6 +9567,18 @@ msgid "" "\n" " " msgstr "" +"\n" +"Este módulo muestra los procesos básicos involucrados en los módulos " +"seleccionados y en la secuencia en los que ocurren.\n" +"=============================================================================" +"=========================\n" +"\n" +"**Nota:** Esto aplica a todos los módulos conteniendo " +"modulename_process.xml.\n" +"\n" +"**e.g.** product/process/product_process.xml.\n" +"\n" +" " #. module: base #: view:res.lang:0 @@ -9284,7 +9604,7 @@ msgstr "Informe" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_prof msgid "Prof." -msgstr "" +msgstr "Prof." #. module: base #: code:addons/base/ir/ir_mail_server.py:239 @@ -9320,7 +9640,7 @@ msgstr "Ninguno" #. module: base #: model:ir.module.module,shortdesc:base.module_hr_holidays msgid "Leave Management" -msgstr "" +msgstr "Gestión de ausencias" #. module: base #: model:res.company,overdue_msg:base.main_company @@ -9336,6 +9656,16 @@ msgid "" "Thank you in advance for your cooperation.\n" "Best Regards," msgstr "" +"Estimado/a señor/señora,\n" +"\n" +"Nuestros registros indican que algunos pagos en nuestra cuenta están aún " +"pendientes. Puede encontrar los detalles a continuación.\n" +"Si la cantidad ha sido ya pagada, por favor, descarte esta notificación. En " +"otro caso, por favor remítanos el importe total abajo indicado.\n" +"Si tiene alguna pregunta con respecto a su cuenta, por favor contáctenos.\n" +"\n" +"Gracias de antemano por su colaboración.\n" +"Saludos cordiales," #. module: base #: view:ir.module.category:0 @@ -9360,7 +9690,7 @@ msgstr "Mali" #. module: base #: model:ir.ui.menu,name:base.menu_project_config_project msgid "Stages" -msgstr "" +msgstr "Etapas" #. module: base #: selection:base.language.install,lang:0 @@ -9387,6 +9717,12 @@ msgid "" "==========================================================\n" " " msgstr "" +"\n" +"Este módulo añade una lista de empleados a su página de contacto del portal " +"si 'hr' y 'portal_crm' (que crea la página de contacto) están instalados.\n" +"=============================================================================" +"============================================\n" +" " #. module: base #: model:res.country,name:base.bn @@ -9409,7 +9745,7 @@ msgstr "Interfaz de usuario" #. module: base #: model:ir.module.module,shortdesc:base.module_mrp_byproduct msgid "MRP Byproducts" -msgstr "" +msgstr "Subproductos MRP" #. module: base #: field:res.request,ref_partner_id:0 @@ -9419,7 +9755,7 @@ msgstr "Ref. empresa" #. module: base #: model:ir.module.module,shortdesc:base.module_hr_expense msgid "Expense Management" -msgstr "" +msgstr "Gestión de gastos" #. module: base #: field:ir.attachment,create_date:0 @@ -9453,6 +9789,12 @@ msgid "" "Indian accounting chart and localization.\n" " " msgstr "" +"\n" +"Plan de cuentas indio.\n" +"====================================\n" +"\n" +"Plan de cuentas y localización indios.\n" +" " #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_uy @@ -9481,6 +9823,14 @@ msgid "" "If set to true it allows user to cancel entries & invoices.\n" " " msgstr "" +"\n" +"Permite cancelar asientos contables.\n" +"===============================\n" +"\n" +"Este módulo añade el campo 'Permitir cancelar asientos' en la vista de " +"formulario de los diarios contables.\n" +"Si está establecido a True, permitirá cancelar asientos y facturas.\n" +" " #. module: base #: model:ir.module.module,shortdesc:base.module_plugin @@ -9567,7 +9917,7 @@ msgstr "%H - Hora (reloj 24-horas) [00,23]." #. module: base #: field:ir.model.fields,on_delete:0 msgid "On Delete" -msgstr "" +msgstr "Al eliminar" #. module: base #: code:addons/base/ir/ir_model.py:340 @@ -9602,6 +9952,13 @@ msgid "" "=======================================================\n" " " msgstr "" +"\n" +"Este módulo añade una página de contacto (con un formulario de contacto " +"creando una iniciativa cuando se envía) al portal si 'crm' y 'portal' están " +"instalados.\n" +"=============================================================================" +"=======================================================\n" +" " #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_us @@ -9627,7 +9984,7 @@ msgstr "Cancelar" #: code:addons/orm.py:1509 #, python-format msgid "Unknown database identifier '%s'" -msgstr "" +msgstr "Identificador de base de datos '%s' desconocido" #. module: base #: selection:base.language.export,format:0 @@ -9642,6 +9999,10 @@ msgid "" "=========================\n" "\n" msgstr "" +"\n" +"Vista de diagrama de Openerp web.\n" +"==============================\n" +"\n" #. module: base #: model:res.country,name:base.nt @@ -9681,7 +10042,7 @@ msgstr "" #: code:addons/base/ir/ir_fields.py:317 #, python-format msgid "external id" -msgstr "" +msgstr "id. externo" #. module: base #: view:ir.model:0 @@ -9724,6 +10085,12 @@ msgid "" "=====================\n" " " msgstr "" +"\n" +"Este módulo añade el menú y las características de las incidencias al portal " +"si 'project_issue' y 'portal' están instalados.\n" +"=============================================================================" +"=====================\n" +" " #. module: base #: view:res.lang:0 @@ -9738,7 +10105,7 @@ msgstr "Alemania" #. module: base #: model:ir.module.module,shortdesc:base.module_auth_oauth msgid "OAuth2 Authentication" -msgstr "" +msgstr "Autentificación OAuth2" #. module: base #: view:workflow:0 @@ -9749,6 +10116,12 @@ msgid "" "default value. If you don't do that, your customization will be overwrited " "at the next update or upgrade to a future version of OpenERP." msgstr "" +"Cuando se personaliza un flujo de trabajo, asegúrese de no modificar un nodo " +"o flecha existente, en lugar de añadir nuevos nodos o flechas. Si necesita " +"absolutamente modificar un nodo o flecha, sólo puede cambiar los campos que " +"están vacíos o establecidos a su valor por defecto. Si no hace eso, la " +"personalización será sobrescrita en la próxima actualización a una futura " +"versión de OpenERP." #. module: base #: report:ir.module.reference:0 @@ -9781,7 +10154,7 @@ msgstr "¡El código de moneda debe ser único por compañía!" #: code:addons/base/module/wizard/base_export_language.py:38 #, python-format msgid "New Language (Empty translation template)" -msgstr "" +msgstr "Nuevo idioma (Plantilla de traducción vacía)" #. module: base #: model:ir.module.module,description:base.module_auth_reset_password @@ -9794,6 +10167,14 @@ msgid "" "Allow administrator to click a button to send a \"Reset Password\" request " "to a user.\n" msgstr "" +"\n" +"Restablece la contraseña\n" +"=====================\n" +"\n" +"Permite a los usuarios restablecer su contraseña desde la página de inicio " +"de sesión.\n" +"Permite a los administradores pulsar un botón para enviar una petición de " +"restablecimiento de la contraseña a los usuarios.\n" #. module: base #: help:ir.actions.server,email:0 @@ -9863,7 +10244,7 @@ msgstr "Egipto" #. module: base #: view:ir.attachment:0 msgid "Creation" -msgstr "" +msgstr "Creación" #. module: base #: help:ir.actions.server,model_id:0 @@ -9907,7 +10288,7 @@ msgstr "Descripción de campos" #. module: base #: model:ir.module.module,shortdesc:base.module_analytic_contract_hr_expense msgid "Contracts Management: hr_expense link" -msgstr "" +msgstr "Gestión de contratos: enlace con hr_expense" #. module: base #: view:ir.attachment:0 @@ -9926,7 +10307,7 @@ msgstr "Agrupar por..." #. module: base #: view:base.module.update:0 msgid "Module Update Result" -msgstr "" +msgstr "Resultado de actualización de módulo" #. module: base #: model:ir.module.module,description:base.module_analytic_contract_hr_expense @@ -9937,6 +10318,11 @@ msgid "" "=============================================================================" "=========================\n" msgstr "" +"\n" +"Este módulo modifica la vista de cuenta analítica para mostrar algunos datos " +"relativos al módulo 'hr_expense'.\n" +"=============================================================================" +"=============\n" #. module: base #: field:res.partner,use_parent_address:0 @@ -9946,7 +10332,7 @@ msgstr "Utilizar la dirección de la empresa" #. module: base #: model:ir.module.module,summary:base.module_hr_holidays msgid "Holidays, Allocation and Leave Requests" -msgstr "" +msgstr "Vacaciones, asignaciones y peticiones de ausencia" #. module: base #: model:ir.module.module,description:base.module_web_hello @@ -9956,6 +10342,10 @@ msgid "" "===========================\n" "\n" msgstr "" +"\n" +"Módulo de ejemplo de OpenERP web.\n" +"===============================\n" +"\n" #. module: base #: selection:ir.module.module,state:0 @@ -9993,6 +10383,14 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"Pulse para añadir un contacto en su libreta de direcciones.\n" +"

\n" +"OpenERP le ayuda a gestionar todas las actividades relacionadas con los " +"proveedores: discusiones, historial de oportunidades de negocio, documentos, " +"etc.\n" +"

\n" +" " #. module: base #: model:res.country,name:base.lr @@ -10007,6 +10405,10 @@ msgid "" "=======================\n" "\n" msgstr "" +"\n" +"Suite de prueba de OpenERP web.\n" +"=============================\n" +"\n" #. module: base #: view:ir.model:0 @@ -10151,6 +10553,8 @@ msgstr "Campaña de marketing - Demo" msgid "" "Can not create Many-To-One records indirectly, import the field separately" msgstr "" +"No se puede crear un registro many2one indirectamente. Importe el campo por " +"separado." #. module: base #: field:ir.cron,interval_type:0 @@ -10193,7 +10597,7 @@ msgstr "China - Contabilidad" #. module: base #: sql_constraint:ir.model.constraint:0 msgid "Constraints with the same name are unique per module." -msgstr "" +msgstr "Las restricciones con el mismo nombre son únicas por módulo." #. module: base #: model:ir.module.module,description:base.module_report_intrastat @@ -10205,6 +10609,12 @@ msgid "" "This module gives the details of the goods traded between the countries of\n" "European Union." msgstr "" +"\n" +"Un módulo que añade informes intrastat.\n" +"=====================================\n" +"\n" +"Este módulo ofrece detalles de los bienes comerciados entre países de la " +"Unión Europea." #. module: base #: help:ir.actions.server,loop_action:0 @@ -10238,7 +10648,7 @@ msgstr "res.solicitud" #. module: base #: field:res.partner,image_medium:0 msgid "Medium-sized image" -msgstr "" +msgstr "Imagen mediana" #. module: base #: view:ir.model:0 @@ -10265,7 +10675,7 @@ msgstr "Contenido del archivo" #: view:ir.model.relation:0 #: model:ir.ui.menu,name:base.ir_model_relation_menu msgid "ManyToMany Relations" -msgstr "" +msgstr "Relaciones many2many" #. module: base #: model:res.country,name:base.pa @@ -10336,7 +10746,7 @@ msgstr "Portal" #. module: base #: selection:ir.translation,state:0 msgid "To Translate" -msgstr "" +msgstr "A traducir" #. module: base #: code:addons/base/ir/ir_fields.py:295 @@ -10377,7 +10787,7 @@ msgstr "" #. module: base #: help:ir.model.constraint,name:0 msgid "PostgreSQL constraint or foreign key name." -msgstr "" +msgstr "Restricción PostgreSQL o nombre de la clave externa." #. module: base #: view:res.lang:0 @@ -10397,17 +10807,17 @@ msgstr "Guinea Bissau" #. module: base #: field:ir.actions.report.xml,header:0 msgid "Add RML Header" -msgstr "Añadir cabecera RML" +msgstr "Añadir encabezado RML" #. module: base #: help:res.company,rml_footer:0 msgid "Footer text displayed at the bottom of all reports." -msgstr "" +msgstr "Texto mostrado en el pie de página de todos los informes." #. module: base #: model:ir.module.module,shortdesc:base.module_note_pad msgid "Memos pad" -msgstr "" +msgstr "Pad de memorándums" #. module: base #: model:ir.module.module,description:base.module_pad @@ -10459,7 +10869,7 @@ msgstr "Otras acciones" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_be_coda msgid "Belgium - Import Bank CODA Statements" -msgstr "" +msgstr "Bélgica - Importar extractos bancarios CODA" #. module: base #: selection:ir.actions.todo,state:0 @@ -10513,7 +10923,7 @@ msgstr "Italia" #. module: base #: model:res.groups,name:base.group_sale_salesman msgid "See Own Leads" -msgstr "" +msgstr "Mostrar las iniciativas propias" #. module: base #: view:ir.actions.todo:0 @@ -10524,7 +10934,7 @@ msgstr "Para ejecutar" #. module: base #: model:ir.module.module,shortdesc:base.module_portal_hr_employees msgid "Portal HR employees" -msgstr "" +msgstr "Empleados de RRHH en el portal" #. module: base #: selection:base.language.install,lang:0 @@ -10543,6 +10953,8 @@ msgid "" "Insufficient fields to generate a Calendar View for %s, missing a date_stop " "or a date_delay" msgstr "" +"Campos insuficientes para generar una vista de calendario para %s. Falta un " +"campo date_stop o date_delay." #. module: base #: field:workflow.activity,action:0 @@ -10597,6 +11009,15 @@ msgid "" "associated to every resource. It also manages the leaves of every resource.\n" " " msgstr "" +"\n" +"Módulo para la gestión de recursos.\n" +"===============================\n" +"\n" +"Un recurso representa algo que puede ser planificado (un desarrollador en " +"una tarea o un centro de trabajo en una orden de fabricación). Este módulo " +"gestiona un calendario asociado a cada recurso. También gestiona las " +"ausencias de cada recurso.\n" +" " #. module: base #: model:ir.model,name:base.model_ir_translation @@ -10618,7 +11039,7 @@ msgstr "" #: model:ir.actions.act_window,name:base.action_view_base_module_upgrade #, python-format msgid "Apply Schedule Upgrade" -msgstr "" +msgstr "Aplicar actualización programada" #. module: base #: view:workflow.activity:0 @@ -10651,6 +11072,8 @@ msgid "" "One of the documents you are trying to access has been deleted, please try " "again after refreshing." msgstr "" +"Uno de los documentos al que está intentado acceder ha sido eliminado. " +"Inténtelo por favor de nuevo tras actualizar." #. module: base #: model:ir.model,name:base.model_ir_mail_server @@ -10663,6 +11086,8 @@ msgid "" "If the target model uses the need action mechanism, this field gives the " "number of actions the current user has to perform." msgstr "" +"Si el modelo objetivo usa el mecanismo de acción requerida, este campo da el " +"número de acciones que el usuario tiene que realizar." #. module: base #: selection:base.language.install,lang:0 @@ -10759,7 +11184,7 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_sale_stock msgid "Sales and Warehouse Management" -msgstr "" +msgstr "Gestión de ventas y almacén" #. module: base #: field:ir.model.fields,model:0 @@ -10829,6 +11254,8 @@ msgstr "Martinica (Francia)" #: help:res.partner,is_company:0 msgid "Check if the contact is a company, otherwise it is a person" msgstr "" +"Marque esta casilla si el contacto es una compañía. En caso contrario, será " +"una persona." #. module: base #: view:ir.sequence.type:0 @@ -10839,7 +11266,7 @@ msgstr "Tipo de secuencias" #: code:addons/base/res/res_bank.py:195 #, python-format msgid "Formating Error" -msgstr "" +msgstr "Error de formato" #. module: base #: model:res.country,name:base.ye @@ -10977,7 +11404,7 @@ msgstr "Email" #. module: base #: model:res.partner.category,name:base.res_partner_category_12 msgid "Office Supplies" -msgstr "" +msgstr "Material de oficina" #. module: base #: code:addons/custom.py:550 @@ -11051,6 +11478,32 @@ msgid "" " Reporting / Accounting / **Follow-ups Analysis\n" "\n" msgstr "" +"\n" +"Módulo para automatizar las cartas para facturas impagadas, con múltiples " +"niveles de aviso.\n" +"=============================================================================" +"====\n" +"\n" +"Puede configurar niveles múltiples de aviso a través del menú:\n" +"---------------------------------------------------------------\n" +" Configuración / Niveles de seguimiento\n" +" \n" +"Una vez se definan, puede imprimir automáticamente avisos cada día pulsando " +"simplemente en el menú:\n" +"-----------------------------------------------------------------------------" +"-------------------------\n" +" Seguimiento de pagos / Enviar cartas y correos electrónicos\n" +"\n" +"Generará un PDF / enviará correos electrónicos / establecerá acciones " +"manuales dependiendo de los diferentes niveles de aviso definidos. Puede " +"definir políticas diferentes para cada compañía.\n" +"\n" +"Tenga en cuenta que si quiere comprobar el nivel de seguimiento para una " +"empresa en concreto, puede hacerlo desde el menú:\n" +"-----------------------------------------------------------------------------" +"-------------------------------------\n" +" Informes / Contabilidad / **Análisis de seguimientos\n" +"\n" #. module: base #: view:ir.rule:0 @@ -11063,7 +11516,7 @@ msgstr "" #. module: base #: model:res.country,name:base.bl msgid "Saint Barthélémy" -msgstr "" +msgstr "San Bartolomé" #. module: base #: selection:ir.module.module,license:0 @@ -11078,7 +11531,7 @@ msgstr "Ecuador" #. module: base #: view:ir.rule:0 msgid "Read Access Right" -msgstr "" +msgstr "Permiso de lectura" #. module: base #: model:ir.module.module,shortdesc:base.module_analytic_user_function @@ -11150,12 +11603,12 @@ msgstr "Traducido" #: model:ir.actions.act_window,name:base.action_inventory_form #: model:ir.ui.menu,name:base.menu_action_inventory_form msgid "Default Company per Object" -msgstr "" +msgstr "Compañía por defecto por objeto" #. module: base #: field:ir.ui.menu,needaction_counter:0 msgid "Number of actions the user has to perform" -msgstr "" +msgstr "Número de acciones que el usuario tiene que realizar" #. module: base #: model:ir.module.module,shortdesc:base.module_web_hello @@ -11185,7 +11638,7 @@ msgstr "Dominio" #: code:addons/base/ir/ir_fields.py:167 #, python-format msgid "Use '1' for yes and '0' for no" -msgstr "" +msgstr "Use '1' para sí y '0' para no" #. module: base #: model:ir.module.module,shortdesc:base.module_marketing_campaign @@ -11200,13 +11653,13 @@ msgstr "Nombre provincia" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_be_hr_payroll_account msgid "Belgium - Payroll with Accounting" -msgstr "" +msgstr "Bélgica - Nóminas con contabilidad" #. module: base #: code:addons/base/ir/ir_fields.py:314 #, python-format msgid "Invalid database id '%s' for the field '%%(field)s'" -msgstr "" +msgstr "Id. de base de datos '%s' no válido para el campo '%%(field)s'" #. module: base #: view:res.lang:0 @@ -11367,12 +11820,12 @@ msgstr "Puerto Rico" #. module: base #: model:ir.module.module,shortdesc:base.module_web_tests_demo msgid "Demonstration of web/javascript tests" -msgstr "" +msgstr "Demostración de test JavaScript/Web" #. module: base #: field:workflow.transition,signal:0 msgid "Signal (Button Name)" -msgstr "" +msgstr "Señal (Nombre del botón)" #. module: base #: view:ir.actions.act_window:0 @@ -11466,13 +11919,13 @@ msgstr "Operaciones de fabricación" #. module: base #: view:base.language.export:0 msgid "Here is the exported translation file:" -msgstr "" +msgstr "Aquí está el archivo de traducción exportado:" #. module: base #: field:ir.actions.report.xml,report_rml_content:0 #: field:ir.actions.report.xml,report_rml_content_data:0 msgid "RML Content" -msgstr "" +msgstr "Contenido RML" #. module: base #: view:res.lang:0 @@ -11510,6 +11963,18 @@ msgid "" "automatically new claims based on incoming emails.\n" " " msgstr "" +"\n" +"\n" +"Gestionar reclamaciones de clientes.\n" +"=============================================================================" +"===\n" +"Esta aplicación permite gestionar las reclamaciones y quejas de sus " +"clientes/proveedores.\n" +"\n" +"Está totalmente integrado con la pasarela de correo electrónico, para que " +"puede crear automáticamente nuevas quejas basadas en los correos " +"electrónicos entrantes.\n" +" " #. module: base #: selection:ir.module.module,license:0 @@ -11630,6 +12095,13 @@ msgid "" "\n" "The decimal precision is configured per company.\n" msgstr "" +"\n" +"Configura la precisión del precio si necesita diversos tipos de uso: " +"contabilidad, ventas, compras...\n" +"=============================================================================" +"====================\n" +"\n" +"La precisión decimal se configura por compañía.\n" #. module: base #: selection:res.company,paper_format:0 @@ -11639,7 +12111,7 @@ msgstr "A4" #. module: base #: view:res.config.installer:0 msgid "Configuration Installer" -msgstr "" +msgstr "Instalador de la configuración" #. module: base #: field:res.partner,customer:0 @@ -11660,6 +12132,10 @@ msgid "" "===================================================\n" " " msgstr "" +"\n" +"Este módulo añade el PAD en todas las vistas kanban de proyecto.\n" +"======================================================\n" +" " #. module: base #: field:ir.actions.act_window,context:0 @@ -11726,17 +12202,19 @@ msgid "" "(if you delete a native ACL, it will be re-created when you reload the " "module." msgstr "" +"Si desmarca el campo activo, deshabilitará el ACL sin borrarlo (si borra un " +"ACL nativo, será recreado cuando recargue el módulo)." #. module: base #: model:ir.model,name:base.model_ir_fields_converter msgid "ir.fields.converter" -msgstr "" +msgstr "Convertidor de campos" #. module: base #: code:addons/base/res/res_partner.py:436 #, python-format msgid "Couldn't create contact without email address !" -msgstr "" +msgstr "¡No se puede crear el contacto sin correo electrónico!" #. module: base #: model:ir.module.category,name:base.module_category_manufacturing @@ -11758,12 +12236,12 @@ msgstr "Cancelar instalación" #. module: base #: model:ir.model,name:base.model_ir_model_relation msgid "ir.model.relation" -msgstr "" +msgstr "Relación" #. module: base #: model:ir.module.module,shortdesc:base.module_account_check_writing msgid "Check Writing" -msgstr "" +msgstr "Escritura de cheques" #. module: base #: model:ir.module.module,description:base.module_plugin_outlook @@ -11999,7 +12477,7 @@ msgstr "Reino Unido - Contabilidad" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam msgid "Mrs." -msgstr "" +msgstr "Sra." #. module: base #: code:addons/base/ir/ir_model.py:424 @@ -12035,7 +12513,7 @@ msgstr "Expresión del bucle" #. module: base #: model:res.partner.category,name:base.res_partner_category_16 msgid "Retailer" -msgstr "" +msgstr "Minorista" #. module: base #: view:ir.model.fields:0 @@ -12086,6 +12564,8 @@ msgstr "" msgid "" "Please make sure no workitems refer to an activity before deleting it!" msgstr "" +"¡Asegúrese de que ningún elemento de trabajo se refiera a la actividad antes " +"de borrarla!" #. module: base #: model:res.country,name:base.tr @@ -12138,7 +12618,7 @@ msgstr "4. %b, %B ==> Dic, Diciembre" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_cl msgid "Chile Localization Chart Account" -msgstr "" +msgstr "Plan de cuentas chileno" #. module: base #: selection:base.language.install,lang:0 @@ -12239,6 +12719,20 @@ msgid "" "yearly\n" " account reporting (balance, profit & losses).\n" msgstr "" +"\n" +"Plan de cuentas español (PGCE 2008).\n" +"=======================================\n" +"\n" +" * Define las siguientes plantillas de plan de cuentas:\n" +" * Plan de cuentas general español 2008\n" +" * Plan de cuentas general español 2008 para pequeñas y medianas " +"empresas.\n" +" * Define plantillas para los impuestos de ventas y compras\n" +" * Define plantillas de códigos de impuestos\n" +"\n" +"**Nota:** Debe instalar el módulo 'l10n_es_account_balance_report' para los " +"informes de cuentas anuales (balance de situación, cuenta de pérdidas y " +"ganancias).\n" #. module: base #: field:ir.actions.act_url,type:0 @@ -12309,7 +12803,7 @@ msgstr "" #. module: base #: model:res.country,name:base.cd msgid "Congo, Democratic Republic of the" -msgstr "" +msgstr "Congo, República Democrática del" #. module: base #: model:res.country,name:base.cr @@ -12366,7 +12860,7 @@ msgstr "Valor por defecto o referencia a una acción" #. module: base #: field:ir.actions.report.xml,auto:0 msgid "Custom Python Parser" -msgstr "" +msgstr "Analizador Python personalizado" #. module: base #: sql_constraint:res.groups:0 @@ -12376,7 +12870,7 @@ msgstr "¡El nombre del grupo debe ser único!" #. module: base #: help:ir.translation,module:0 msgid "Module this term belongs to" -msgstr "" +msgstr "Módulo al que pertenece este término" #. module: base #: model:ir.module.module,description:base.module_web_view_editor @@ -12387,6 +12881,11 @@ msgid "" "\n" " " msgstr "" +"\n" +"Editor de vistas de OpenERP web.\n" +"============================\n" +"\n" +" " #. module: base #: view:ir.sequence:0 @@ -12435,6 +12934,13 @@ msgid "" "\n" " " msgstr "" +"\n" +"Plan de cuentas y localización de impuesto argentino.\n" +"==================================================\n" +"\n" +"Plan contable argentino e impuestos de acuerdo a disposiciones vigentes.\n" +"\n" +" " #. module: base #: code:addons/fields.py:126 @@ -12516,7 +13022,7 @@ msgstr "Maldivas" #. module: base #: model:ir.module.module,shortdesc:base.module_portal_crm msgid "Portal CRM" -msgstr "" +msgstr "Portal CRM" #. module: base #: model:ir.ui.menu,name:base.next_id_4 @@ -12661,7 +13167,7 @@ msgstr "" #. module: base #: field:ir.actions.report.xml,report_sxw:0 msgid "SXW Path" -msgstr "" +msgstr "Ruta del archivo SXW" #. module: base #: model:ir.module.module,description:base.module_account_asset @@ -12678,6 +13184,15 @@ msgid "" "\n" " " msgstr "" +"\n" +"Gestión financiera y contable de activos.\n" +"==========================================\n" +"\n" +"Este módulo gestiona los activos que posee una compañía o un individuo. " +"Permite seguir las depreciaciones que ocurren en dichos activos, y permite " +"crear los asientos de las líneas de depreciación.\n" +"\n" +" " #. module: base #: field:ir.cron,numbercall:0 @@ -12770,6 +13285,12 @@ msgid "" "Provide Templates for Chart of Accounts, Taxes for Uruguay.\n" "\n" msgstr "" +"\n" +"Plan general de cuentas.\n" +"====================\n" +"\n" +"Provee plantillas para el plan de cuentas y los impuestos para Uruguay.\n" +"\n" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_gr @@ -12890,7 +13411,7 @@ msgstr "Filtros en mis documentos" #. module: base #: model:ir.module.module,summary:base.module_project_gtd msgid "Personal Tasks, Contexts, Timeboxes" -msgstr "" +msgstr "Tareas personales, contextos, tiempos asignados" #. module: base #: model:ir.module.module,description:base.module_l10n_cr @@ -12912,6 +13433,22 @@ msgid "" "please go to http://translations.launchpad.net/openerp-costa-rica.\n" " " msgstr "" +"\n" +"Plan de cuentas para Costa Rica.\n" +"=================================\n" +"\n" +"Incluye:\n" +"---------\n" +" * account.type\n" +" * account.account.template\n" +" * account.tax.template\n" +" * account.tax.code.template\n" +" * account.chart.template\n" +"\n" +"Todo está en inglés con traducción a español. Más traducciones son " +"bienvenidas, por favor vayan a http://translations.launchpad.net/openerp-" +"costa-rica.\n" +" " #. module: base #: model:ir.actions.act_window,name:base.action_partner_supplier_form @@ -12938,7 +13475,7 @@ msgstr "Gabón" #. module: base #: model:ir.module.module,summary:base.module_stock msgid "Inventory, Logistic, Storage" -msgstr "" +msgstr "Inventario, logística, almacenamiento" #. module: base #: view:ir.actions.act_window:0 @@ -12992,7 +13529,7 @@ msgstr "Nueva Caledonia (Francesa)" #. module: base #: field:ir.model,osv_memory:0 msgid "Transient Model" -msgstr "" +msgstr "Model transitorio" #. module: base #: model:res.country,name:base.cy @@ -13050,7 +13587,7 @@ msgstr "Preferencias" #. module: base #: model:res.partner.category,name:base.res_partner_category_9 msgid "Components Buyer" -msgstr "" +msgstr "Comprador de componentes" #. module: base #: view:ir.module.module:0 @@ -13058,6 +13595,8 @@ msgid "" "Do you confirm the uninstallation of this module? This will permanently " "erase all data currently stored by the module!" msgstr "" +"¿Confirma la desinstalación de este módulo? ¡Esto eliminará permanentemente " +"todos los datos almacenados actualmente por el módulo!" #. module: base #: help:ir.cron,function:0 @@ -13131,7 +13670,7 @@ msgstr "Servidores de correo saliente" #. module: base #: model:ir.ui.menu,name:base.menu_custom msgid "Technical" -msgstr "" +msgstr "Técnico" #. module: base #: model:res.country,name:base.cn @@ -13220,6 +13759,18 @@ msgid "" "routing of the assembly operation.\n" " " msgstr "" +"\n" +"Este módulo permite un proceso de acopio intermedio para proveer de materias " +"primas a las órdenes de fabricación.\n" +"=============================================================================" +"=======================\n" +"\n" +"Un ejemplo de uso de este módulo es para gestionar la fabricación realizada " +"por subcontratistas. Para que se puede hacer de este modo, esteblezca el " +"producto ensamblado que es subcontratado a 'No auto\n" +"sub-contracted to 'Sin auto-acopio' y ponga la ubicación del proveedor en la " +"ruta de producción de la operación de ensamblado.\n" +" " #. module: base #: help:multi_company.default,expression:0 @@ -13255,6 +13806,21 @@ msgid "" " A + B + C -> D + E\n" " " msgstr "" +"\n" +"Este módulo permite fabricar varios productos de una orden de fabricación.\n" +"=============================================================================" +"\n" +"\n" +"Puede configurar subproductos en la lista de materiales.\n" +"\n" +"Sin este módulo:\n" +"--------------------\n" +" A + B + C -> D\n" +"\n" +"Con este módulo:\n" +"-----------------\n" +" A + B + C -> D + E\n" +" " #. module: base #: model:res.country,name:base.tf @@ -13334,6 +13900,9 @@ msgid "" "128x128px image, with aspect ratio preserved. Use this field in form views " "or some kanban views." msgstr "" +"Imagen mediana de este contacto. Se redimensiona automáticamente a 128x128 " +"px, con el ratio de aspecto preservado. Se usa este campo en las vistas los " +"formularios y en algunas vistas de kanban." #. module: base #: view:base.update.translations:0 @@ -13372,7 +13941,7 @@ msgstr "Acción a ejecutar" #: field:ir.model,modules:0 #: field:ir.model.fields,modules:0 msgid "In Modules" -msgstr "" +msgstr "En los módulos" #. module: base #: model:ir.module.module,shortdesc:base.module_contacts @@ -13414,6 +13983,15 @@ msgid "" " - InfoLogic UK counties listing\n" " - a few other adaptations" msgstr "" +"\n" +"Ésta es la última localización de OpenERP para Reino Uinido, necesaria la " +"contabilidad de PYMEs de RU con:\n" +"=============================================================================" +"====================\n" +" - un plan de cuentas preparado para CT600\n" +" - una estructura de impuesto preparada para VAT100\n" +" - listado de condados de RU de InfoLogic\n" +" - otras cuantas adaptaciones" #. module: base #: selection:ir.model,state:0 @@ -13441,7 +14019,7 @@ msgstr "ID de impuesto" #. module: base #: model:ir.module.module,shortdesc:base.module_account_bank_statement_extensions msgid "Bank Statement Extensions to Support e-banking" -msgstr "" +msgstr "Extensiones de extracto bancario para soportar e-banking" #. module: base #: field:ir.model.fields,field_description:0 @@ -13503,6 +14081,15 @@ msgid "" "Adds menu to show relevant information to each manager.You can also view the " "report of account analytic summary user-wise as well as month-wise.\n" msgstr "" +"\n" +"Este módulo modifica la vista de contabilidad analítica para mostrar datos " +"importantes para un gestor de proyectos de una compañía de servicios.\n" +"=============================================================================" +"=================================================\n" +"\n" +"Añade un menú para mostrar información relevante a cada gestor. Puede " +"también ver el informe del resumen de contabilidad analítica por usuario y " +"por mes.\n" #. module: base #: model:ir.module.module,description:base.module_hr_payroll_account @@ -13516,6 +14103,14 @@ msgid "" " * Company Contribution Management\n" " " msgstr "" +"\n" +"Sistema de pago genérico de nóminas integrado con contabilidad.\n" +"======================================================\n" +"\n" +" * Codificación de gastos\n" +" * Codificación de pagos\n" +" * Gestión de participación de las empresas\n" +" " #. module: base #: view:base.module.update:0 @@ -13555,6 +14150,8 @@ msgid "" "The user this filter is private to. When left empty the filter is public and " "available to all users." msgstr "" +"El usuario para el que el filtro es privado. Cuando está vacío, el filtro es " +"público y está disponible para todos los usuarios." #. module: base #: field:ir.actions.act_window,auto_refresh:0 @@ -13577,6 +14174,18 @@ msgid "" "\n" "Used, for example, in food industries." msgstr "" +"\n" +"Gestiona diferentes fechas en los productos y en los lotes de producción.\n" +"============================================================\n" +"\n" +"Se gestionan las siguientes fechas:\n" +"-----------------------------------------\n" +" - fecha de caducidad\n" +" - fecha de consumo seguro\n" +" - fecha de eliminación\n" +" - fecha de alerta\n" +"\n" +"Usado, por ejemplo, en la industria de la comida." #. module: base #: help:ir.translation,state:0 @@ -13584,6 +14193,8 @@ msgid "" "Automatically set to let administators find new terms that might need to be " "translated" msgstr "" +"Establecido automáticamente para dejar que los administradores encuentren " +"nuevos términos que necesiten ser traducidos" #. module: base #: code:addons/base/ir/ir_model.py:84 @@ -13610,7 +14221,7 @@ msgstr "Selección antes de fabricación" #. module: base #: model:ir.module.module,summary:base.module_note_pad msgid "Sticky memos, Collaborative" -msgstr "" +msgstr "Memorándums fijados, colaborativos" #. module: base #: model:res.country,name:base.wf @@ -13641,6 +14252,20 @@ msgid "" "* HR Jobs\n" " " msgstr "" +"\n" +"Gestión de recursos humanos.\n" +"==========================\n" +"\n" +"Esta aplicación habilita la gestión de importantes aspectos del personal de " +"su compañía y otros detalles como sus habilidades, contactos, horario...\n" +"\n" +"Puede gestionar:\n" +"----------------------\n" +"* Empleados y jerarquías: Puede definir sus empleados con usuarios y definir " +"jerarquías.\n" +"* Departamentos\n" +"* Puestos\n" +" " #. module: base #: model:ir.module.module,description:base.module_hr_contract @@ -13657,6 +14282,18 @@ msgid "" "You can assign several contracts per employee.\n" " " msgstr "" +"\n" +"Añade toda la información en el formulario de empleado para gestionar " +"contratos.\n" +"====================================================================\n" +"\n" +" * Contrato\n" +" * Lugar de nacimiento\n" +" * Fecha del examen médico\n" +" * Vehículo de empresa\n" +"\n" +"Puede asignar varios contratos por empleado.\n" +" " #. module: base #: view:ir.model.data:0 @@ -13714,6 +14351,8 @@ msgid "" "the user will have access to all records of everyone in the sales " "application." msgstr "" +"el usuario tendrá acceso a todos los registros de todos en la aplicación de " +"ventas." #. module: base #: model:ir.module.module,shortdesc:base.module_event @@ -13768,6 +14407,8 @@ msgid "" " the rightmost column (value) contains the " "translations" msgstr "" +"Formato CSV: puede editarla directamente en su programa de hoja de cálculo " +"favorito, la columna de más a la derecha contiene las traducciones" #. module: base #: model:ir.module.module,description:base.module_account_chart @@ -13813,6 +14454,9 @@ msgid "" "The common interface for plug-in.\n" "=================================\n" msgstr "" +"\n" +"Interfaz común para los conectores.\n" +"=================================\n" #. module: base #: model:ir.module.module,description:base.module_sale_crm @@ -13831,11 +14475,24 @@ msgid "" "modules.\n" " " msgstr "" +"\n" +"Este módulo añade un acceso directo a uno o varios casos de oportunidad en " +"el CRM.\n" +"===========================================================================\n" +"\n" +"Este acceso directo permite generar pedidos de venta basados en el caso " +"seleccionado.\n" +"Si hay diferentes casos abiertos (una lista), genera un pedido de venta por " +"caso.\n" +"El caso se cierra entonces y se enlaza con el pedido de venta generado.\n" +"\n" +"Le recomendamos instalar este módulo si instala los módulos 'sale' y 'crm'.\n" +" " #. module: base #: model:res.country,name:base.bq msgid "Bonaire, Sint Eustatius and Saba" -msgstr "" +msgstr "Bonaire, San Eustaquio y Saba" #. module: base #: model:ir.actions.report.xml,name:base.ir_module_reference_print @@ -13870,6 +14527,10 @@ msgid "" "your home page.\n" "You can track your suppliers, customers and other contacts.\n" msgstr "" +"\n" +"Este módulo da una vista rápida de su libreta de direcciones, accesible " +"desde su página de inicio.\n" +"Puede seguir a los proveedores, clientes y otros contactos.\n" #. module: base #: help:res.company,custom_footer:0 @@ -13893,7 +14554,7 @@ msgstr "Instalar módulos" #. module: base #: model:ir.ui.menu,name:base.menu_import_crm msgid "Import & Synchronize" -msgstr "" +msgstr "Importar y sincronizar" #. module: base #: view:res.partner:0 @@ -13924,7 +14585,7 @@ msgstr "Texto original" #: field:ir.model.constraint,date_init:0 #: field:ir.model.relation,date_init:0 msgid "Initialization Date" -msgstr "" +msgstr "Fecha de inicialización" #. module: base #: model:res.country,name:base.vu @@ -13972,6 +14633,15 @@ msgid "" "OpenOffice. \n" "Once you have modified it you can upload the report using the same wizard.\n" msgstr "" +"\n" +"Este módulo se usa junto con el conector de OpenERP para " +"LibreOffice/OpenOffice.\n" +"====================================================================\n" +"\n" +"Este módulo añade un asistente para importar/exportar informes .sxw que " +"puede modificar en LibreOffice/OpenOffice\n" +"Una vez modificado, puede volver a subir el informe utilizando el mismo " +"asistente.\n" #. module: base #: view:base.module.upgrade:0 @@ -14033,12 +14703,22 @@ msgid "" "order.\n" " " msgstr "" +"\n" +"Este módulo provee facilidades para el usuario para instalar los módulos " +"'mrp' y 'sale' al mismo tiempo.\n" +"=============================================================================" +"=======\n" +"\n" +"Se usa básicamente para gestionar las órdenes de fabricación generadas desde " +"los pedidos de venta. Añade el nombre y la referencia de ventas en la orden " +"de fabricación.\n" +" " #. module: base #: code:addons/base/ir/ir_fields.py:147 #, python-format msgid "no" -msgstr "" +msgstr "no" #. module: base #: field:ir.actions.server,trigger_obj_id:0 @@ -14056,6 +14736,12 @@ msgid "" "=========================\n" " " msgstr "" +"\n" +"Este módulo añade el menú y las características (tareas) de los proyectos al " +"portal si los módulos 'project' y 'portal' están instalados.\n" +"=============================================================================" +"==============================\n" +" " #. module: base #: code:addons/base/module/wizard/base_module_configuration.py:38 @@ -14171,6 +14857,12 @@ msgid "" "Collects web application usage with Google Analytics.\n" " " msgstr "" +"\n" +"Google Analytics.\n" +"==============================\n" +"\n" +"Recopila información de uso de la aplicación con Google Analytics.\n" +" " #. module: base #: help:ir.sequence,implementation:0 @@ -14201,7 +14893,7 @@ msgstr "Luxemburgo" #. module: base #: model:ir.module.module,summary:base.module_base_calendar msgid "Personal & Shared Calendar" -msgstr "" +msgstr "Calendario personal y compartido" #. module: base #: selection:res.request,priority:0 @@ -14217,7 +14909,7 @@ msgstr "Error ! No puede crear menús recursivos" #. module: base #: view:ir.translation:0 msgid "Web-only translations" -msgstr "" +msgstr "Traducciones sólo para web" #. module: base #: view:ir.rule:0 @@ -14313,7 +15005,7 @@ msgstr "Tailandia" #. module: base #: model:ir.module.module,summary:base.module_account_voucher msgid "Send Invoices and Track Payments" -msgstr "" +msgstr "Enviar factura y gestionar pagos" #. module: base #: model:ir.ui.menu,name:base.menu_crm_config_lead @@ -14323,7 +15015,7 @@ msgstr "Iniciativas y Oportunidades" #. module: base #: model:res.country,name:base.gg msgid "Guernsey" -msgstr "" +msgstr "Guernsey" #. module: base #: selection:base.language.install,lang:0 @@ -14460,7 +15152,7 @@ msgstr "Asistencia/Ayuda" #. module: base #: field:ir.rule,perm_write:0 msgid "Apply for Write" -msgstr "" +msgstr "Aplicar para escritura" #. module: base #: model:ir.module.module,description:base.module_stock @@ -14508,6 +15200,12 @@ msgid "" "Web pages\n" " " msgstr "" +"\n" +"Páginas\n" +"=======\n" +"\n" +"Páginas web\n" +" " #. module: base #: help:ir.actions.server,code:0 @@ -14633,6 +15331,8 @@ msgid "" "If this field is empty, the view applies to all users. Otherwise, the view " "applies to the users of those groups only." msgstr "" +"Si este campo está vacío, la vista se aplica a todos los usuarios. En caso " +"contrario, la vista se aplica sólo a los usuarios de estos grupos." #. module: base #: selection:base.language.install,lang:0 @@ -14670,17 +15370,17 @@ msgstr "" #. module: base #: view:base.language.export:0 msgid "Export Settings" -msgstr "" +msgstr "Preferencias de exportación" #. module: base #: field:ir.actions.act_window,src_model:0 msgid "Source Model" -msgstr "" +msgstr "Modelo origen" #. module: base #: view:ir.sequence:0 msgid "Day of the Week (0:Monday): %(weekday)s" -msgstr "" +msgstr "Día de la semana (0: lunes): %(weekday)s" #. module: base #: code:addons/base/module/wizard/base_module_upgrade.py:84 @@ -14694,7 +15394,7 @@ msgstr "¡Dependencia no resuelta!" #: code:addons/base/ir/ir_model.py:1023 #, python-format msgid "Administrator access is required to uninstall a module" -msgstr "" +msgstr "Se requiere acceso como administrador para desinstalar un módulo" #. module: base #: model:ir.model,name:base.model_base_module_configuration @@ -14710,6 +15410,10 @@ msgid "" "\n" "(Document type: %s, Operation: %s)" msgstr "" +"No se ha podido completar la operación por restricciones de seguridad. " +"Contacte por favor con su administrador de sistema.\n" +"\n" +"(Tipo de documento: %s, Operación: %s)" #. module: base #: model:ir.module.module,description:base.module_idea @@ -14734,6 +15438,8 @@ msgid "" "%s This might be '%s' in the current model, or a field of the same name in " "an o2m." msgstr "" +"%s Esto debe ser '%s' en el modelo actual, o un campo del mismo nombre en " +"una relación one2many." #. module: base #: model:ir.module.module,description:base.module_account_payment @@ -14777,7 +15483,7 @@ msgstr "Acceso" #: field:res.partner,vat:0 #, python-format msgid "TIN" -msgstr "" +msgstr "NIF" #. module: base #: model:res.country,name:base.aw @@ -14842,7 +15548,7 @@ msgstr "Informes avanzados" #. module: base #: model:ir.module.module,summary:base.module_purchase msgid "Purchase Orders, Receptions, Supplier Invoices" -msgstr "" +msgstr "Pedidos de compra, recepciones, facturas de proveedor" #. module: base #: model:ir.module.module,description:base.module_hr_payroll @@ -14861,6 +15567,19 @@ msgid "" " * Integrated with Holiday Management\n" " " msgstr "" +"\n" +"Sistema genérico de sueldos.\n" +"=========================\n" +"\n" +" * Detalles del empleado\n" +" * Contratos del empleado\n" +" * Contrato basado en el pasaporte\n" +" * Provisiones/deducciones\n" +" * Permite configurar salario base/bruto/neto\n" +" * Nómina del empleado\n" +" * Registro mensual de sueldos\n" +" * Integrado con el gestor de vacaciones\n" +" " #. module: base #: model:ir.model,name:base.model_ir_model_data @@ -14939,7 +15658,7 @@ msgstr "Límite" #. module: base #: model:res.groups,name:base.group_hr_user msgid "Officer" -msgstr "" +msgstr "Directivo" #. module: base #: code:addons/orm.py:789 @@ -14990,12 +15709,24 @@ msgid "" "user name and password for the invitation of the survey.\n" " " msgstr "" +"\n" +"Este módulo se usa para encuestas.\n" +"==================================\n" +"\n" +"Depende de las respuestas o revisiones de varias preguntas por diferentes " +"usuarios. Una encuesta tiene múltiples páginas. Cada página puede contener " +"múltiples preguntas y cada pregunta puede tener múltiples respuestas. " +"Diferentes usuarios pueden dar diferentes respuestas a la preguntar y " +"dependiendo de ello la encuesta se realizará. Las empresas también pueden " +"enviar correos con el nombre de usuario y la contraseña para la invitación a " +"la encuesta.\n" +" " #. module: base #: code:addons/base/ir/ir_model.py:163 #, python-format msgid "Model '%s' contains module data and cannot be removed!" -msgstr "" +msgstr "¡El modelo '%s' contiene datos del módulo y no puede ser eliminado!" #. module: base #: model:res.country,name:base.az @@ -15048,7 +15779,7 @@ msgstr "Módulos genéricos" #. module: base #: model:res.country,name:base.mk msgid "Macedonia, the former Yugoslav Republic of" -msgstr "" +msgstr "Macedonia, Antigua república yugoslava de" #. module: base #: model:res.country,name:base.rw @@ -15062,6 +15793,9 @@ msgid "" "Allow users to login through OpenID.\n" "====================================\n" msgstr "" +"\n" +"Permite a los usuarios iniciar sesión a través de OpenID.\n" +"=============================================\n" #. module: base #: help:ir.mail_server,smtp_port:0 @@ -15098,7 +15832,7 @@ msgstr "Ventana actual" #: model:ir.module.category,name:base.module_category_hidden #: view:res.users:0 msgid "Technical Settings" -msgstr "" +msgstr "Configuración técnica" #. module: base #: model:ir.module.category,description:base.module_category_accounting_and_finance @@ -15117,7 +15851,7 @@ msgstr "Conector Thunderbird" #. module: base #: model:ir.module.module,summary:base.module_event msgid "Trainings, Conferences, Meetings, Exhibitions, Registrations" -msgstr "" +msgstr "Formaciones, conferencias, reuniones, exhibiciones, inscripciones" #. module: base #: model:ir.model,name:base.model_res_country @@ -15135,7 +15869,7 @@ msgstr "País" #. module: base #: model:res.partner.category,name:base.res_partner_category_15 msgid "Wholesaler" -msgstr "" +msgstr "Mayorista" #. module: base #: model:ir.module.module,shortdesc:base.module_base_vat @@ -15167,6 +15901,8 @@ msgid "" "file encoding, please be sure to view and edit\n" " using the same encoding." msgstr "" +"codificación de archivo. Asegúrese de que ve y edita usando la misma " +"codificación." #. module: base #: view:ir.rule:0 @@ -15185,7 +15921,7 @@ msgstr "Holanda - Contabilidad" #. module: base #: model:res.country,name:base.gs msgid "South Georgia and the South Sandwich Islands" -msgstr "" +msgstr "Islas Georgia del sur y Sandwich del sur" #. module: base #: view:res.lang:0 @@ -15200,7 +15936,7 @@ msgstr "Español (SV) / Español (SV)" #. module: base #: model:ir.actions.act_window,name:base.open_module_tree msgid "Install a Module" -msgstr "" +msgstr "Instalar un módulo" #. module: base #: field:ir.module.module,auto_install:0 @@ -15220,6 +15956,12 @@ msgid "" "taxes\n" "and the Lempira currency." msgstr "" +"\n" +"Éste es el módulo base para gestionar el plan de cuentas para Honduras.\n" +"====================================================================\n" +" \n" +"Agrega una nomenclatura contable para Honduras. También incluye impuestos y " +"la moneda Lempira." #. module: base #: model:res.country,name:base.jp @@ -15318,6 +16060,8 @@ msgid "" "Ambiguous specification for field '%(field)s', only provide one of name, " "external id or database id" msgstr "" +"Especificación ambigua para el campo '%(field)s'. Especifique sólo uno de " +"estos: nombre, id. externo o id. de la base de datos." #. module: base #: field:ir.sequence,implementation:0 @@ -15337,7 +16081,7 @@ msgstr "Chile" #. module: base #: model:ir.module.module,shortdesc:base.module_web_view_editor msgid "View Editor" -msgstr "" +msgstr "Editor de vistas" #. module: base #: view:ir.cron:0 @@ -15427,7 +16171,7 @@ msgstr "Actualización del sistema" #: field:ir.actions.report.xml,report_sxw_content:0 #: field:ir.actions.report.xml,report_sxw_content_data:0 msgid "SXW Content" -msgstr "" +msgstr "Contenido del SXW" #. module: base #: help:ir.sequence,prefix:0 @@ -15469,7 +16213,7 @@ msgstr "Información general" #. module: base #: field:ir.model.data,complete_name:0 msgid "Complete ID" -msgstr "" +msgstr "Id. completo" #. module: base #: model:res.country,name:base.tc @@ -15482,6 +16226,8 @@ msgid "" "Tax Identification Number. Check the box if this contact is subjected to " "taxes. Used by the some of the legal statements." msgstr "" +"Número de identificación fiscal. Marque la casilla si el contacto está " +"sujeto a impuestos. Usado por algunos documentos legales." #. module: base #: field:res.partner.bank,partner_id:0 @@ -15592,7 +16338,7 @@ msgstr "Solicitudes de compra" #. module: base #: selection:ir.actions.act_window,target:0 msgid "Inline Edit" -msgstr "" +msgstr "Editor incorporado" #. module: base #: selection:ir.cron,interval_type:0 @@ -15659,6 +16405,14 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"Pulse para añadir un contacto en la libreta de direcciones.\n" +"

\n" +"OpenERP le ayuda a gestionar todas las actividades relacionadas con los " +"clientes: discusiones, historial de oportunidades de negocio, documentos, " +"etc.\n" +"

\n" +" " #. module: base #: model:res.partner.category,name:base.res_partner_category_2 @@ -15702,6 +16456,15 @@ msgid "" "on a supplier purchase order into several accounts and analytic plans.\n" " " msgstr "" +"\n" +"El módulo base para gestionar las distribuciones analíticas y los pedidos de " +"compra.\n" +"====================================================================\n" +"\n" +"Permite al usuario mantener varios planes analíticos. Esto deja dividir una " +"línea en un pedido de compra de proveedor en varias cuentas y planes " +"analíticos.\n" +" " #. module: base #: model:res.country,name:base.lk @@ -15721,7 +16484,7 @@ msgstr "Ruso / русский язык" #. module: base #: model:ir.module.module,shortdesc:base.module_auth_signup msgid "Signup" -msgstr "" +msgstr "Registro" #~ msgid "SMS - Gateway: clickatell" #~ msgstr "Puerta de enlace SMS vía clickatell" diff --git a/openerp/addons/base/i18n/es_EC.po b/openerp/addons/base/i18n/es_EC.po index a81b7b5d8e9..ce83e828fae 100644 --- a/openerp/addons/base/i18n/es_EC.po +++ b/openerp/addons/base/i18n/es_EC.po @@ -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-03 16:01+0000\n" -"PO-Revision-Date: 2012-11-05 00:42+0000\n" +"PO-Revision-Date: 2012-12-20 19:00+0000\n" "Last-Translator: Cristian Salamea (Gnuthink) \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: 2012-12-04 05:03+0000\n" -"X-Generator: Launchpad (build 16335)\n" +"X-Launchpad-Export-Date: 2012-12-21 04:39+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -24,6 +24,10 @@ msgid "" "================================================\n" " " msgstr "" +"\n" +"Módulo para la emisión e impresión de cheques\n" +"================================================\n" +" " #. module: base #: model:res.country,name:base.sh @@ -59,7 +63,7 @@ msgstr "Código vista" #. module: base #: model:ir.module.module,summary:base.module_sale_stock msgid "Quotation, Sale Orders, Delivery & Invoicing Control" -msgstr "" +msgstr "Presupuesto, órdenes de venta, entrega y control de facturación" #. module: base #: selection:ir.sequence,implementation:0 @@ -88,12 +92,12 @@ msgstr "" #. module: base #: model:ir.module.module,summary:base.module_point_of_sale msgid "Touchscreen Interface for Shops" -msgstr "" +msgstr "Interfaz de pantalla táctil para tiendas" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_in_hr_payroll msgid "Indian Payroll" -msgstr "" +msgstr "Nomina de la India" #. module: base #: help:ir.cron,model:0 @@ -123,6 +127,17 @@ msgid "" " * Product Attributes\n" " " msgstr "" +"\n" +"Módulo que añade fabricantes y atributos en el formulario de producto.\n" +"===========================================================\n" +"\n" +"Puede definir los siguientes campos para un producto:\n" +"-------------------------------------------------\n" +"* Fabricante\n" +"* Nombre del producto del fabricante\n" +"* Código del producto del fabricante\n" +"* Atributos del producto\n" +" " #. module: base #: field:ir.actions.client,params:0 @@ -136,11 +151,14 @@ msgid "" "The module adds google user in res user.\n" "========================================\n" msgstr "" +"\n" +"El módulo añade usuarios Google al registro de usuarios\n" +"============================================\n" #. module: base #: help:res.partner,employee:0 msgid "Check this box if this contact is an Employee." -msgstr "" +msgstr "Marque si el contacto es un empleado" #. module: base #: help:ir.model.fields,domain:0 @@ -171,7 +189,7 @@ msgstr "Ventana destino" #. module: base #: field:ir.actions.report.xml,report_rml:0 msgid "Main Report File Path" -msgstr "" +msgstr "Ruta de archivo del informe principal" #. module: base #: model:ir.module.module,shortdesc:base.module_sale_analytic_plans @@ -192,6 +210,15 @@ msgid "" "revenue\n" "reports." msgstr "" +"\n" +"Genere facturas desde los gastos y partes de horas.\n" +"========================================================\n" +"\n" +"Módulo para generar facturas basadas en los costes (recursos humanos, " +"gastos, ...).\n" +"\n" +"Puede definir tarifas en la contabilidad analítica, realizando algún informe " +"teórico de beneficios." #. module: base #: model:ir.module.module,description:base.module_crm @@ -269,7 +296,7 @@ msgstr "creado." #. module: base #: field:ir.actions.report.xml,report_xsl:0 msgid "XSL Path" -msgstr "" +msgstr "Ruta XSL" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_tr @@ -295,7 +322,7 @@ msgstr "Inuktitut / ᐃᓄᒃᑎᑐᑦ" #. module: base #: model:res.groups,name:base.group_multi_currency msgid "Multi Currencies" -msgstr "" +msgstr "Multimoneda" #. module: base #: model:ir.module.module,description:base.module_l10n_cl @@ -307,6 +334,12 @@ msgid "" "\n" " " msgstr "" +"\n" +"Plan de cuentas y localización de impuestos chilenos.\n" +"==============================================\n" +"Plan contable chileno e impuestos de acuerdo a disposiciones vigentes\n" +"\n" +" " #. module: base #: model:ir.module.module,shortdesc:base.module_sale @@ -319,6 +352,7 @@ msgid "" "The internal user that is in charge of communicating with this contact if " "any." msgstr "" +"El usuario interno encargado de comunicarse con este contacto si lo hubiese." #. module: base #: view:res.partner:0 @@ -353,6 +387,15 @@ msgid "" " * Commitment Date\n" " * Effective Date\n" msgstr "" +"\n" +"Añade información adicional al pedido de venta.\n" +"===================================================\n" +"\n" +"Puede añadir las siguientes fechas adicionales a un pedido de venta:\n" +"-----------------------------------------------------------\n" +" * Fecha solicitada\n" +" * Fecha de confirmación\n" +" * Fecha efectiva\n" #. module: base #: help:ir.actions.act_window,res_id:0 @@ -360,6 +403,8 @@ msgid "" "Database ID of record to open in form view, when ``view_mode`` is set to " "'form' only" msgstr "" +"Id. de la base datos del registro para abrir en el formulario de vista, " +"cuando se establece el modo de visto únicamente a 'formulario'" #. module: base #: field:res.partner.address,name:0 @@ -435,6 +480,8 @@ msgid "" "There is already a shared filter set as default for %(model)s, delete or " "change it before setting a new default" msgstr "" +"Ya existe un filtro compartido por defecto para %(model)s, elimínelo o " +"cámbielo antes de configurar uno nuevo" #. module: base #: code:addons/orm.py:2648 @@ -529,12 +576,12 @@ msgstr "" #. module: base #: field:ir.model.relation,name:0 msgid "Relation Name" -msgstr "" +msgstr "Nombre de relación" #. module: base #: view:ir.rule:0 msgid "Create Access Right" -msgstr "" +msgstr "Crear permisos de acceso" #. module: base #: model:res.country,name:base.tv @@ -574,7 +621,7 @@ msgstr "" #. module: base #: view:workflow.transition:0 msgid "Workflow Transition" -msgstr "" +msgstr "Transición del flujo de trabajo" #. module: base #: model:res.country,name:base.gf @@ -697,7 +744,7 @@ msgstr "Colombia" #. module: base #: model:res.partner.title,name:base.res_partner_title_mister msgid "Mister" -msgstr "" +msgstr "Señor" #. module: base #: help:res.country,code:0 @@ -726,7 +773,7 @@ msgstr "Untranslated" #. module: base #: view:ir.mail_server:0 msgid "Outgoing Mail Server" -msgstr "" +msgstr "Servidor de correo saliente" #. module: base #: help:ir.actions.act_window,context:0 @@ -820,6 +867,14 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"Pulse para añadir un contacto en la libreta de direcciones.\n" +"

\n" +"OpenERP le ayuda a gestionar todas las actividades relacionadas con los " +"clientes: discusiones, historial de oportunidades de negocio, documentos, " +"etc.\n" +"

\n" +" " #. module: base #: model:ir.module.module,description:base.module_web_linkedin @@ -876,7 +931,7 @@ msgstr "Rumanía - Contabilidad" #. module: base #: model:ir.model,name:base.model_res_config_settings msgid "res.config.settings" -msgstr "" +msgstr "Parámetros de configuración" #. module: base #: help:res.partner,image_small:0 @@ -885,6 +940,9 @@ msgid "" "image, with aspect ratio preserved. Use this field anywhere a small image is " "required." msgstr "" +"Imagen de tamaño pequeño de este contacto. Se redimensiona automáticamente a " +"64x64 px, con el ratio de aspecto preservado. Use este campo donde se " +"requiera una imagen pequeña." #. module: base #: help:ir.actions.server,mobile:0 @@ -906,7 +964,7 @@ msgstr "Seguridad y autenticación" #. module: base #: model:ir.module.module,shortdesc:base.module_web_calendar msgid "Web Calendar" -msgstr "" +msgstr "Calendario web" #. module: base #: selection:base.language.install,lang:0 @@ -917,7 +975,7 @@ msgstr "Swedish / svenska" #: field:base.language.export,name:0 #: field:ir.attachment,datas_fname:0 msgid "File Name" -msgstr "" +msgstr "Nombre de Archivo" #. module: base #: model:res.country,name:base.rs @@ -1013,7 +1071,7 @@ msgstr "Preferencias de email" #: code:addons/base/ir/ir_fields.py:196 #, python-format msgid "'%s' does not seem to be a valid date for field '%%(field)s'" -msgstr "" +msgstr "'%s' no parece ser una fecha valida para el campo '%%(field)s'" #. module: base #: view:res.partner:0 @@ -1030,6 +1088,7 @@ msgstr "Zimbabwe" msgid "" "Type of the constraint: `f` for a foreign key, `u` for other constraints." msgstr "" +"Tipo de restricción: 'f' para un clave foránea, 'u' para otras restricciones." #. module: base #: view:ir.actions.report.xml:0 @@ -1111,7 +1170,7 @@ msgstr "Otra licencia OSI Aprobada" #. module: base #: model:ir.module.module,shortdesc:base.module_web_gantt msgid "Web Gantt" -msgstr "" +msgstr "Diagrama Gantt web" #. module: base #: model:ir.actions.act_window,name:base.act_menu_create @@ -1138,7 +1197,7 @@ msgstr "Usuarios google" #. module: base #: model:ir.module.module,shortdesc:base.module_fleet msgid "Fleet Management" -msgstr "" +msgstr "Gestión de Flotas" #. module: base #: help:ir.server.object.lines,value:0 @@ -1164,7 +1223,7 @@ msgstr "Principado de Andorra" #. module: base #: field:ir.rule,perm_read:0 msgid "Apply for Read" -msgstr "" +msgstr "Aplicar para lectura" #. module: base #: model:res.country,name:base.mn @@ -1194,7 +1253,7 @@ msgstr "" #: code:addons/base/ir/ir_model.py:727 #, python-format msgid "Document model" -msgstr "" +msgstr "Modelo de documento" #. module: base #: view:res.lang:0 @@ -1244,12 +1303,12 @@ msgstr "El nombre del país debe ser único" #. module: base #: field:ir.module.module,installed_version:0 msgid "Latest Version" -msgstr "" +msgstr "Última versión" #. module: base #: view:ir.rule:0 msgid "Delete Access Right" -msgstr "" +msgstr "Eliminar permiso de acceso" #. module: base #: code:addons/base/ir/ir_mail_server.py:213 @@ -1276,7 +1335,7 @@ msgstr "Islas Caimán" #. module: base #: view:ir.rule:0 msgid "Record Rule" -msgstr "" +msgstr "Regla de registro" #. module: base #: model:res.country,name:base.kr @@ -1304,7 +1363,7 @@ msgstr "Contribuyentes" #. module: base #: field:ir.rule,perm_unlink:0 msgid "Apply for Delete" -msgstr "" +msgstr "Aplicar para eliminación" #. module: base #: selection:ir.property,type:0 @@ -1319,7 +1378,7 @@ msgstr "Visible" #. module: base #: model:ir.actions.client,name:base.action_client_base_menu msgid "Open Settings Menu" -msgstr "" +msgstr "Abrir menú 'Configuración'" #. module: base #: selection:base.language.install,lang:0 @@ -1405,7 +1464,7 @@ msgstr "Tests" #. module: base #: field:ir.actions.report.xml,attachment:0 msgid "Save as Attachment Prefix" -msgstr "" +msgstr "Prefijo del adjunto al guardar como" #. module: base #: field:ir.ui.view_sc,res_id:0 @@ -1442,7 +1501,7 @@ msgstr "Haití" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_fr_hr_payroll msgid "French Payroll" -msgstr "" +msgstr "Nomina de Francia" #. module: base #: view:ir.ui.view:0 @@ -1562,6 +1621,12 @@ msgid "" "=============\n" " " msgstr "" +"\n" +"Este módulo añade el menú y características de reclamaciones al portal si " +"los módulos 'claim' y 'portal' están instalados.\n" +"=============================================================================" +"====================\n" +" " #. module: base #: model:ir.actions.act_window,help:base.action_res_partner_bank_account_form @@ -1593,7 +1658,7 @@ msgstr "" #. module: base #: model:res.country,name:base.mf msgid "Saint Martin (French part)" -msgstr "" +msgstr "San Martín (zona francesa)" #. module: base #: model:ir.model,name:base.model_ir_exports @@ -1610,7 +1675,7 @@ msgstr "Ninguna lengua con el código \"%s\" existe" #: model:ir.module.category,name:base.module_category_social_network #: model:ir.module.module,shortdesc:base.module_mail msgid "Social Network" -msgstr "" +msgstr "Red Social" #. module: base #: view:res.lang:0 @@ -1620,12 +1685,12 @@ msgstr "%Y - Año con siglo." #. module: base #: view:res.company:0 msgid "Report Footer Configuration" -msgstr "" +msgstr "Configuración de pie de informe" #. module: base #: field:ir.translation,comments:0 msgid "Translation comments" -msgstr "" +msgstr "Comentarios de traducción" #. module: base #: model:ir.module.module,description:base.module_lunch @@ -1690,7 +1755,7 @@ msgstr "" #. module: base #: help:res.partner,website:0 msgid "Website of Partner or Company" -msgstr "" +msgstr "Sitio web de la empresa o compañía" #. module: base #: help:base.language.install,overwrite:0 @@ -1737,7 +1802,7 @@ msgstr "" #. module: base #: model:ir.module.module,summary:base.module_sale msgid "Quotations, Sale Orders, Invoicing" -msgstr "" +msgstr "Presupuestos, órdenes de venta, facturación" #. module: base #: field:res.users,login:0 diff --git a/openerp/addons/base/i18n/et.po b/openerp/addons/base/i18n/et.po index 915dc7a15c8..c6053f615b7 100644 --- a/openerp/addons/base/i18n/et.po +++ b/openerp/addons/base/i18n/et.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.4\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-03 16:01+0000\n" -"PO-Revision-Date: 2012-12-18 22:00+0000\n" +"PO-Revision-Date: 2012-12-20 18:03+0000\n" "Last-Translator: Ahti Hinnov \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: 2012-12-19 05:13+0000\n" +"X-Launchpad-Export-Date: 2012-12-21 04:38+0000\n" "X-Generator: Launchpad (build 16378)\n" #. module: base @@ -531,7 +531,7 @@ msgstr "Kuupäeva vorming" #. module: base #: model:ir.module.module,shortdesc:base.module_base_report_designer msgid "OpenOffice Report Designer" -msgstr "" +msgstr "OpenOffice aruande kujundaja" #. module: base #: model:res.country,name:base.an @@ -980,7 +980,7 @@ msgstr "" #. module: base #: view:res.users:0 msgid "Email Preferences" -msgstr "" +msgstr "E-posti seadistused" #. module: base #: code:addons/base/ir/ir_fields.py:196 @@ -1355,7 +1355,7 @@ msgstr "" #: code:addons/base/module/wizard/base_language_install.py:53 #, python-format msgid "Language Pack" -msgstr "" +msgstr "Keelepakett" #. module: base #: model:ir.module.module,shortdesc:base.module_web_tests @@ -1571,7 +1571,7 @@ msgstr "" #. module: base #: view:res.company:0 msgid "Report Footer Configuration" -msgstr "" +msgstr "Aruande jaluse seadistamine" #. module: base #: field:ir.translation,comments:0 @@ -1951,7 +1951,7 @@ msgstr "Lisatud mudel" #. module: base #: field:res.partner.bank,footer:0 msgid "Display on Reports" -msgstr "" +msgstr "Kuva aruannetes" #. module: base #: model:ir.module.module,description:base.module_project_timesheet @@ -2005,7 +2005,7 @@ msgstr "Valem" #: code:addons/base/res/res_users.py:311 #, python-format msgid "Can not remove root user!" -msgstr "Ei saa eemaldada root kasutajat!" +msgstr "Ei saa eemaldada juurkasutajat!" #. module: base #: model:res.country,name:base.mw @@ -2144,7 +2144,7 @@ msgstr "Hispaania / Español" #. module: base #: selection:base.language.install,lang:0 msgid "Korean (KP) / 한국어 (KP)" -msgstr "" +msgstr "Korea (KP) / 한국어 (KP)" #. module: base #: model:res.country,name:base.ax @@ -2487,7 +2487,7 @@ msgstr "" #. module: base #: field:res.company,rml_header1:0 msgid "Company Slogan" -msgstr "" +msgstr "Ettevõtte loosung" #. module: base #: model:res.country,name:base.bb @@ -2537,7 +2537,7 @@ msgstr "Kreeka / Ελληνικά" #. module: base #: field:res.company,custom_footer:0 msgid "Custom Footer" -msgstr "" +msgstr "Kohandatud jalus" #. module: base #: model:ir.module.module,shortdesc:base.module_sale_crm @@ -2593,7 +2593,7 @@ msgstr "Arveldus" #. module: base #: field:ir.ui.view_sc,name:0 msgid "Shortcut Name" -msgstr "Kiirkorralduse nimi" +msgstr "Otsetee nimi" #. module: base #: field:res.partner,contact_address:0 @@ -2750,7 +2750,7 @@ msgstr "Ekspordi tõlked" #: model:res.groups,name:base.group_sale_manager #: model:res.groups,name:base.group_tool_manager msgid "Manager" -msgstr "" +msgstr "Juht" #. module: base #: code:addons/base/ir/ir_model.py:718 @@ -3009,7 +3009,7 @@ msgstr "Norfolki saar" #. module: base #: selection:base.language.install,lang:0 msgid "Korean (KR) / 한국어 (KR)" -msgstr "" +msgstr "Korea (KR) / 한국어 (KR)" #. module: base #: help:ir.model.fields,model:0 @@ -3055,7 +3055,7 @@ msgstr "Viga! Sa ei saa luua rekursiivseid ettevõtteid." #: view:res.users:0 #, python-format msgid "Application" -msgstr "" +msgstr "Rakendamine" #. module: base #: model:res.groups,comment:base.group_hr_manager @@ -3636,7 +3636,7 @@ msgstr "" #: field:res.company,rml_footer:0 #: field:res.company,rml_footer_readonly:0 msgid "Report Footer" -msgstr "" +msgstr "Aruande jalus" #. module: base #: selection:res.lang,direction:0 @@ -3868,7 +3868,7 @@ msgstr "Peata kõik" #. module: base #: field:res.company,paper_format:0 msgid "Paper Format" -msgstr "" +msgstr "Paberi formaat" #. module: base #: model:ir.module.module,description:base.module_note_pad @@ -4467,6 +4467,8 @@ msgid "" "The selected language has been successfully installed. You must change the " "preferences of the user and open a new menu to view the changes." msgstr "" +"Valitud keel on edukalt paigaldatud. Muudatuste nägemiseks pead sa muutma " +"kasutaja eelistusi ja avama uue menüü." #. module: base #: field:ir.actions.act_window.view,view_id:0 @@ -4714,7 +4716,7 @@ msgstr "" #. module: base #: selection:base.language.install,lang:0 msgid "Portuguese (BR) / Português (BR)" -msgstr "" +msgstr "Portugali (BR) / Português (BR)" #. module: base #: model:ir.model,name:base.model_ir_needaction_mixin @@ -5154,7 +5156,7 @@ msgstr "" #. module: base #: view:res.company:0 msgid "Preview Header/Footer" -msgstr "" +msgstr "Päise/jaluse eelvaade" #. module: base #: field:ir.ui.menu,parent_id:0 @@ -5694,7 +5696,7 @@ msgstr "Omadus kustutamisel many2one väljadel" #. module: base #: model:ir.module.category,name:base.module_category_accounting_and_finance msgid "Accounting & Finance" -msgstr "" +msgstr "Raamatupidamine ja rahandus" #. module: base #: field:ir.actions.server,write_id:0 @@ -5717,7 +5719,7 @@ msgstr "" #: model:ir.module.category,name:base.module_category_usability #: view:res.users:0 msgid "Usability" -msgstr "" +msgstr "Kasutatavus" #. module: base #: field:ir.actions.act_window,domain:0 @@ -5836,12 +5838,12 @@ msgstr "Grupi nimi ei tohi alata \"-\" märgiga" #. module: base #: view:ir.module.module:0 msgid "Apps" -msgstr "" +msgstr "Rakendused" #. module: base #: view:ir.ui.view_sc:0 msgid "Shortcut" -msgstr "Lühend" +msgstr "Otsetee" #. module: base #: field:ir.model.data,date_init:0 @@ -6508,7 +6510,7 @@ msgstr "" #. module: base #: model:res.groups,name:base.group_partner_manager msgid "Contact Creation" -msgstr "" +msgstr "Kontaktide loomine" #. module: base #: view:ir.module.module:0 @@ -6718,7 +6720,7 @@ msgstr "" #. module: base #: selection:res.currency,position:0 msgid "After Amount" -msgstr "" +msgstr "Peale summat" #. module: base #: selection:base.language.install,lang:0 @@ -7044,7 +7046,7 @@ msgstr "Mitmel dokumendil" #: view:res.users:0 #: view:wizard.ir.model.menu.create:0 msgid "or" -msgstr "" +msgstr "või" #. module: base #: model:ir.module.module,shortdesc:base.module_account_accountant @@ -7608,7 +7610,7 @@ msgstr "Kohandatud väli" #. module: base #: model:ir.module.module,summary:base.module_account_accountant msgid "Financial and Analytic Accounting" -msgstr "" +msgstr "Finants- ja analüütiline raamatupidamine" #. module: base #: model:ir.module.module,shortdesc:base.module_portal_project @@ -7708,7 +7710,7 @@ msgstr "" #. module: base #: model:res.partner.bank.type,name:base.bank_normal msgid "Normal Bank Account" -msgstr "" +msgstr "Tavaline pangakonto" #. module: base #: view:ir.actions.wizard:0 @@ -7980,7 +7982,7 @@ msgstr "Tühista eemaldus" #. module: base #: view:res.bank:0 msgid "Communication" -msgstr "Suhtlemine" +msgstr "Kontakt" #. module: base #: model:ir.module.module,shortdesc:base.module_analytic @@ -9180,7 +9182,7 @@ msgstr "Gambia" #: view:res.partner:0 #: field:res.users,company_ids:0 msgid "Companies" -msgstr "Firmad" +msgstr "Ettevõtted" #. module: base #: help:res.currency,symbol:0 @@ -9249,7 +9251,7 @@ msgstr "" #: view:res.users:0 #: view:wizard.ir.model.menu.create:0 msgid "Cancel" -msgstr "Tühista" +msgstr "Loobu" #. module: base #: code:addons/orm.py:1509 @@ -9571,7 +9573,7 @@ msgstr "Paigaldamise ootel" #: model:ir.module.module,shortdesc:base.module_base #: field:res.currency,base:0 msgid "Base" -msgstr "Baas" +msgstr "Alus" #. module: base #: field:ir.model.data,model:0 @@ -9660,12 +9662,12 @@ msgstr "Minutid" #. module: base #: view:res.currency:0 msgid "Display" -msgstr "" +msgstr "Kuvamine" #. module: base #: model:res.groups,name:base.group_multi_company msgid "Multi Companies" -msgstr "" +msgstr "Mitu ettevõtet" #. module: base #: help:res.users,menu_id:0 @@ -10034,7 +10036,7 @@ msgstr "Ettevõttega seotud pangakontod" #: model:ir.ui.menu,name:base.next_id_64 #: view:res.users:0 msgid "Sales" -msgstr "Müügid" +msgstr "Müük" #. module: base #: field:ir.actions.server,child_ids:0 @@ -10321,7 +10323,7 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_sale_stock msgid "Sales and Warehouse Management" -msgstr "" +msgstr "Müük ja laohaldus" #. module: base #: field:ir.model.fields,model:0 @@ -12095,7 +12097,7 @@ msgstr "ir.values" #. module: base #: model:res.groups,name:base.group_no_one msgid "Technical Features" -msgstr "" +msgstr "Tehnilised funktsioonid" #. module: base #: selection:base.language.install,lang:0 @@ -12471,7 +12473,7 @@ msgstr "Küpros" #. module: base #: field:res.users,new_password:0 msgid "Set Password" -msgstr "" +msgstr "Määra salasõna" #. module: base #: field:ir.actions.server,subject:0 @@ -12503,7 +12505,7 @@ msgstr "" #. module: base #: selection:res.currency,position:0 msgid "Before Amount" -msgstr "" +msgstr "Enne summat" #. module: base #: field:res.request,act_from:0 @@ -12572,7 +12574,7 @@ msgstr "" #. module: base #: field:res.company,company_registry:0 msgid "Company Registry" -msgstr "Ettevõtte register" +msgstr "Ettevõtte registrikood" #. module: base #: view:ir.actions.report.xml:0 @@ -12917,7 +12919,7 @@ msgstr "Zaire" #. module: base #: model:ir.module.module,summary:base.module_project msgid "Projects, Tasks" -msgstr "" +msgstr "Projektid, ülesanded" #. module: base #: field:workflow.instance,res_id:0 @@ -14247,7 +14249,7 @@ msgstr "Faks" #: view:res.users:0 #: field:res.users,company_id:0 msgid "Company" -msgstr "Firma" +msgstr "Ettevõte" #. module: base #: model:ir.module.category,name:base.module_category_report_designer diff --git a/openerp/addons/base/i18n/hr.po b/openerp/addons/base/i18n/hr.po index c18682614bf..0dacf6c6adb 100644 --- a/openerp/addons/base/i18n/hr.po +++ b/openerp/addons/base/i18n/hr.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.4\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-03 16:01+0000\n" -"PO-Revision-Date: 2012-12-17 20:19+0000\n" +"PO-Revision-Date: 2012-12-19 20:48+0000\n" "Last-Translator: Goran Kliska \n" "Language-Team: openerp-translators\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-12-18 04:58+0000\n" -"X-Generator: Launchpad (build 16372)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:42+0000\n" +"X-Generator: Launchpad (build 16378)\n" "Language: hr\n" #. module: base @@ -714,7 +714,7 @@ msgstr "Palau" #. module: base #: view:res.partner:0 msgid "Sales & Purchases" -msgstr "Prodaja i naručivanje" +msgstr "Prodaja i nabava" #. module: base #: view:ir.translation:0 @@ -1511,7 +1511,7 @@ msgstr "" #: model:ir.module.category,name:base.module_category_purchase_management #: model:ir.ui.menu,name:base.menu_purchase_root msgid "Purchases" -msgstr "Nabave" +msgstr "Nabava" #. module: base #: model:res.country,name:base.md diff --git a/openerp/addons/base/i18n/hu.po b/openerp/addons/base/i18n/hu.po index 8948d23c89e..3808cfd8516 100644 --- a/openerp/addons/base/i18n/hu.po +++ b/openerp/addons/base/i18n/hu.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-03 16:01+0000\n" -"PO-Revision-Date: 2012-12-18 17:37+0000\n" +"PO-Revision-Date: 2012-12-20 15:01+0000\n" "Last-Translator: krnkris \n" "Language-Team: Hungarian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-12-19 05:14+0000\n" +"X-Launchpad-Export-Date: 2012-12-21 04:38+0000\n" "X-Generator: Launchpad (build 16378)\n" #. module: base @@ -251,6 +251,35 @@ msgid "" "* Planned Revenue by Stage and User (graph)\n" "* Opportunities by Stage (graph)\n" msgstr "" +"\n" +"Az alapértelemezett OpenERP CRM Ügyfélkapcsolat-kezelés\n" +"=====================================================\n" +"\n" +"Ez az alkalmazás lehetővé teszi egy csoportnak, hogy inteligensen és " +"hatékonyan kezelje a vezetői gyűléseket, lehetőségeket, találkozókat és " +"telefonokat.\n" +"\n" +"Kezeli a kulcsfontosságú munkákat mint kommunikáció, azonosítás, kiosztás, " +"felosztás és értesítés.\n" +"\n" +"OpenERP biztosítja, hogy minden esetben nyomon követhetőek legyenek a " +"felhasználók, vásárlók és beszállítók. Autómatikusan küldhető emlékeztető, " +"kiterjezti az igényt, bekapcsol speciális eszközt és még több cselekvésen " +"alapuló módot, melyet a vállalkozása szabályaira szabhat.\n" +"\n" +"A legnayobb dolog ebben a rendszerben, hgoy a felhasználónak nem kell semmi " +"speciálisat véghezvinnie. A CRM modulnak van egy e-amil átjárója ami " +"szinkronizálja az e-maileket az OpenERP által. Így, a felhasználók e-" +"maileket küldhetnek az igénylés helyére.\n" +"\n" +"OpenERP törődni fog az üzenetek megköszönésével, automatikusan átirányítva a " +"megfelelő osztályhoz, biztosítva a jövőbeni munkafolyamat megfelő helyét.\n" +"\n" +"\n" +"Dashboard / irányítópult a CRM-ben, ezt is beleértve:\n" +"-------------------------------\n" +"* Tervezett bevétel szintek és felhasználók szerint (grafikon)\n" +"* Lehetőségek szintenként (grafikon)\n" #. module: base #: code:addons/base/ir/ir_model.py:397 @@ -5753,6 +5782,23 @@ msgid "" "since it's the same which has been renamed.\n" " " msgstr "" +"\n" +"Ez a modul lehetővé teszi a felhasználók részére a partnerek leválogatását.\n" +"=================================================================\n" +"\n" +"A profil kritériumokat használja az előző leválogató modulból ami fel lett " +"javítva. \n" +"Köszönhető az új felfogású kikérdezőnek. Újra tudja csoportosítani a " +"kérdéseket\n" +"egy kikérdezőbe és direkt használhatja azokat a partnerekhez.\n" +"\n" +"Össze lett kapcsolva az előző CRM & SRM leválogatás eszközzel mivel ezek át " +"lettek fedve.\n" +"\n" +" **Megjegyzés** ez a modul nem kompatibilis a leválogató modullal, mivel " +"ez ugyanaz, csak más \n" +"másként lett elnevezve.\n" +" " #. module: base #: model:res.country,name:base.gt @@ -6358,7 +6404,7 @@ msgstr "Man Sziget" #. module: base #: help:ir.actions.client,res_model:0 msgid "Optional model, mostly used for needactions." -msgstr "" +msgstr "Választható modell, főként szükséges műveletekhez használják." #. module: base #: field:ir.attachment,create_uid:0 @@ -6523,6 +6569,58 @@ msgid "" " * Zip return for separated PDF\n" " * Web client WYSIWYG\n" msgstr "" +"\n" +"Ez a modul hozzáad egy Kimutatás motort WebKit könyvtárt alapul véve " +"(wkhtmltopdf) a HTML +CCS megalkotott kimutatások támogatásához.\n" +"=============================================================================" +"========================================\n" +"\n" +"A modul felépítését és egy pár kódolást a report_openoffice modul " +"ösztönözte.\n" +"\n" +"A modul lehetővé teszi:\n" +"------------------\n" +" - HTML kimutatás meghatározását\n" +" - Többszörös fejléc támogatása\n" +" - Többszörös logó használat\n" +" - Többszörös vállalat támogatás\n" +" - HTML és CSS-3 támogatás (az aktuális WebKIT verzió határain belül)\n" +" - JavaScript támogatás\n" +" - Nyers HTML debugger\n" +" - Könyv nyomtatási lehetőség\n" +" - Margó meghatározás\n" +" - Papír méret meghatározás\n" +"\n" +"Többszörös fejléc és logó meghatározható vállalatonként. CCS stílus, fejléc " +"és\n" +"lábjegyzet meghatározható vállalatonként.\n" +"\n" +"Például kimutatást megtekinthet webkit_report_sample modulban, és ebben a " +"videóban:\n" +" http://files.me.com/nbessi/06n92k.mov\n" +"\n" +"Követelmények és telepítés:\n" +"------------------------------\n" +"Ehhez a modulhoz kell a ``wkthtmltopdf`` könyvtár a HTML dokumentumok PDF " +"ábrázolásához.\n" +"Verzió 0.9.9 vagy későbbi szükséges, és megtalálható a \n" +"http://code.google.com/p/wkhtmltopdf/ a Linux, Mac OS X (i386) és Windows " +"(32bits) rendszerekhez.\n" +"\n" +"A könyvtár OpenERP szerveren való telepítése után, be kell állítani az " +"elérési utat a ``wkthtmltopdf`` futtatójához minden vállalathoz.\n" +"\n" +"Ha nem talál fejlécet/lábjegyzetet vagy egyéb probléma merül fel a Linuxon, " +"akkor győződjön meg, hogy telepíti a könyvtár 'static' verzióját. UBUNTU " +"alatt ez ey ismert ``wkhtmltopdf`` probléma.\n" +"\n" +"\n" +"Tennivaló:\n" +"-----\n" +" * JavaScript támogatás aktiválás deaktiválás\n" +" * Gyűjtő és könyv formátum támogatás\n" +" * Zip visszaadás egy külön PDF-hez\n" +" * Web kliens WYSIWYG\n" #. module: base #: model:res.groups,name:base.group_sale_salesman_all_leads @@ -8175,6 +8273,30 @@ msgid "" "* In a module, so that administrators and users of OpenERP who do not\n" " need or want an online import can avoid it being available to users.\n" msgstr "" +"\n" +"Új fájl import kiterjesztések az OpenERP rendszerhez\n" +"======================================\n" +"\n" +"Az OpenERP fájl rendszerének újra-implementálása:\n" +"\n" +"* Szerver oldal, az előző rendszer a legtöbb végrehalytást a kliensre " +"kényszerítette\n" +" amely megduplázta az energiát (kliensek közt), az importálási rendszert \n" +" nehézkessé teszi a kliens nélkül(direkt RPC vagy\n" +" más automata formátumnál) és az export/import rendszer érthetőségét\n" +" is nehézkessé teszi amint 3 + különböző projekten hajtódik végre.\n" +"\n" +"* Érthetőbben a felhasználók és partnerek a saját import kivitelezést tudnak " +"\n" +" készíteni más fájl formátumokból (pl. OpenDocument fájlok)\n" +" ami leegyszerűsítheti a munka folyamatuk kezelését az adat forrásból " +"való\n" +" előállítását.\n" +"\n" +"* A modulban, azok az OpenERP adminisztrátorok és felhasználók akik nem\n" +" igénylik az online importot biztosíthatják, hogy azok nem lesznek " +"elérhetők \n" +" a felhasználók részére.\n" #. module: base #: selection:res.currency,position:0 @@ -12740,7 +12862,7 @@ msgstr "Olvasási hozzáférési jog" #. module: base #: model:ir.module.module,shortdesc:base.module_analytic_user_function msgid "Jobs on Contracts" -msgstr "" +msgstr "Feladatok a szerződésekben" #. module: base #: code:addons/base/res/res_lang.py:187 @@ -14646,6 +14768,8 @@ msgid "" "Helps you manage your inventory and main stock operations: delivery orders, " "receptions, etc." msgstr "" +"Segít Önnek a készletek és a fő készletműveletek kezelésében: " +"szállítólevelek, áruátvételek, stb." #. module: base #: model:ir.model,name:base.model_base_module_update @@ -15790,6 +15914,10 @@ msgid "" " the rightmost column (value) contains the " "translations" msgstr "" +"CSV formátum: szerkessze egyenesen a megszokott táblázatkezelő " +"alkalmazásával,\n" +" a leg jobboldalt lévő oszlop (érték) " +"tartalmazza a fordításokat" #. module: base #: model:ir.module.module,description:base.module_account_chart @@ -15800,11 +15928,16 @@ msgid "" "\n" "Deactivates minimal chart of accounts.\n" msgstr "" +"\n" +"a minimum számlatükör kikapcsolása.\n" +"=============================\n" +"\n" +"Kikapcsolja a minimum számlatükröket.\n" #. module: base #: model:ir.module.module,shortdesc:base.module_base_crypt msgid "DB Password Encryption" -msgstr "" +msgstr "DB adatbázis jelszó titkosítás" #. module: base #: help:workflow.transition,act_to:0 @@ -15814,7 +15947,7 @@ msgstr "A cél tevékenység." #. module: base #: model:ir.module.module,shortdesc:base.module_project_issue msgid "Issue Tracker" -msgstr "" +msgstr "Ügy nyomonkövetése" #. module: base #: view:base.module.update:0 @@ -15830,6 +15963,9 @@ msgid "" "The common interface for plug-in.\n" "=================================\n" msgstr "" +"\n" +"A plug-in általános intefész\n" +"============================\n" #. module: base #: model:ir.module.module,description:base.module_sale_crm @@ -15848,11 +15984,26 @@ msgid "" "modules.\n" " " msgstr "" +"\n" +"Ez a modul útvonal rövidítéseket ad meg egy vagy több lehetséges eseményhez " +"a CRM (ügyfélkapcsolat kezelőben).\n" +"===========================================================================\n" +"\n" +"Ezek a rövidebb utak lehetővé teszik a kiválasztott esemény alapján generált " +"megrendelések létrehozását.\n" +"Különböző eseményekhez megnyílik (egy lista), ez generálja az események " +"szerinti megrendeléseket.\n" +"Az esemény ezután lezárásra kerül és hozzá lesz csatolva egy generált " +"megrendeléshez.\n" +"\n" +"Ajánljuk ennek a modulnak a telepítését, ha az eladás és a crm modult is " +"telepítette már.\n" +" " #. module: base #: model:res.country,name:base.bq msgid "Bonaire, Sint Eustatius and Saba" -msgstr "" +msgstr "Karib tengeri Bonaire, Sint Eustatius and Saba" #. module: base #: model:ir.actions.report.xml,name:base.ir_module_reference_print @@ -15887,6 +16038,10 @@ msgid "" "your home page.\n" "You can track your suppliers, customers and other contacts.\n" msgstr "" +"\n" +"Ez a modul egy gyors áttekintést tesz lehetővé a címjegyzékén, ami elérhető " +"a saját oldaláról.\n" +"Nyomon követheti a beszállítóit, vásárlóit és egyéb ügyfeleit.\n" #. module: base #: help:res.company,custom_footer:0 @@ -15894,6 +16049,8 @@ msgid "" "Check this to define the report footer manually. Otherwise it will be " "filled in automatically." msgstr "" +"Jelölje be a kimutatás lábjegyzet kézi meghatározásához. Egyébként " +"automatikusan ki lesz töltve." #. module: base #: view:res.partner:0 @@ -15908,7 +16065,7 @@ msgstr "Modulok telepítése" #. module: base #: model:ir.ui.menu,name:base.menu_import_crm msgid "Import & Synchronize" -msgstr "" +msgstr "Import & Szinkronizáció" #. module: base #: view:res.partner:0 @@ -15941,7 +16098,7 @@ msgstr "Forrás" #: field:ir.model.constraint,date_init:0 #: field:ir.model.relation,date_init:0 msgid "Initialization Date" -msgstr "" +msgstr "Alap adatok" #. module: base #: model:res.country,name:base.vu @@ -15972,6 +16129,26 @@ msgid "" " Unit price=225, Discount=0,00, Net price=225.\n" " " msgstr "" +"\n" +"Ez a modul lehetővé teszi az árengedmények számítását a megrendelések és " +"számlák sorain a partner árlistája alapján.\n" +"=============================================================================" +"==================================\n" +"\n" +"Ehhez egy új jelölő négyzet lesz, melynek neve 'látható árengedmény', hozzá " +"lesz adva az árlista formához.\n" +"\n" +"**Például:**\n" +" A PC1 termékhez és az \"ASUSTEK\" partnerhez: ha a listaár=450, és az ár " +"az \n" +" Asustek árlista ár=255 árból lett kalkulálva. Ha be van jelölve a " +"négyzet akkor\n" +" megrendelés sorához ez lesz jelölve: Egységár=450, Árengedmény=50,00, " +"Nettó ár=225.\n" +" Ha nincs bejelölve a négyzet akkor a megrendelés és a számla sorain a " +"következő lesz:\n" +" Egységár=225, Árengedmény=0,00, Nettó ár=225.\n" +" " #. module: base #: model:ir.module.module,shortdesc:base.module_crm @@ -15989,6 +16166,13 @@ msgid "" "OpenOffice. \n" "Once you have modified it you can upload the report using the same wizard.\n" msgstr "" +"\n" +"Ez a modul együtt lesz használva az OpenERP OpenOffice Pluginnal.\n" +"=========================================================\n" +"\n" +"Ez a modul az Import/Export .sxw kimutatáshoz varázsló ad amit az OpenOffice-" +"al tud módosítani.. \n" +"módosítás után ezzel a varázslóval újra fel tudja tölteni a kimutatást.\n" #. module: base #: view:base.module.upgrade:0 @@ -16023,12 +16207,13 @@ msgstr "" #. module: base #: selection:ir.mail_server,smtp_encryption:0 msgid "TLS (STARTTLS)" -msgstr "" +msgstr "TLS (STARTTLS)" #. module: base #: help:ir.actions.act_window,usage:0 msgid "Used to filter menu and home actions from the user form." msgstr "" +"A menű és főoldal műveletek szűrésére használták a felhasználói űrlapból." #. module: base #: model:res.country,name:base.sa @@ -16050,6 +16235,15 @@ msgid "" "order.\n" " " msgstr "" +"\n" +"Ez a modul lehetőséget ad MRP és eladási modul egyszeri telepítésére.\n" +"=============================================================================" +"=======\n" +"\n" +"Alapvetően akkor használt, ha nyomon szeretnénk követni a megrendelésekből " +"generált termelési megrendeléseket. A gyártási megrendeléshez ad hozzá " +"eladás nevet és eladási hivatkozást.\n" +" " #. module: base #: code:addons/base/ir/ir_fields.py:147 @@ -16073,6 +16267,12 @@ msgid "" "=========================\n" " " msgstr "" +"\n" +"Ez a modul hozzáadja a portáljához a project/terv menűt és annak " +"tulajdonságait (feladatait) ha a projekt/terv és portál telepítve vannak.\n" +"=============================================================================" +"=========================\n" +" " #. module: base #: code:addons/base/module/wizard/base_module_configuration.py:38 @@ -16085,7 +16285,7 @@ msgstr "Rendszer konfigurálása kész" #: view:ir.config_parameter:0 #: model:ir.ui.menu,name:base.ir_config_menu msgid "System Parameters" -msgstr "" +msgstr "Rendszer paraméterek" #. module: base #: model:ir.module.module,description:base.module_l10n_ch @@ -16203,7 +16403,7 @@ msgstr "Művelet több dokumentumon" #: 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 "Címek" #. module: base #: model:ir.module.module,description:base.module_anonymization @@ -16226,6 +16426,22 @@ msgid "" "anonymization process to recover your previous data.\n" " " msgstr "" +"\n" +"Ez a modul lehetővé teszi az adatbázis titkosítását.\n" +"===============================================\n" +"\n" +"Ezzel a modullal a bizalmas adatait biztonságban tarthatja egy megadott " +"adatbázisban.\n" +"Ez az eljárás hasznos, ha költöztetéskor megakarja védeni a saját ügyfelei " +"bizalmas adatait. \n" +"Az alapelv az, hogy egy titkosító eszközt futtat amely elrejti a bizalmas " +"adatokat (ki lesznek \n" +"cserélve ‘XXX’ karakterekkel). Ekkor elküldheti a titkosított adatokat a " +"költözési csoporhoz.\n" +"Amikor visszatértek a költöztetni kívánt adatok, akkor vissza lehet állítani " +"azokat\n" +"a titkosító eljárással az adatok visszanyeréssel.\n" +" " #. module: base #: model:ir.module.module,description:base.module_web_analytics @@ -16237,6 +16453,12 @@ msgid "" "Collects web application usage with Google Analytics.\n" " " msgstr "" +"\n" +"Google Analytics.\n" +"==============================\n" +"\n" +"Összegyűjti a web alkalmazás használaát a Google Analytics rendszerrel.\n" +" " #. module: base #: help:ir.sequence,implementation:0 @@ -16245,6 +16467,9 @@ msgid "" "later is slower than the former but forbids any gap in the sequence (while " "they are possible in the former)." msgstr "" +"Két sorrendet ajánl a tárgy beillesztésthez: Alapértelmezett és 'Nincs rés'. " +"A későbbi lasúbb mint a mostani, de megtilt minden rést ami ebben a " +"sorrendben van (mivel ezek az előzőben lehettek)." #. module: base #: model:res.country,name:base.gn @@ -16280,7 +16505,7 @@ msgstr "Hiba ! Nem hozhat létre rekurzív menüket." #. module: base #: view:ir.translation:0 msgid "Web-only translations" -msgstr "" +msgstr "Kizárólag-web fordítások" #. module: base #: view:ir.rule:0 @@ -16337,16 +16562,60 @@ msgid "" "\n" " " msgstr "" +"\n" +"Belga számlatükör és lokalizáció \n" +"\n" +"This is the base module to manage the accounting chart for Belgium in " +"OpenERP.\n" +"=============================================================================" +"=\n" +"\n" +"After installing this module, the Configuration wizard for accounting is " +"launched.\n" +" * We have the account templates which can be helpful to generate Charts " +"of Accounts.\n" +" * On that particular wizard, you will be asked to pass the name of the " +"company,\n" +" the chart template to follow, the no. of digits to generate, the code " +"for your\n" +" account and bank account, currency to create journals.\n" +"\n" +"Thus, the pure copy of Chart Template is generated.\n" +"\n" +"Wizards provided by this module:\n" +"--------------------------------\n" +" * Partner VAT Intra: Enlist the partners with their related VAT and " +"invoiced\n" +" amounts. Prepares an XML file format.\n" +" \n" +" **Path to access :** Invoicing/Reporting/Legal Reports/Belgium " +"Statements/Partner VAT Intra\n" +" * Periodical VAT Declaration: Prepares an XML file for Vat Declaration " +"of\n" +" the Main company of the User currently Logged in.\n" +" \n" +" **Path to access :** Invoicing/Reporting/Legal Reports/Belgium " +"Statements/Periodical VAT Declaration\n" +" * Annual Listing Of VAT-Subjected Customers: Prepares an XML file for " +"Vat\n" +" Declaration of the Main company of the User currently Logged in Based " +"on\n" +" Fiscal year.\n" +" \n" +" **Path to access :** Invoicing/Reporting/Legal Reports/Belgium " +"Statements/Annual Listing Of VAT-Subjected Customers\n" +"\n" +" " #. module: base #: model:ir.module.module,shortdesc:base.module_base_gengo msgid "Automated Translations through Gengo API" -msgstr "" +msgstr "Automatikus fordítás a Gengo API keresztül" #. module: base #: model:ir.module.module,shortdesc:base.module_account_payment msgid "Suppliers Payment Management" -msgstr "" +msgstr "Szállítói kifizetések kezelése" #. module: base #: model:res.country,name:base.sv @@ -16376,7 +16645,7 @@ msgstr "Thaiföld" #. module: base #: model:ir.module.module,summary:base.module_account_voucher msgid "Send Invoices and Track Payments" -msgstr "" +msgstr "Számlák küldése és fizetések nyomonkövetése" #. module: base #: model:ir.ui.menu,name:base.menu_crm_config_lead @@ -16387,6 +16656,7 @@ msgstr "Lehetőségek" #: model:res.country,name:base.gg msgid "Guernsey" msgstr "" +"Guernsey-sziget - Guernsey valutaunióban van az Egyesült Királysággal" #. module: base #: selection:base.language.install,lang:0 @@ -16406,6 +16676,17 @@ msgid "" " bilgileriniz, ilgili para birimi gibi bilgiler isteyecek.\n" " " msgstr "" +"\n" +"Török számlatükör és lokalizáció\n" +"\n" +"Türkiye için Tek düzen hesap planı şablonu OpenERP Modülü.\n" +"==========================================================\n" +"\n" +"Bu modül kurulduktan sonra, Muhasebe yapılandırma sihirbazı çalışır\n" +" * Sihirbaz sizden hesap planı şablonu, planın kurulacağı şirket, banka " +"hesap\n" +" bilgileriniz, ilgili para birimi gibi bilgiler isteyecek.\n" +" " #. module: base #: selection:workflow.activity,join_mode:0 @@ -16418,6 +16699,8 @@ msgstr "És" msgid "" "Database identifier of the record to which this applies. 0 = for all records" msgstr "" +"Adatbázis azonosító arra a rekordra amelyre ez vonatkozik. 0 = összes " +"rekordra" #. module: base #: field:ir.model.fields,relation:0 @@ -16427,7 +16710,7 @@ msgstr "Objektum kapcsolat" #. module: base #: model:ir.module.module,shortdesc:base.module_account_voucher msgid "eInvoicing & Payments" -msgstr "" +msgstr "Számlázás & Kifizetések" #. module: base #: model:ir.module.module,description:base.module_base_crypt @@ -16463,6 +16746,42 @@ msgid "" "This module is currently not compatible with the ``user_ldap`` module and\n" "will disable LDAP authentication completely if installed at the same time.\n" msgstr "" +"\n" +"Rendesszövegű jelszó kiváltása biztonsági hasító függvénnyel az " +"adatbázisban.\n" +"================================================================\n" +"\n" +"A meglévő felhasználói adatbázisban, a rendesszövegű jelszavak azonnal el " +"lesznek távolítva\n" +"amint telepítésre kerül a base_crypt.\n" +"\n" +"Minden jelszó ki lesz cserélve egy biztonságos, konzervált, kriptográfiai " +"hasító függvénnyel, \n" +"ezzel megakadályozva az eredeti jelszó kiolvasását az adatbázisból.\n" +"\n" +"Miután telepítette ezt a modult, nem lesz lehetősége az elfelejtett jelszó " +"visszafejtésére \n" +"a felhasználók részéről, az adminisztátor egyedüli lehetősége lesz egy új " +"jelszó megadása.\n" +"\n" +"Biztonsági figyelmeztetés:\n" +"-----------------\n" +"Ennek a modulnak a telepítésével nem hagyhatja figyelmen kívül a többi " +"biztonsági intézkedést,\n" +"mivel a jelszó a hálózaton keresztül kódolatlanul halad keresztül, kivéve, " +"ha \n" +"biztonsági protokolt használ mint a XML-RPCS vagy HTTPS.\n" +"\n" +"Ez nem védi meg az adatbázis többi részét, mely bizalmas\n" +"adatokat is tartalmazhat. Pontos biztonsági intézkedést kell beileszteni\n" +"a rendszer adminisztrátornak minden területen, mint: adatbázis védelmi " +"mentések,\n" +"rendszer fájlok, távoli héj hozzáférések, fizikai szerver hozzáférések.\n" +"\n" +"Kölcsönhatás az LDAP azonosítással:\n" +"-------------------------------------\n" +"Ez a modul most még nem kompatibilis a ``user_ldap`` modullal és\n" +"ki fogja iktatni a LDAP azonosítást teljesen ha ugyanakkor telepítettek.\n" #. module: base #: view:ir.rule:0 @@ -16499,12 +16818,12 @@ msgstr "Valuta árfolyam" #: view:base.module.upgrade:0 #: field:base.module.upgrade,module_info:0 msgid "Modules to Update" -msgstr "" +msgstr "Frissítendő modulok" #. module: base #: model:ir.ui.menu,name:base.menu_custom_multicompany msgid "Multi-Companies" -msgstr "" +msgstr "Többszörös-vállalatok" #. module: base #: field:workflow,osv:0 @@ -16516,12 +16835,12 @@ msgstr "Erőforrás objektum" #. module: base #: model:ir.module.module,shortdesc:base.module_crm_helpdesk msgid "Helpdesk" -msgstr "" +msgstr "Ügyfélszolgálat" #. module: base #: field:ir.rule,perm_write:0 msgid "Apply for Write" -msgstr "" +msgstr "Íráshoz alkamaz" #. module: base #: model:ir.module.module,description:base.module_stock @@ -16559,6 +16878,38 @@ msgid "" "* Moves Analysis\n" " " msgstr "" +"\n" +"Több-raktárhely kezelése, multi- és struktúrált raktár helyek\n" +"==============================================================\n" +"\n" +"A raktár és leltár kezelés a hierarchikus elhelyezkedés struktúrán alapul, a " +"raktárhelyből a raktárba kapcsolattal. \n" +"A dupla bevitelű raktár rendszer lehetővé teszi a vevők és beszállítók " +"kezelését beleértve a gyártási raktárkészletet is. \n" +"\n" +"OpenERP-ben megvan a lehetőség a köteg és gyáriszám kezelésre biztosítva a " +"nyomon követhetőséget, ami a gyártást szavatolja.\n" +"\n" +"Fő jellemzők\n" +"-------------\n" +"* Mozgások előzményei és tervezése,\n" +"* Raktár értékelése (alapár vagy átlagár, ...)\n" +"* Erőteljesség a raktárkészlet különbségek tükrében\n" +"* Automata újrarendelés szabályok\n" +"* Bárkódok támogatása\n" +"* Gyors hiba érzékelés a dupla beviteli rendszer miatt\n" +"* Nyomon követhetőség (ellentétes irányú / Folyamat irányú, Széria számok, " +"...)\n" +"\n" +"Dashboard / Műszerfal kimutatások a Raktárhely kezeléshez ideérve:\n" +"----------------------------------------------------------\n" +"* Bejövő áruk (Grafikon)\n" +"* Kimenő áruk (Grafikon)\n" +"* Lehetséges beszerzés\n" +"* Raktári tételek analízisei / elemzései\n" +"* Záró tételek raktárhelyei\n" +"* Mozgás analízis, elemzés\n" +" " #. module: base #: model:ir.module.module,description:base.module_document_page @@ -16569,6 +16920,11 @@ msgid "" "Web pages\n" " " msgstr "" +"\n" +"Oldalak\n" +"=====\n" +"Web oldalak\n" +" " #. module: base #: help:ir.actions.server,code:0 @@ -16576,6 +16932,8 @@ msgid "" "Python code to be executed if condition is met.\n" "It is a Python block that can use the same values as for the condition field" msgstr "" +"Python code to be executed if condition is met.\n" +"It is a Python block that can use the same values as for the condition field" #. module: base #: model:ir.actions.act_window,help:base.grant_menu_access @@ -16600,7 +16958,7 @@ msgstr "Gyermek elem mező" #. module: base #: view:ir.rule:0 msgid "Detailed algorithm:" -msgstr "" +msgstr "Részletes algoritmus:" #. module: base #: field:ir.actions.act_url,usage:0 @@ -16617,7 +16975,7 @@ msgstr "Művelet használata" #. module: base #: field:ir.module.module,name:0 msgid "Technical Name" -msgstr "" +msgstr "Technikai név" #. module: base #: model:ir.model,name:base.model_workflow_workitem @@ -16656,7 +17014,7 @@ msgstr "Automatikus betöltés bézet" #. module: base #: view:res.users:0 msgid "Allowed Companies" -msgstr "" +msgstr "Engedélyezett vállalatok" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_de @@ -16666,7 +17024,7 @@ msgstr "Németország - Könyvelés" #. module: base #: view:ir.sequence:0 msgid "Day of the Year: %(doy)s" -msgstr "" +msgstr "Az év napja: %(doy)s" #. module: base #: field:ir.ui.menu,web_icon:0 @@ -16689,6 +17047,8 @@ msgid "" "If this field is empty, the view applies to all users. Otherwise, the view " "applies to the users of those groups only." msgstr "" +"Ha ez a mező üres, akkor a nézet az összes felhasználóra érvényes. " +"Egyébként, csak arra a kijelölt csoport felhasználóra vonatkozik a nézet." #. module: base #: selection:base.language.install,lang:0 @@ -16722,21 +17082,44 @@ msgid "" "customers' expenses if your work by project.\n" " " msgstr "" +"\n" +"Munkavállalók szerinti kiadások kezelése\n" +"============================\n" +"\n" +"Ez az alkalmazás lehetővé teszi a munkavállalók napi kiadásait. Hozzáférést " +"biztosít a munkavállalói kiadási jegyzeteihez és azok kiegészítésének és " +"érvényesítésének jogához vagy érvénytelenítheti is a jegyzeteket. Az " +"érvényesítés után egy számlát készít a munkavállaló részére.\n" +"A munkavállalók bevihetik a saját kiadásaikat amit az érvényesítési út " +"automatikusan felad könyvelésre az osztályvezető érvényesítése után.\n" +"\n" +"\n" +"A teljes folyamat a következő:\n" +"----------------------------------\n" +"* Kiadás terve\n" +"* a munkavállaló visszaigazolása a listára\n" +"* az osztályvezetője általi érvényesítés\n" +"* a könyvelő érvényesítése és számla készítés\n" +"\n" +"Ez a modul használja az analitikai, elemző számlát és kompatibilis az " +"időbeosztásos számlázás modullal így automatikus munkavállalói kiadás újra-" +"számlázást készíthet ha projektenként dolgozik.\n" +" " #. module: base #: view:base.language.export:0 msgid "Export Settings" -msgstr "" +msgstr "A beállítások exportálása" #. module: base #: field:ir.actions.act_window,src_model:0 msgid "Source Model" -msgstr "" +msgstr "Modell forrás" #. module: base #: view:ir.sequence:0 msgid "Day of the Week (0:Monday): %(weekday)s" -msgstr "" +msgstr "A hét napja (0:Hétfő): %(weekday)s" #. module: base #: code:addons/base/module/wizard/base_module_upgrade.py:84 @@ -16750,7 +17133,7 @@ msgstr "Függőség nem teljesült !" #: code:addons/base/ir/ir_model.py:1023 #, python-format msgid "Administrator access is required to uninstall a module" -msgstr "" +msgstr "Adminisztrátori hozzáférés szükséges a modul törléséhez" #. module: base #: model:ir.model,name:base.model_base_module_configuration @@ -16766,6 +17149,10 @@ msgid "" "\n" "(Document type: %s, Operation: %s)" msgstr "" +"Az igényelt műveletet nem lehetett végrehajtani biztonsági korlátok miatt. " +"Kérem vegye fel a kapcsolatot a rendszer adminisztrátorral.\n" +"\n" +"(Dokumentum típus: %s, Művelet: %s)" #. module: base #: model:ir.module.module,description:base.module_idea @@ -16782,6 +17169,19 @@ msgid "" "The managers can obtain an easy view of best ideas from all the users.\n" "Once installed, check the menu 'Ideas' in the 'Tools' main menu." msgstr "" +"\n" +"Ez a modul lehetővé teszi a felhasználók könnyű és hatékony vállalati " +"fejlesztéshez való csatlakozását.\n" +"=============================================================================" +"==========\n" +"\n" +"Lehetővé teszi mindenki számára az ötleteinek közzétételét a különböző " +"témákban.\n" +"Ezután, a többi felhasználó megjegyzéseket fűzhet hozzá és szavazhat egy " +"bizonyos ötletre.\n" +"Minden ötletnek van egy pontértékelése a szavazatok alapján.\n" +"A vezető rálát az összes felhasználóra és az ötleteikre.\n" +"Ha telepítve lett, az 'eszközök' menü 'ötletek' címszó alatt találja az meg." #. module: base #: code:addons/orm.py:5248 @@ -16790,6 +17190,8 @@ msgid "" "%s This might be '%s' in the current model, or a field of the same name in " "an o2m." msgstr "" +"%s Ez lehet, hogy '%s' a jelenlegi modellben, vagy egy mező ugyanazzal a " +"névvel az o2m-ben." #. module: base #: model:ir.module.module,description:base.module_account_payment @@ -16821,6 +17223,29 @@ msgid "" "have a new option to import payment orders as bank statement lines.\n" " " msgstr "" +"\n" +"Modul a beszállítók számlái kifizetésének kezeléséhez.\n" +"=======================================================\n" +"\n" +"Ez a modul lehetővé teszi a kifizetések létrehozását és kezelését, a " +"következő szándékkal\n" +"-----------------------------------------------------------------------------" +"---- \n" +" * egy a könnyű plug-in alap variációkból az automatikus kifizetés " +"működtetésre.\n" +" * lehetővé teszi a hatékonyabb számla kifizetés szervezést.\n" +"\n" +"Figyelem:\n" +"~~~~~~~~\n" +"A kifizetés megbízás visszaigazolása nem készít könyvelés bejegyzést, csak " +"rögzíti a \n" +"tényt ,hogy elkészítette a bankhoz a megbízást. A megbízás bevitelét\n" +"el kell végezni a szokásos módon a banki kivonattal. Azonban, ezt csak\n" +"akkor, ha megjött a banktól a kivonat, hogy azt a bank befogadta \n" +"azt és ekkor beviheti azt a könyvelésébe is. Ennek a műveletnek a " +"segítségéhez, lesz\n" +"egy új lehetősége a fizetési megbízás importálása mint banki kivonat sorok.\n" +" " #. module: base #: field:ir.model,access_ids:0 @@ -16833,7 +17258,7 @@ msgstr "Hozzáférés" #: field:res.partner,vat:0 #, python-format msgid "TIN" -msgstr "" +msgstr "TIN" #. module: base #: model:res.country,name:base.aw @@ -16844,7 +17269,7 @@ msgstr "Aruba" #: code:addons/base/module/wizard/base_module_import.py:58 #, python-format msgid "File is not a zip file!" -msgstr "" +msgstr "A fájl nem zip fájl!" #. module: base #: model:res.country,name:base.ar @@ -16898,7 +17323,7 @@ msgstr "Haladó kimutatás" #. module: base #: model:ir.module.module,summary:base.module_purchase msgid "Purchase Orders, Receptions, Supplier Invoices" -msgstr "" +msgstr "Megrendelések, Átvétel igazolások, Beszállítói számlák" #. module: base #: model:ir.module.module,description:base.module_hr_payroll @@ -16917,6 +17342,19 @@ msgid "" " * Integrated with Holiday Management\n" " " msgstr "" +"\n" +"Általános bérszámfejtői rendszer\n" +"=======================\n" +"\n" +" * Munkavállalók adatai\n" +" * Munkavállalók szerződései\n" +" * Útlevél alapú szerződés\n" +" * Engedmények/Levonások\n" +" * Lehetőség az alap/Bruttó/Nettó fizetés beállításához\n" +" * Munkavállalók fizetési papírjai\n" +" * Havi bérszámfejtési regiszter\n" +" * Integrálva a szabadság szervezővel\n" +" " #. module: base #: model:ir.model,name:base.model_ir_model_data @@ -16936,7 +17374,7 @@ msgstr "Értékesítés utáni szolgáltatások" #. module: base #: field:base.language.import,code:0 msgid "ISO Code" -msgstr "" +msgstr "ISO Kód" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_fr @@ -16951,7 +17389,7 @@ msgstr "Indítás" #. module: base #: selection:res.partner,type:0 msgid "Shipping" -msgstr "" +msgstr "Szállítás" #. module: base #: model:ir.module.module,description:base.module_project_mrp @@ -16986,6 +17424,30 @@ msgid "" "the\n" "task is completed.\n" msgstr "" +"\n" +"Az beszerzéssoraiból automatikusan készít projekt/terv feladatot.\n" +"===========================================================\n" +"\n" +"Ez a modul minden beszerzés igény sorból elkészít egy új feladatot\n" +"(pl.: a megrendelés sorait), ha a szóban forgó termék kielégíti a következő\n" +"jellemzőket:\n" +"\n" +" * Termék típusa = Szolgáltatás\n" +" * Beszerzés módszere (Megrendelés végrehajtás) = MTO (Rendelés " +"előkészítése)\n" +" * Ellátás/Beszerzés módszer = Gyártás\n" +"\n" +"Ezen felül, ha a tervet a termék leírásban meghatározták (a beszerzés " +"fülön), \n" +"akkor egy új munka lesz létrehozva ehhez a tervhez. Máskülönben, az új\n" +"feladat nem függ egyik tervtől sem, és később hozzáadható egy másik tervhez " +"kézzel.\n" +"\n" +"Ha a terv feladat el lett végezve vagy törölve lett, akkor a kapcsolódó " +"beszerzés \n" +"munkafolyamat frissítve lesz annak megfelelően. Például, ha ez a beszerzés \n" +"egy megrendelés sorához tartozik, akkor a megrendelés sora leszállításként \n" +"értendő, ha a feladatot elvégezték.\n" #. module: base #: field:ir.actions.act_window,limit:0 @@ -16995,13 +17457,13 @@ msgstr "Limit" #. module: base #: model:res.groups,name:base.group_hr_user msgid "Officer" -msgstr "" +msgstr "Hivatalnok" #. module: base #: code:addons/orm.py:789 #, python-format msgid "Serialization field `%s` not found for sparse field `%s`!" -msgstr "" +msgstr "Soros művelet mező `%s` nem található az elszórt mezőkhöz `%s`!" #. module: base #: model:res.country,name:base.jm @@ -17012,7 +17474,7 @@ msgstr "Jamaika" #: field:res.partner,color:0 #: field:res.partner.address,color:0 msgid "Color Index" -msgstr "" +msgstr "Szín mutató" #. module: base #: model:ir.actions.act_window,help:base.action_partner_category_form @@ -17046,12 +17508,26 @@ msgid "" "user name and password for the invitation of the survey.\n" " " msgstr "" +"\n" +"Ez a modul felmérésekhez használható.\n" +"==================================\n" +"\n" +"Ez a különböző felhasználók egyes kérdéseinek a válaszán vagy vizsgálati " +"szempontjain alapul.\n" +"Egy felmérésnek több oldala lehet. Mindegyik oldal több kérdést tartalmazhat " +"és mindegyik\n" +"kérdésre több választ is tartalmazhat. Különböző felhasználó különböző " +"választ adhat a \n" +"különböző kérdésekre ha a felmérés elkészült. Partnerek is küldhetnek emailt " +"a felhasználó\n" +"nevével és jelszóval meghívásként a felmérésben való részvételhez.\n" +" " #. module: base #: code:addons/base/ir/ir_model.py:163 #, python-format msgid "Model '%s' contains module data and cannot be removed!" -msgstr "" +msgstr "Modell '%s' modul adatokat tartalmaz és ezért nem lehet törölni!" #. module: base #: model:res.country,name:base.az @@ -17068,12 +17544,12 @@ msgstr "Figyelem" #. module: base #: model:ir.module.module,shortdesc:base.module_edi msgid "Electronic Data Interchange (EDI)" -msgstr "" +msgstr "Elektormos adat kicserélés (EDI)" #. module: base #: model:ir.module.module,shortdesc:base.module_account_anglo_saxon msgid "Anglo-Saxon Accounting" -msgstr "" +msgstr "Angolszász könyvelés" #. module: base #: model:res.country,name:base.vg @@ -17099,12 +17575,12 @@ msgstr "Cseh / Čeština" #. module: base #: model:ir.module.category,name:base.module_category_generic_modules msgid "Generic Modules" -msgstr "" +msgstr "Általános modulok" #. module: base #: model:res.country,name:base.mk msgid "Macedonia, the former Yugoslav Republic of" -msgstr "" +msgstr "Macedónia, korábban Jugoszláv Köztársaság" #. module: base #: model:res.country,name:base.rw @@ -17118,11 +17594,14 @@ msgid "" "Allow users to login through OpenID.\n" "====================================\n" msgstr "" +"\n" +"Engedélyezi a felhasználók OpenID általi belépését.\n" +"====================================\n" #. module: base #: help:ir.mail_server,smtp_port:0 msgid "SMTP Port. Usually 465 for SSL, and 25 or 587 for other cases." -msgstr "" +msgstr "SMTP Port. Rendszerint 465 az SSL, és 25 vagy 587 egyéb esetben." #. module: base #: model:res.country,name:base.ck @@ -17153,7 +17632,7 @@ msgstr "Jelenlegi ablak" #: model:ir.module.category,name:base.module_category_hidden #: view:res.users:0 msgid "Technical Settings" -msgstr "" +msgstr "Műszaki beállítások" #. module: base #: model:ir.module.category,description:base.module_category_accounting_and_finance @@ -17161,16 +17640,18 @@ msgid "" "Helps you handle your accounting needs, if you are not an accountant, we " "suggest you to install only the Invoicing." msgstr "" +"Segít a könyvelés igényeinek kezelésében, ha Ön nem könyvelő, akkor azt " +"ajánljuk, hogy csak a számlázást telepítse." #. module: base #: model:ir.module.module,shortdesc:base.module_plugin_thunderbird msgid "Thunderbird Plug-In" -msgstr "" +msgstr "Thunderbird kiegészítő plug-in" #. module: base #: model:ir.module.module,summary:base.module_event msgid "Trainings, Conferences, Meetings, Exhibitions, Registrations" -msgstr "" +msgstr "Képzések, Konferenciák, Találkozók, Kiállítások, Regisztrációk" #. module: base #: model:ir.model,name:base.model_res_country @@ -17188,7 +17669,7 @@ msgstr "Ország" #. module: base #: model:res.partner.category,name:base.res_partner_category_15 msgid "Wholesaler" -msgstr "" +msgstr "Nagykereskedő" #. module: base #: model:ir.module.module,shortdesc:base.module_base_vat @@ -17212,7 +17693,7 @@ msgstr "" #. module: base #: view:ir.values:0 msgid "Action Bindings/Defaults" -msgstr "" +msgstr "Foglalások/alapértelmezett tevékenységek" #. module: base #: view:base.language.export:0 @@ -17220,6 +17701,8 @@ msgid "" "file encoding, please be sure to view and edit\n" " using the same encoding." msgstr "" +"fájl kódolás, kérem nézze meg és szerkessze\n" +" ugyanazzal a kódolással." #. module: base #: view:ir.rule:0 @@ -17238,7 +17721,7 @@ msgstr "Hollandia - Könyvelés" #. module: base #: model:res.country,name:base.gs msgid "South Georgia and the South Sandwich Islands" -msgstr "" +msgstr "Dél-Georgia és a Dél-Sandwich-szigetek" #. module: base #: view:res.lang:0 @@ -17253,12 +17736,12 @@ msgstr "Spanyol (SV) / Español (SV)" #. module: base #: model:ir.actions.act_window,name:base.open_module_tree msgid "Install a Module" -msgstr "" +msgstr "Egy modul telepítése" #. module: base #: field:ir.module.module,auto_install:0 msgid "Automatic Installation" -msgstr "" +msgstr "Automata telepítés" #. module: base #: model:ir.module.module,description:base.module_l10n_hn @@ -17273,6 +17756,18 @@ msgid "" "taxes\n" "and the Lempira currency." msgstr "" +"\n" +"Hondurasz számlatükör\n" +"\n" +"\n" +"This is the base module to manage the accounting chart for Honduras.\n" +"====================================================================\n" +" \n" +"Agrega una nomenclatura contable para Honduras. También incluye impuestos y " +"la\n" +"moneda Lempira. -- Adds accounting chart for Honduras. It also includes " +"taxes\n" +"and the Lempira currency." #. module: base #: model:res.country,name:base.jp @@ -17323,6 +17818,29 @@ msgid "" "gives \n" " the spreading, for the selected Analytic Accounts of Budgets.\n" msgstr "" +"\n" +"Ez a modul lehetővé teszi könyvelők részére az analitika/elemzés szervezést " +"és a keresztváltós költségvetéseket.\n" +"==========================================================================\n" +"\n" +"Ha már a költségvetés meg van határozva (a " +"Számlák/Költségvetés/Költségvetések alatt), a terv irányító vezető " +"beállíthatja a tervezett összeget mindegyik analitikai/elemző számlán.\n" +"\n" +"A könyvelő láthatja a teljes tervezetet mindegyik költségvetésre annak " +"biztosítására, hogy ne legyen több/kevesebb költségvetés mint amennyi a " +"tervezett volt.\n" +"\n" +"Három kimutatás lehetséges:\n" +"----------------------------\n" +" 1. Az első a költségvetés listákból áll elő. Ez az elemző számlák " +"költségeinek a kiterjesztése.\n" +"\n" +" 2. A második az első összegzése, ez csak az válogatott elemző számlák " +"költségeinek a kiterjesztése.\n" +"\n" +" 3. Az utolsó az elérhető az analitikus/elemző számlatükörből .Ez a " +"költségek kiterjesztése a válogatott elemző számlákon.\n" #. module: base #: selection:ir.actions.act_window.view,view_mode:0 @@ -17371,11 +17889,13 @@ msgid "" "Ambiguous specification for field '%(field)s', only provide one of name, " "external id or database id" msgstr "" +"Kétértelmű meghatározás a mezőre '%(field)s', csak egy nevet adjon meg, " +"külső azonosító vagy adatbázis azonosító" #. module: base #: field:ir.sequence,implementation:0 msgid "Implementation" -msgstr "" +msgstr "Végrehajtás" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_ve @@ -17390,7 +17910,7 @@ msgstr "Chile" #. module: base #: model:ir.module.module,shortdesc:base.module_web_view_editor msgid "View Editor" -msgstr "" +msgstr "Nézet szerkesztő" #. module: base #: view:ir.cron:0 @@ -17407,7 +17927,7 @@ msgstr "Feltétel" #. module: base #: help:res.currency,rate:0 msgid "The rate of the currency to the currency of rate 1." -msgstr "" +msgstr "Deviza árfolyam az 1 deviza árfolyamához." #. module: base #: field:ir.ui.view,name:0 @@ -17417,7 +17937,7 @@ msgstr "Nézet neve" #. module: base #: model:ir.model,name:base.model_res_groups msgid "Access Groups" -msgstr "" +msgstr "Csoportok hozzáférése" #. module: base #: selection:base.language.install,lang:0 @@ -17452,6 +17972,22 @@ msgid "" "In that case, you can not use priorities any more on the different picking.\n" " " msgstr "" +"\n" +"Ez a modul lehetővé teszi a Just In Time számítást a beszerzési " +"megrendelésekhez.\n" +"==================================================================\n" +"\n" +"Ha telepíti ezt a modult, akkor nem kell az általános beszerzési ütemezőt\n" +"futtatnia többé (de még mindig kell a minimum rendelési pont szabály\n" +"ütemező, vagy például futtassa naponta).\n" +"Minden beszerzési megrendelés azonnal futtatva lesz, ami egyes esetekben\n" +"teljesítmény eséshez vezethet.\n" +"\n" +"Ez megemelheti a raktárkészletet mivel a termék le lesz foglalva amint " +"lehet\n" +"és az ütemezési idő nem lesz figyelembe véve többé.\n" +"Ebben az esetben, nem használhat prioritásokat a különböző kiválogatásokon.\n" +" " #. module: base #: model:res.country,name:base.hr @@ -17480,7 +18016,7 @@ msgstr "Rendszer frissítés" #: field:ir.actions.report.xml,report_sxw_content:0 #: field:ir.actions.report.xml,report_sxw_content_data:0 msgid "SXW Content" -msgstr "" +msgstr "SXW tartalom" #. module: base #: help:ir.sequence,prefix:0 @@ -17495,7 +18031,7 @@ msgstr "Seychelle-szigetek" #. module: base #: model:res.partner.category,name:base.res_partner_category_4 msgid "Gold" -msgstr "" +msgstr "Arany" #. module: base #: code:addons/base/res/res_company.py:159 @@ -17522,7 +18058,7 @@ msgstr "Általános információk" #. module: base #: field:ir.model.data,complete_name:0 msgid "Complete ID" -msgstr "" +msgstr "Teljes azonosító" #. module: base #: model:res.country,name:base.tc @@ -17535,6 +18071,8 @@ msgid "" "Tax Identification Number. Check the box if this contact is subjected to " "taxes. Used by the some of the legal statements." msgstr "" +"Adó azonosító szám. Jelölje be a négyzetet, ha a kapcsolat adóköteles. Egyes " +"jogi kifejezések használják." #. module: base #: field:res.partner.bank,partner_id:0 @@ -17561,6 +18099,26 @@ msgid "" "depending on the product's configuration.\n" " " msgstr "" +"\n" +"A beszerzések kiszámítására használ modul.\n" +"==============================================\n" +"\n" +"Az MRP eljárásban, beszerzési rendeléseket a gyártási rendelések, " +"megrendelések, \n" +"raktári elhelyezés elindításához használják. Beszerzési rendelések " +"automatikusan\n" +"generáltak a rendszerből és ha hiba nem jön közbe, a felhasználó nem\n" +"is lesz figyelmeztetve. Hiba esetén a rendszer egyes beszerzési kivételt " +"visz\n" +"fel az akadályozó problémáról információt küldve a felhasználónak, hogy azt\n" +"kézzel kell megoldani (mint, darabjegyzék BoM hiánya vagy nem létező " +"beszállító).\n" +"\n" +"A beszerzési rendelés elindít egy javaslatot a feltölteni kívánt termék\n" +"automatikus beszerzésére. Ez a beszerzés elindít egy tervet, \n" +"ami vagy a szállító felé egy beszerzés, vagy a termék beállítása szerinti \n" +"beszerzést.\n" +" " #. module: base #: code:addons/base/res/res_users.py:174 @@ -17621,7 +18179,7 @@ msgstr "" #. module: base #: view:res.partner:0 msgid "Internal Notes" -msgstr "" +msgstr "Belső jegyzetek" #. module: base #: selection:res.partner.address,type:0 @@ -17637,12 +18195,12 @@ msgstr "NyRt." #. module: base #: model:ir.module.module,shortdesc:base.module_purchase_requisition msgid "Purchase Requisitions" -msgstr "" +msgstr "Beszerzési igénylések" #. module: base #: selection:ir.actions.act_window,target:0 msgid "Inline Edit" -msgstr "" +msgstr "Lineáris szerkesztés" #. module: base #: selection:ir.cron,interval_type:0 @@ -17685,7 +18243,7 @@ msgstr "Objektum létrehozása" #. module: base #: model:res.country,name:base.ss msgid "South Sudan" -msgstr "" +msgstr "Dél-Szudán" #. module: base #: field:ir.filters,context:0 @@ -17695,7 +18253,7 @@ msgstr "Kontextus" #. module: base #: model:ir.module.module,shortdesc:base.module_sale_mrp msgid "Sales and MRP Management" -msgstr "" +msgstr "Eladás és MRP (Anyagszükséglet Tervezés) szervezése" #. module: base #: model:ir.actions.act_window,help:base.action_partner_form @@ -17709,6 +18267,15 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Kattintson egy kapcsolat hozzáadásához a címtárba.\n" +"

\n" +" OpenERP segítséget nyújt az ügyfél tevékenységek könnyű " +"nyomon követéséhez; \n" +" megbeszélések, az üzleti lehetőségek története,\n" +" dokumentumok, stb.\n" +"

\n" +" " #. module: base #: model:res.partner.category,name:base.res_partner_category_2 @@ -17718,7 +18285,7 @@ msgstr "Érdeklődő" #. module: base #: model:ir.module.module,shortdesc:base.module_stock_invoice_directly msgid "Invoice Picking Directly" -msgstr "" +msgstr "Árukiválogatás számlázása közvetlenül" #. module: base #: selection:base.language.install,lang:0 @@ -17752,6 +18319,15 @@ msgid "" "on a supplier purchase order into several accounts and analytic plans.\n" " " msgstr "" +"\n" +"alap modul az elemző megoszlások és beszerzési megrendelésekhez.\n" +"====================================================================\n" +"\n" +"Lehetővé teszi a felhasználók egyes elemző terveinek karbantartását. Ez " +"lehetővé\n" +"teszi a beszállító beszerzési megrendelés sorainak szétválasztását több " +"számlára és elemző tervekre.\n" +" " #. module: base #: model:res.country,name:base.lk diff --git a/openerp/addons/base/i18n/it.po b/openerp/addons/base/i18n/it.po index 9e891fe034f..3aad5ecfc8d 100644 --- a/openerp/addons/base/i18n/it.po +++ b/openerp/addons/base/i18n/it.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.4\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-03 16:01+0000\n" -"PO-Revision-Date: 2012-12-18 23:39+0000\n" +"PO-Revision-Date: 2012-12-20 23:39+0000\n" "Last-Translator: Sergio Corato \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: 2012-12-19 05:14+0000\n" +"X-Launchpad-Export-Date: 2012-12-21 04:38+0000\n" "X-Generator: Launchpad (build 16378)\n" #. module: base @@ -158,7 +158,7 @@ msgstr "" #. module: base #: help:res.partner,employee:0 msgid "Check this box if this contact is an Employee." -msgstr "Seleziona questo box se il contatto è un Impiegato." +msgstr "Seleziona questo box se il contatto è un Dipendente." #. module: base #: help:ir.model.fields,domain:0 diff --git a/openerp/addons/base/i18n/ro.po b/openerp/addons/base/i18n/ro.po index 00826fa3520..e265e9878d4 100644 --- a/openerp/addons/base/i18n/ro.po +++ b/openerp/addons/base/i18n/ro.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.4\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-03 16:01+0000\n" -"PO-Revision-Date: 2012-12-18 18:59+0000\n" +"PO-Revision-Date: 2012-12-20 20:38+0000\n" "Last-Translator: Fekete Mihai \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: 2012-12-19 05:14+0000\n" +"X-Launchpad-Export-Date: 2012-12-21 04:38+0000\n" "X-Generator: Launchpad (build 16378)\n" #. module: base @@ -327,7 +327,7 @@ msgstr "creat(a)." #. module: base #: field:ir.actions.report.xml,report_xsl:0 msgid "XSL Path" -msgstr "" +msgstr "Ruta XSL" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_tr @@ -353,7 +353,7 @@ msgstr "Inuktitut / ᐃᓄᒃᑎᑐᑦ" #. module: base #: model:res.groups,name:base.group_multi_currency msgid "Multi Currencies" -msgstr "" +msgstr "Mzi multe valute" #. module: base #: model:ir.module.module,description:base.module_l10n_cl @@ -365,11 +365,17 @@ msgid "" "\n" " " msgstr "" +"\n" +"Localizarea planului contabil si fiscal chilian\n" +"==============================================\n" +"Plan contabil si fiscal chilian in conformitate cu dispozitiile in vigoare\n" +"\n" +" " #. module: base #: model:ir.module.module,shortdesc:base.module_sale msgid "Sales Management" -msgstr "Gestiune vanzari" +msgstr "Gestionarea vanzarilor" #. module: base #: help:res.partner,user_id:0 @@ -377,6 +383,8 @@ msgid "" "The internal user that is in charge of communicating with this contact if " "any." msgstr "" +"Utilizatorul intern care este responsabil cu comunicarea cu acest contact, " +"daca exista." #. module: base #: view:res.partner:0 @@ -386,7 +394,7 @@ msgstr "Cauta Partener" #. module: base #: field:ir.module.category,module_nr:0 msgid "Number of Modules" -msgstr "Numar de module" +msgstr "Numar de Module" #. module: base #: help:multi_company.default,company_dest_id:0 @@ -411,6 +419,15 @@ msgid "" " * Commitment Date\n" " * Effective Date\n" msgstr "" +"\n" +"Adauga informatii suplimentare despre date la comanda de vanzare.\n" +"===================================================\n" +"\n" +"Puteti adauga urmatoarele date suplimentare la o comanda de vanzare:\n" +"-----------------------------------------------------------\n" +" * Data Solicitata\n" +" * Data Angajament\n" +" * Data Efectiva\n" #. module: base #: help:ir.actions.act_window,res_id:0 @@ -418,6 +435,8 @@ msgid "" "Database ID of record to open in form view, when ``view_mode`` is set to " "'form' only" msgstr "" +"ID baza de date a inregistrarii de deschis in vizualizare formular, atunci " +"cand ``modul_vizualizare`` este setat doar pe 'formular'" #. module: base #: field:res.partner.address,name:0 @@ -468,11 +487,18 @@ msgid "" "document and Wiki based Hidden.\n" " " msgstr "" +"\n" +"Programul de instalare Ascuns bazat pe cunostinte.\n" +"=====================================\n" +"\n" +"Face Configuratia Aplicatiei Cunostinte disponibila, de unde puteti instala\n" +"documente si Ascuns bazat pe Wiki.\n" +" " #. module: base #: model:ir.module.category,name:base.module_category_customer_relationship_management msgid "Customer Relationship Management" -msgstr "Gestionarea relatiilor cu clientii" +msgstr "Gestionarea Relatiilor cu Clientii" #. module: base #: model:ir.module.module,description:base.module_delivery @@ -486,6 +512,14 @@ msgid "" "invoices from picking, OpenERP is able to add and compute the shipping " "line.\n" msgstr "" +"\n" +"Va permite sa adaugati metode de livrare la comenzile de vanzare si " +"ridicare.\n" +"==============================================================\n" +"\n" +"Va puteti defini propriile grile de preturi pentru transport si livrare. " +"Atunci cand creati \n" +"facturi la ridicare, OpenERP poate adauga si calcula linia de transport.\n" #. module: base #: code:addons/base/ir/ir_filters.py:83 @@ -494,6 +528,8 @@ msgid "" "There is already a shared filter set as default for %(model)s, delete or " "change it before setting a new default" msgstr "" +"Exista deja un filtru comun setat ca default pentru %(model)s, stergeti-l " +"sau schimbati-l inainte de a seta unul nou." #. module: base #: code:addons/orm.py:2648 @@ -536,7 +572,7 @@ msgstr "Obiect Sursa" #. module: base #: model:res.partner.bank.type,format_layout:base.bank_normal msgid "%(bank_name)s: %(acc_number)s" -msgstr "%(bank_name)s: %(acc_number)s" +msgstr "%(nume_banca)s: %(numar_cont)s" #. module: base #: view:ir.actions.todo:0 @@ -591,12 +627,12 @@ msgstr "" #. module: base #: field:ir.model.relation,name:0 msgid "Relation Name" -msgstr "" +msgstr "Nume Relatie" #. module: base #: view:ir.rule:0 msgid "Create Access Right" -msgstr "" +msgstr "Creeaza Drept de acces" #. module: base #: model:res.country,name:base.tv @@ -611,7 +647,7 @@ msgstr "Wizardul urmator" #. module: base #: field:res.lang,date_format:0 msgid "Date Format" -msgstr "Format data" +msgstr "Formatul Datei" #. module: base #: model:ir.module.module,shortdesc:base.module_base_report_designer @@ -636,7 +672,7 @@ msgstr "" #. module: base #: view:workflow.transition:0 msgid "Workflow Transition" -msgstr "" +msgstr "Tranzitie Flux de lucru" #. module: base #: model:res.country,name:base.gf @@ -646,7 +682,7 @@ msgstr "Guyana Franceza" #. module: base #: model:ir.module.module,summary:base.module_hr msgid "Jobs, Departments, Employees Details" -msgstr "" +msgstr "Posturi, Departamente, Detalii angajati" #. module: base #: model:ir.module.module,description:base.module_analytic @@ -662,6 +698,16 @@ msgid "" "that have no counterpart in the general financial accounts.\n" " " msgstr "" +"\n" +"Modul pentru definirea obiectului contabilitatii analitice.\n" +"===============================================\n" +"\n" +"In OpenERP, conturile analitice sunt legate de conturile generale, dar sunt " +"tratate\n" +"in mod total independent. Astfel, puteti introduce diverse operatiuni " +"analitice\n" +"care nu au niciun corespondent in conturile financiare generale.\n" +" " #. module: base #: field:ir.ui.view.custom,ref_id:0 @@ -685,6 +731,19 @@ msgid "" "* Use emails to automatically confirm and send acknowledgements for any " "event registration\n" msgstr "" +"\n" +"Organizarea si gestionarea Evenimentelor.\n" +"======================================\n" +"\n" +"Modulul eveniment va permite sa organizati eficient evenimente si toate " +"sarcinile asociate lor: planificare, urmarirea inregistrarii,\n" +"prezente, etc.\n" +"\n" +"Caracteristici cheie:\n" +"------------\n" +"* Gestioneaza Evenimentele si Inregistrarile dumneavoastra\n" +"* Foloseste email-urile pentru a confirma si trimite automat confirmarile " +"pentru inregistrarea oricarui eveniment\n" #. module: base #: selection:base.language.install,lang:0 @@ -710,6 +769,21 @@ msgid "" "requested it.\n" " " msgstr "" +"\n" +"Traduceri Automate prin Gengo API\n" +"----------------------------------------\n" +"\n" +"Acest modul va instala programatorul pasiv pentru traduceri automate \n" +"folosind Gengo API. Pentru a-l activa, trebuie sa\n" +"1) Va configurati parametrii de autentificare Gengo din `Setari > Companii > " +"Parametrii Gengo`\n" +"2) Lansati wizard-ul din `Setari > Termenii Aplicatiei > Gengo: Solicitare " +"Manuala a Traducerii` si sa urmeze wizard-ul.\n" +"\n" +"Acest wizard va activa CRON si Programatorul si va incepe traducerea " +"automata prin intermediul Serviciilor Gengo pentru toti termenii solicitati " +"de dumneavoastra.\n" +" " #. module: base #: help:ir.actions.report.xml,attachment_use:0 @@ -759,7 +833,7 @@ msgstr "Columbia" #. module: base #: model:res.partner.title,name:base.res_partner_title_mister msgid "Mister" -msgstr "" +msgstr "Domnul" #. module: base #: help:res.country,code:0 @@ -788,7 +862,7 @@ msgstr "Netradus(e)" #. module: base #: view:ir.mail_server:0 msgid "Outgoing Mail Server" -msgstr "" +msgstr "Server Iesire E-mail-uri" #. module: base #: help:ir.actions.act_window,context:0 @@ -822,7 +896,7 @@ msgstr "Mexic - Contabilitate" #: help:ir.actions.server,action_id:0 msgid "Select the Action Window, Report, Wizard to be executed." msgstr "" -"Selectati Fereastra de Actiune, Raport sau Asistent care urmeaza a fi " +"Selectati Fereastra de Actiune, Raportul sau Asistentul care urmeaza a fi " "executat(a)." #. module: base @@ -866,6 +940,33 @@ msgid "" "module named account_voucher.\n" " " msgstr "" +"\n" +"Contabilitate si Management Financiar.\n" +"====================================\n" +"\n" +"Modulul Finante si contabilitate acopera:\n" +"--------------------------------------------\n" +" * Contabilitatea Generala\n" +" * Costuri/Contabilitatea analitica\n" +" * Contabilitatea partii terte\n" +" * Gestonarea taxelor si impozitelor\n" +" * Bugete\n" +" * Facturile Clientului si ale Furnizorului\n" +" * Extrase bancare\n" +" * Procesul de reconciliere dupa partener\n" +"\n" +"Creeaza un panou pentru contabili care include:\n" +"--------------------------------------------------\n" +" Lista cu Facturile Clientilor care trebuie aprobate\n" +" Analiza Companiei\n" +" Grafic Trezorerie\n" +"\n" +"Procesele precum pastrarea unui registru contabil general sunt efectuate " +"prin Jurnalele financiare definite (linia inregistrarii sau gruparea se face " +"prin jurnal) \n" +"pentru un anumit an financiar, iar pentru pregatirea voucher-elor exista un " +"modul numit account_voucher (cont_voucher).\n" +" " #. module: base #: view:ir.model:0 @@ -885,6 +986,16 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Faceti click pentru a adauga un contact in agenda " +"dumneavoastra.\n" +"

\n" +" OpenERP va ajuta sa tineti evidenta cu usurinta a tuturor " +"activitatilor legate de\n" +" un client: discutii, istoricul oportunitatilor de afaceri,\n" +" documente, etc.\n" +"

\n" +" " #. module: base #: model:ir.module.module,description:base.module_web_linkedin @@ -895,6 +1006,11 @@ msgid "" "This module provides the Integration of the LinkedIn with OpenERP.\n" " " msgstr "" +"\n" +"Modulul OpenERP Web LinkedIn.\n" +"============================\n" +"Acest modul asigura Integrarea lui LinkedIn in OpenERP.\n" +" " #. module: base #: help:ir.actions.act_window,src_model:0 @@ -917,7 +1033,7 @@ msgstr "Iordania" #. module: base #: help:ir.cron,nextcall:0 msgid "Next planned execution date for this job." -msgstr "Data urmatoarei executii planificate pentru acest proiect" +msgstr "Data urmatoarei executii planificate pentru aceasta sarcina." #. module: base #: model:res.country,name:base.er @@ -932,7 +1048,7 @@ msgstr "Numele companiei trebuie sa fie unic !" #. module: base #: model:ir.ui.menu,name:base.menu_base_action_rule_admin msgid "Automated Actions" -msgstr "Actiuni automate" +msgstr "Actiuni Automate" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_ro @@ -942,7 +1058,7 @@ msgstr "Romania - Contabilitate" #. module: base #: model:ir.model,name:base.model_res_config_settings msgid "res.config.settings" -msgstr "" +msgstr "res.configurare.setari" #. module: base #: help:res.partner,image_small:0 @@ -951,6 +1067,9 @@ msgid "" "image, with aspect ratio preserved. Use this field anywhere a small image is " "required." msgstr "" +"Imagine de dimensiune mica a acestui contact. Este redimensionata automat ca " +"o imagine de 64x64px, cu raportul aspect pastrat. Folositi acest camp " +"oriunde este necesara o imagine mica." #. module: base #: help:ir.actions.server,mobile:0 @@ -972,7 +1091,7 @@ msgstr "Securitate si Autentificare" #. module: base #: model:ir.module.module,shortdesc:base.module_web_calendar msgid "Web Calendar" -msgstr "" +msgstr "Calendar Web" #. module: base #: selection:base.language.install,lang:0 @@ -983,7 +1102,7 @@ msgstr "Suedeza / svenska" #: field:base.language.export,name:0 #: field:ir.attachment,datas_fname:0 msgid "File Name" -msgstr "" +msgstr "Nume Fisier" #. module: base #: model:res.country,name:base.rs @@ -1034,6 +1153,33 @@ msgid "" "also possible in order to automatically create a meeting when a holiday " "request is accepted by setting up a type of meeting in Leave Type.\n" msgstr "" +"\n" +"Gestioneaza concediile si cererile de alocare\n" +"=====================================\n" +"\n" +"Aceasta aplicatie controleaza programul de concedii al companiei " +"dumneavoastra. Le permite angajatilor sa solicite concedii. Astfel, " +"managerii pot verifica cererile pentru concedii si le pot aproba sau " +"respinge. In acest mod puteti controla planificarea in ansamblu a " +"concediilor pentru companie sau departament.\n" +"\n" +"Puteti configura diverse tipuri de concedii (de boala, de odihna, zile " +"platite, ...) si aloca repede concedii unui angajat sau departament folosind " +"cererile de alocare. Un angajat poate de asemenea sa faca o cerere pentru " +"mai multe zile libere facand o noua ALocare. Acest lucru va mari totalul " +"zilelor disponibile pentru acel tip de concediu (daca cererea este " +"acceptata).\n" +"\n" +"Puteti tine evidenta concediilor in diverse moduri urmarind rapoartele: \n" +"\n" +"* Rezumat Concedii \n" +"* Concedii pe Departamente\n" +"* Analiza Concediilor\n" +"\n" +"O sincronizare cu o agenda interna (Intalnirile modulului MRC) este de " +"asemenea posibila pentru a crea in mod automat o intalnire atunci cand o " +"cerere de concediu este acceptata prin setarea unui tip de intalnire in " +"Tipul Concediului.\n" #. module: base #: selection:base.language.install,lang:0 @@ -1081,7 +1227,7 @@ msgstr "Preferinte email" #: code:addons/base/ir/ir_fields.py:196 #, python-format msgid "'%s' does not seem to be a valid date for field '%%(field)s'" -msgstr "" +msgstr "'%s' nu pare a fi o data valabila pentru campul '%%(field)s'" #. module: base #: view:res.partner:0 diff --git a/openerp/addons/base/i18n/zh_CN.po b/openerp/addons/base/i18n/zh_CN.po index b9890196ea5..755d9f27fb1 100644 --- a/openerp/addons/base/i18n/zh_CN.po +++ b/openerp/addons/base/i18n/zh_CN.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.4\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-03 16:01+0000\n" -"PO-Revision-Date: 2012-12-06 18:17+0000\n" -"Last-Translator: ccdos \n" +"PO-Revision-Date: 2012-12-19 07:05+0000\n" +"Last-Translator: Wei \"oldrev\" Li \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: 2012-12-07 04:34+0000\n" -"X-Generator: Launchpad (build 16341)\n" +"X-Launchpad-Export-Date: 2012-12-20 04:43+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -1517,7 +1517,7 @@ msgstr "海地" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_fr_hr_payroll msgid "French Payroll" -msgstr "" +msgstr "法国薪酬管理" #. module: base #: view:ir.ui.view:0 @@ -2871,6 +2871,9 @@ msgid "" "Module to attach a google document to any model.\n" "================================================\n" msgstr "" +"\n" +"用于附加 Google 文档到任意模型的模块。\n" +"================================================\n" #. module: base #: code:addons/base/ir/ir_fields.py:334 @@ -3118,7 +3121,7 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_web_linkedin msgid "LinkedIn Integration" -msgstr "" +msgstr "LinkedIn 集成" #. module: base #: code:addons/orm.py:2021 @@ -3301,6 +3304,10 @@ msgid "" "==========================================\n" " " msgstr "" +"\n" +"比利时薪酬规则的会计数据。\n" +"==========================================\n" +" " #. module: base #: model:res.country,name:base.am @@ -4002,6 +4009,17 @@ msgid "" "If you need to manage your meetings, you should install the CRM module.\n" " " msgstr "" +"\n" +"这是功能完整的日程表系统\n" +"========================================\n" +"\n" +"支持:\n" +"------------\n" +" - 约会排程\n" +" - 重复性事件\n" +"\n" +"如果您需要管理您的会议,您应该安装 CRM 模块。\n" +" " #. module: base #: model:res.country,name:base.je @@ -4039,7 +4057,7 @@ msgstr "%x - 使用日期表示" #. module: base #: view:res.partner:0 msgid "Tag" -msgstr "" +msgstr "标签" #. module: base #: view:res.lang:0 diff --git a/openerp/addons/base/ir/ir_attachment.py b/openerp/addons/base/ir/ir_attachment.py index 1e84dadd15c..5f54b4aca8e 100644 --- a/openerp/addons/base/ir/ir_attachment.py +++ b/openerp/addons/base/ir/ir_attachment.py @@ -18,11 +18,164 @@ # along with this program. If not, see . # ############################################################################## -import itertools +import hashlib +import itertools +import os +import re + +from openerp import tools from openerp.osv import fields,osv class ir_attachment(osv.osv): + """Attachments are used to link binary files or url to any openerp document. + + External attachment storage + --------------------------- + + The 'data' function field (_data_get,data_set) is implemented using + _file_read, _file_write and _file_delete which can be overridden to + implement other storage engines, shuch methods should check for other + location pseudo uri (example: hdfs://hadoppserver) + + The default implementation is the file:dirname location that stores files + on the local filesystem using name based on their sha1 hash + """ + def _name_get_resname(self, cr, uid, ids, object, method, context): + data = {} + for attachment in self.browse(cr, uid, ids, context=context): + model_object = attachment.res_model + res_id = attachment.res_id + if model_object and res_id: + model_pool = self.pool.get(model_object) + res = model_pool.name_get(cr,uid,[res_id],context) + res_name = res and res[0][1] or False + if res_name: + field = self._columns.get('res_name',False) + if field and len(res_name) > field.size: + res_name = res_name[:field.size-3] + '...' + data[attachment.id] = res_name + else: + data[attachment.id] = False + return data + + # 'data' field implementation + def _full_path(self, cr, uid, location, path): + # location = 'file:filestore' + assert location.startswith('file:'), "Unhandled filestore location %s" % location + location = location[5:] + + # sanitize location name and path + location = re.sub('[.]','',location) + location = location.strip('/\\') + + path = re.sub('[.]','',path) + path = path.strip('/\\') + return os.path.join(tools.config['root_path'], location, cr.dbname, path) + + def _file_read(self, cr, uid, location, fname, bin_size=False): + full_path = self._full_path(cr, uid, location, fname) + r = '' + try: + if bin_size: + r = os.path.getsize(full_path) + else: + r = open(full_path).read().encode('base64') + except IOError: + _logger.error("_read_file reading %s",full_path) + return r + + def _file_write(self, cr, uid, location, value): + bin_value = value.decode('base64') + fname = hashlib.sha1(bin_value).hexdigest() + # scatter files across 1024 dirs + # we use '/' in the db (even on windows) + fname = fname[:3] + '/' + fname + full_path = self._full_path(cr, uid, location, fname) + try: + dirname = os.path.dirname(full_path) + if not os.path.isdir(dirname): + os.makedirs(dirname) + open(full_path,'wb').write(bin_value) + except IOError: + _logger.error("_file_write writing %s",full_path) + return fname + + def _file_delete(self, cr, uid, location, fname): + count = self.search(cr, 1, [('store_fname','=',fname)], count=True) + if count <= 1: + full_path = self._full_path(cr, uid, location, fname) + try: + os.unlink(full_path) + except IOError: + # Harmless and needed for race conditions + _logger.error("_file_delete could not unlink %s",full_path) + + def _data_get(self, cr, uid, ids, name, arg, context=None): + if context is None: + context = {} + result = {} + location = self.pool.get('ir.config_parameter').get_param(cr, uid, 'ir_attachment.location') + bin_size = context.get('bin_size') + for attach in self.browse(cr, uid, ids, context=context): + if location and attach.store_fname: + result[attach.id] = self._file_read(cr, uid, location, attach.store_fname, bin_size) + else: + result[attach.id] = attach.db_datas + return result + + def _data_set(self, cr, uid, id, name, value, arg, context=None): + # We dont handle setting data to null + if not value: + return True + if context is None: + context = {} + location = self.pool.get('ir.config_parameter').get_param(cr, uid, 'ir_attachment.location') + file_size = len(value.decode('base64')) + if location: + attach = self.browse(cr, uid, id, context=context) + if attach.store_fname: + self._file_delete(cr, uid, location, attach.store_fname) + fname = self._file_write(cr, uid, location, value) + super(ir_attachment, self).write(cr, uid, [id], {'store_fname': fname, 'file_size': file_size}, context=context) + else: + super(ir_attachment, self).write(cr, uid, [id], {'db_datas': value, 'file_size': file_size}, context=context) + return True + + _name = 'ir.attachment' + _columns = { + 'name': fields.char('Attachment Name',size=256, required=True), + 'datas_fname': fields.char('File Name',size=256), + 'description': fields.text('Description'), + 'res_name': fields.function(_name_get_resname, type='char', size=128, string='Resource Name', store=True), + 'res_model': fields.char('Resource Model',size=64, readonly=True, help="The database object this attachment will be attached to"), + 'res_id': fields.integer('Resource ID', readonly=True, help="The record id this is attached to"), + 'create_date': fields.datetime('Date Created', readonly=True), + 'create_uid': fields.many2one('res.users', 'Owner', readonly=True), + 'company_id': fields.many2one('res.company', 'Company', change_default=True), + 'type': fields.selection( [ ('url','URL'), ('binary','Binary'), ], + 'Type', help="Binary File or URL", required=True, change_default=True), + 'url': fields.char('Url', size=1024), + # al: We keep shitty field names for backward compatibility with document + 'datas': fields.function(_data_get, fnct_inv=_data_set, string='File Content', type="binary", nodrop=True), + 'store_fname': fields.char('Stored Filename', size=256), + 'db_datas': fields.binary('Database Data'), + 'file_size': fields.integer('File Size'), + } + + _defaults = { + 'type': 'binary', + 'file_size': 0, + 'company_id': lambda s,cr,uid,c: s.pool.get('res.company')._company_default_get(cr, uid, 'ir.attachment', context=c), + } + + def _auto_init(self, cr, context=None): + super(ir_attachment, self)._auto_init(cr, context) + cr.execute('SELECT indexname FROM pg_indexes WHERE indexname = %s', ('ir_attachment_res_idx',)) + if not cr.fetchone(): + cr.execute('CREATE INDEX ir_attachment_res_idx ON ir_attachment (res_model, res_id)') + cr.commit() + def check(self, cr, uid, ids, mode, context=None, values=None): """Restricts the access to an ir.attachment, according to referred model In the 'document' module, it is overriden to relax this hard rule, since @@ -108,6 +261,8 @@ class ir_attachment(osv.osv): def write(self, cr, uid, ids, vals, context=None): self.check(cr, uid, ids, 'write', context=context, values=vals) + if 'file_size' in vals: + del vals['file_size'] return super(ir_attachment, self).write(cr, uid, ids, vals, context) def copy(self, cr, uid, id, default=None, context=None): @@ -116,70 +271,22 @@ class ir_attachment(osv.osv): def unlink(self, cr, uid, ids, context=None): self.check(cr, uid, ids, 'unlink', context=context) + location = self.pool.get('ir.config_parameter').get_param(cr, uid, 'ir_attachment.location') + if location: + for attach in self.browse(cr, uid, ids, context=context): + if attach.store_fname: + self._file_delete(cr, uid, location, attach.store_fname) return super(ir_attachment, self).unlink(cr, uid, ids, context) def create(self, cr, uid, values, context=None): self.check(cr, uid, [], mode='create', context=context, values=values) + if 'file_size' in values: + del values['file_size'] return super(ir_attachment, self).create(cr, uid, values, context) def action_get(self, cr, uid, context=None): return self.pool.get('ir.actions.act_window').for_xml_id( cr, uid, 'base', 'action_attachment', context=context) - def _name_get_resname(self, cr, uid, ids, object, method, context): - data = {} - for attachment in self.browse(cr, uid, ids, context=context): - model_object = attachment.res_model - res_id = attachment.res_id - if model_object and res_id: - model_pool = self.pool.get(model_object) - res = model_pool.name_get(cr,uid,[res_id],context) - res_name = res and res[0][1] or False - if res_name: - field = self._columns.get('res_name',False) - if field and len(res_name) > field.size: - res_name = res_name[:field.size-3] + '...' - data[attachment.id] = res_name - else: - data[attachment.id] = False - return data - - _name = 'ir.attachment' - _columns = { - 'name': fields.char('Attachment Name',size=256, required=True), - 'datas': fields.binary('Data'), - 'datas_fname': fields.char('File Name',size=256), - 'description': fields.text('Description'), - 'res_name': fields.function(_name_get_resname, type='char', size=128, - string='Resource Name', store=True), - 'res_model': fields.char('Resource Object',size=64, readonly=True, - help="The database object this attachment will be attached to"), - 'res_id': fields.integer('Resource ID', readonly=True, - help="The record id this is attached to"), - 'url': fields.char('Url', size=512, oldname="link"), - 'type': fields.selection( - [ ('url','URL'), ('binary','Binary'), ], - 'Type', help="Binary File or external URL", required=True, change_default=True), - - 'create_date': fields.datetime('Date Created', readonly=True), - 'create_uid': fields.many2one('res.users', 'Owner', readonly=True), - 'company_id': fields.many2one('res.company', 'Company', change_default=True), - } - - _defaults = { - 'type': 'binary', - 'company_id': lambda s,cr,uid,c: s.pool.get('res.company')._company_default_get(cr, uid, 'ir.attachment', context=c), - } - - def _auto_init(self, cr, context=None): - super(ir_attachment, self)._auto_init(cr, context) - cr.execute('SELECT indexname FROM pg_indexes WHERE indexname = %s', ('ir_attachment_res_idx',)) - if not cr.fetchone(): - cr.execute('CREATE INDEX ir_attachment_res_idx ON ir_attachment (res_model, res_id)') - cr.commit() - -ir_attachment() - - # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/addons/base/module/module.py b/openerp/addons/base/module/module.py index a10b38cf586..47a4cfc8174 100644 --- a/openerp/addons/base/module/module.py +++ b/openerp/addons/base/module/module.py @@ -24,12 +24,22 @@ from docutils.transforms import Transform, writer_aux from docutils.writers.html4css1 import Writer import imp import logging +import os import re +import shutil +import tempfile import urllib +import urllib2 +import zipfile import zipimport +try: + from cStringIO import StringIO +except ImportError: + from StringIO import StringIO # NOQA + import openerp -from openerp import modules, pooler, release, tools, addons +from openerp import modules, pooler, tools, addons from openerp.modules.db import create_categories from openerp.tools.parse_version import parse_version from openerp.tools.translate import _ @@ -43,14 +53,29 @@ ACTION_DICT = { 'res_model': 'base.module.upgrade', 'target': 'new', 'type': 'ir.actions.act_window', - 'nodestroy':True, + 'nodestroy': True, } +def backup(path, raise_exception=True): + path = os.path.normpath(path) + if not os.path.exists(path): + if not raise_exception: + return None + raise OSError('path does not exists') + cnt = 1 + while True: + bck = '%s~%d' % (path, cnt) + if not os.path.exists(bck): + shutil.move(path, bck) + return bck + cnt += 1 + + class module_category(osv.osv): _name = "ir.module.category" _description = "Application" - def _module_nbr(self,cr,uid, ids, prop, unknow_none, context): + def _module_nbr(self, cr, uid, ids, prop, unknow_none, context): cr.execute('SELECT category_id, COUNT(*) \ FROM ir_module_module \ WHERE category_id IN %(ids)s \ @@ -58,7 +83,7 @@ class module_category(osv.osv): FROM ir_module_category \ WHERE parent_id IN %(ids)s) \ GROUP BY category_id', {'ids': tuple(ids)} - ) + ) result = dict(cr.fetchall()) for id in ids: cr.execute('select id from ir_module_category where parent_id=%s', (id,)) @@ -71,16 +96,16 @@ class module_category(osv.osv): 'parent_id': fields.many2one('ir.module.category', 'Parent Application', select=True), 'child_ids': fields.one2many('ir.module.category', 'parent_id', 'Child Applications'), 'module_nr': fields.function(_module_nbr, string='Number of Modules', type='integer'), - 'module_ids' : fields.one2many('ir.module.module', 'category_id', 'Modules'), - 'description' : fields.text("Description", translate=True), - 'sequence' : fields.integer('Sequence'), - 'visible' : fields.boolean('Visible'), + 'module_ids': fields.one2many('ir.module.module', 'category_id', 'Modules'), + 'description': fields.text("Description", translate=True), + 'sequence': fields.integer('Sequence'), + 'visible': fields.boolean('Visible'), 'xml_id': fields.function(osv.osv.get_external_id, type='char', size=128, string="External ID"), } _order = 'name' _defaults = { - 'visible' : 1, + 'visible': 1, } class MyFilterMessages(Transform): @@ -119,7 +144,6 @@ class module(osv.osv): info = {} try: info = modules.load_information_from_description_file(name) - info['version'] = release.major_version + '.' + info['version'] except Exception: _logger.debug('Error when trying to fetch informations for ' 'module %s', name, exc_info=True) @@ -134,9 +158,10 @@ class module(osv.osv): return res def _get_latest_version(self, cr, uid, ids, field_name=None, arg=None, context=None): - res = dict.fromkeys(ids, '') + default_version = modules.adapt_version('1.0') + res = dict.fromkeys(ids, default_version) for m in self.browse(cr, uid, ids): - res[m.id] = self.get_module_info(m.name).get('version', '') + res[m.id] = self.get_module_info(m.name).get('version', default_version) return res def _get_views(self, cr, uid, ids, field_name=None, arg=None, context=None): @@ -167,9 +192,11 @@ class module(osv.osv): continue # then, search and group ir.model.data records - imd_models = dict( [(m,[]) for m in dmodels]) - imd_ids = model_data_obj.search(cr,uid,[('module','=', module_rec.name), - ('model','in',tuple(dmodels))]) + imd_models = dict([(m, []) for m in dmodels]) + imd_ids = model_data_obj.search(cr, uid, [ + ('module', '=', module_rec.name), + ('model', 'in', tuple(dmodels)) + ]) for imd_res in model_data_obj.read(cr, uid, imd_ids, ['model', 'res_id'], context=context): imd_models[imd_res['model']].append(imd_res['res_id']) @@ -181,7 +208,7 @@ class module(osv.osv): view_ids = imd_models.get('ir.ui.view', []) for v in view_obj.browse(cr, uid, view_ids, context=context): aa = v.inherit_id and '* INHERIT ' or '' - res_mod_dic['views_by_module'].append(aa + v.name + '('+v.type+')') + res_mod_dic['views_by_module'].append('%s%s (%s)' % (aa, v.name, v.type)) report_ids = imd_models.get('ir.actions.report.xml', []) for rx in report_obj.browse(cr, uid, report_ids, context=context): @@ -191,15 +218,13 @@ class module(osv.osv): for um in menu_obj.browse(cr, uid, menu_ids, context=context): res_mod_dic['menus_by_module'].append(um.complete_name) except KeyError, e: - _logger.warning( - 'Data not found for items of %s', module_rec.name) + _logger.warning('Data not found for items of %s', module_rec.name) except AttributeError, e: - _logger.warning( - 'Data not found for items of %s %s', module_rec.name, str(e)) + _logger.warning('Data not found for items of %s %s', module_rec.name, str(e)) except Exception, e: - _logger.warning('Unknown error while fetching data of %s', - module_rec.name, exc_info=True) - for key, _ in res.iteritems(): + _logger.warning('Unknown error while fetching data of %s', module_rec.name, exc_info=True) + + for key in res.iterkeys(): for k, v in res[key].iteritems(): res[key][k] = "\n".join(sorted(v)) return res @@ -232,36 +257,34 @@ class module(osv.osv): # 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': fields.function(_get_latest_version, - string='Latest Version', type='char'), + '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), 'url': fields.char('URL', size=128, readonly=True), 'sequence': fields.integer('Sequence'), - 'dependencies_id': fields.one2many('ir.module.module.dependency', - 'module_id', 'Dependencies', readonly=True), + 'dependencies_id': fields.one2many('ir.module.module.dependency', 'module_id', 'Dependencies', readonly=True), 'auto_install': fields.boolean('Automatic Installation', - help='An auto-installable module is automatically installed by the ' - 'system when all its dependencies are satisfied. ' - 'If the module has no dependency, it is always installed.'), + help='An auto-installable module is automatically installed by the ' + 'system when all its dependencies are satisfied. ' + 'If the module has no dependency, it is always installed.'), 'state': fields.selection([ - ('uninstallable','Not Installable'), - ('uninstalled','Not Installed'), - ('installed','Installed'), - ('to upgrade','To be upgraded'), - ('to remove','To be removed'), - ('to install','To be installed') + ('uninstallable', 'Not Installable'), + ('uninstalled', 'Not Installed'), + ('installed', 'Installed'), + ('to upgrade', 'To be upgraded'), + ('to remove', 'To be removed'), + ('to install', 'To be installed') ], string='Status', readonly=True, select=True), 'demo': fields.boolean('Demo Data', readonly=True), 'license': fields.selection([ - ('GPL-2', 'GPL Version 2'), - ('GPL-2 or any later version', 'GPL-2 or later version'), - ('GPL-3', 'GPL Version 3'), - ('GPL-3 or any later version', 'GPL-3 or later version'), - ('AGPL-3', 'Affero GPL-3'), - ('Other OSI approved licence', 'Other OSI Approved Licence'), - ('Other proprietary', 'Other Proprietary') + ('GPL-2', 'GPL Version 2'), + ('GPL-2 or any later version', 'GPL-2 or later version'), + ('GPL-3', 'GPL Version 3'), + ('GPL-3 or any later version', 'GPL-3 or later version'), + ('AGPL-3', 'Affero GPL-3'), + ('Other OSI approved licence', 'Other OSI Approved Licence'), + ('Other proprietary', 'Other Proprietary') ], string='License', readonly=True), 'menus_by_module': fields.function(_get_views, string='Menus', type='text', multi="meta", store=True), 'reports_by_module': fields.function(_get_views, string='Reports', type='text', multi="meta", store=True), @@ -283,7 +306,7 @@ class module(osv.osv): return _('The name of the module must be unique !') _sql_constraints = [ - ('name_uniq', 'UNIQUE (name)',_name_uniq_msg ), + ('name_uniq', 'UNIQUE (name)', _name_uniq_msg), ] def unlink(self, cr, uid, ids, context=None): @@ -292,10 +315,9 @@ class module(osv.osv): if isinstance(ids, (int, long)): ids = [ids] mod_names = [] - for mod in self.read(cr, uid, ids, ['state','name'], context): + for mod in self.read(cr, uid, ids, ['state', 'name'], context): if mod['state'] in ('installed', 'to upgrade', 'to remove', 'to install'): - raise orm.except_orm(_('Error'), - _('You try to remove a module that is installed or will be installed')) + raise orm.except_orm(_('Error'), _('You try to remove a module that is installed or will be installed')) mod_names.append(mod['name']) #Removing the entry from ir_model_data #ids_meta = self.pool.get('ir.model.data').search(cr, uid, [('name', '=', 'module_meta_information'), ('module', 'in', mod_names)]) @@ -340,7 +362,7 @@ class module(osv.osv): raise orm.except_orm(_('Error'), msg % (module_name, e.args[0])) def state_update(self, cr, uid, ids, newstate, states_to_update, context=None, level=100): - if level<1: + if level < 1: raise orm.except_orm(_('Error'), _('Recursion error in modules dependencies !')) demo = False for module in self.browse(cr, uid, ids, context=context): @@ -348,9 +370,9 @@ class module(osv.osv): for dep in module.dependencies_id: if dep.state == 'unknown': raise orm.except_orm(_('Error'), _("You try to install module '%s' that depends on module '%s'.\nBut the latter module is not available in your system.") % (module.name, dep.name,)) - ids2 = self.search(cr, uid, [('name','=',dep.name)]) + ids2 = self.search(cr, uid, [('name', '=', dep.name)]) if dep.state != newstate: - mdemo = self.state_update(cr, uid, ids2, newstate, states_to_update, context, level-1,) or mdemo + mdemo = self.state_update(cr, uid, ids2, newstate, states_to_update, context, level - 1) or mdemo else: od = self.browse(cr, uid, ids2)[0] mdemo = od.demo or mdemo @@ -359,7 +381,7 @@ class module(osv.osv): if not module.dependencies_id: mdemo = module.demo if module.state in states_to_update: - self.write(cr, uid, [module.id], {'state': newstate, 'demo':mdemo}) + self.write(cr, uid, [module.id], {'state': newstate, 'demo': mdemo}) demo = demo or mdemo return demo @@ -403,7 +425,7 @@ class module(osv.osv): return self._button_immediate_function(cr, uid, ids, self.button_install, context=context) def button_install_cancel(self, cr, uid, ids, context=None): - self.write(cr, uid, ids, {'state': 'uninstalled', 'demo':False}) + self.write(cr, uid, ids, {'state': 'uninstalled', 'demo': False}) return True def module_uninstall(self, cr, uid, ids, context=None): @@ -421,12 +443,13 @@ class module(osv.osv): return True def downstream_dependencies(self, cr, uid, ids, known_dep_ids=None, - exclude_states=['uninstalled','uninstallable','to remove'], + exclude_states=['uninstalled', 'uninstallable', 'to remove'], context=None): """Return the ids of all modules that directly or indirectly depend on the given module `ids`, and that satisfy the `exclude_states` filter""" - if not ids: return [] + if not ids: + return [] known_dep_ids = set(known_dep_ids or []) cr.execute('''SELECT DISTINCT m.id FROM @@ -437,13 +460,13 @@ class module(osv.osv): d.name IN (SELECT name from ir_module_module where id in %s) AND m.state NOT IN %s AND m.id NOT IN %s ''', - (tuple(ids),tuple(exclude_states), tuple(known_dep_ids or ids))) + (tuple(ids), tuple(exclude_states), tuple(known_dep_ids or ids))) new_dep_ids = set([m[0] for m in cr.fetchall()]) missing_mod_ids = new_dep_ids - known_dep_ids known_dep_ids |= new_dep_ids if missing_mod_ids: known_dep_ids |= set(self.downstream_dependencies(cr, uid, list(missing_mod_ids), - known_dep_ids, exclude_states,context)) + known_dep_ids, exclude_states, context)) return list(known_dep_ids) def _button_immediate_function(self, cr, uid, ids, function, context=None): @@ -460,9 +483,9 @@ class module(osv.osv): menu_obj = self.pool.get('ir.ui.menu') menu_ids = menu_obj.search(cr, uid, [('parent_id', '=', False)], context=context) return { - 'type' : 'ir.actions.client', - 'tag' : 'reload', - 'params' : {'menu_id' : menu_ids and menu_ids[0] or False} + 'type': 'ir.actions.client', + 'tag': 'reload', + 'params': {'menu_id': menu_ids and menu_ids[0] or False} } def button_immediate_uninstall(self, cr, uid, ids, context=None): @@ -496,20 +519,19 @@ class module(osv.osv): self.update_list(cr, uid) i = 0 - while i parse_version(mod.latest_version or ''): + if parse_version(terp.get('version', default_version)) > parse_version(mod.latest_version or default_version): res[0] += 1 if updated_values: self.write(cr, uid, mod.id, updated_values) @@ -587,24 +610,32 @@ class module(osv.osv): self._update_dependencies(cr, uid, mod, terp.get('depends', [])) self._update_category(cr, uid, mod, terp.get('category', 'Uncategorized')) + # Trigger load_addons if new module have been discovered it exists on + # wsgi handlers, so they can react accordingly + if tuple(res) != (0, 0): + for handler in openerp.service.wsgi_server.module_handlers: + if hasattr(handler,'load_addons'): + handler.load_addons() + return res def download(self, cr, uid, ids, download=True, context=None): res = [] + default_version = modules.adapt_version('1.0') for mod in self.browse(cr, uid, ids, context=context): if not mod.url: continue match = re.search('-([a-zA-Z0-9\._-]+)(\.zip)', mod.url, re.I) - version = '0' + version = default_version if match: version = match.group(1) - if parse_version(mod.installed_version or '0') >= parse_version(version): + if parse_version(mod.installed_version) >= parse_version(version): continue res.append(mod.url) if not download: continue zip_content = urllib.urlopen(mod.url).read() - fname = modules.get_module_path(str(mod.name)+'.zip', downloaded=True) + fname = modules.get_module_path(str(mod.name) + '.zip', downloaded=True) try: with open(fname, 'wb') as fp: fp.write(zip_content) @@ -614,17 +645,77 @@ class module(osv.osv): raise orm.except_orm(_('Error'), _('Can not create the module file:\n %s') % (fname,)) terp = self.get_module_info(mod.name) self.write(cr, uid, mod.id, self.get_values_from_terp(terp)) - cr.execute('DELETE FROM ir_module_module_dependency ' \ - 'WHERE module_id = %s', (mod.id,)) - self._update_dependencies(cr, uid, mod, terp.get('depends', - [])) - self._update_category(cr, uid, mod, terp.get('category', - 'Uncategorized')) + cr.execute('DELETE FROM ir_module_module_dependency WHERE module_id = %s', (mod.id,)) + self._update_dependencies(cr, uid, mod, terp.get('depends', [])) + self._update_category(cr, uid, mod, terp.get('category', 'Uncategorized')) # Import module zimp = zipimport.zipimporter(fname) zimp.load_module(mod.name) return res + def install_from_urls(self, cr, uid, urls, context=None): + OPENERP = 'openerp' + tmp = tempfile.mkdtemp() + try: + for module_name, url in urls.items(): + if not url: + continue # nothing to download, local version is already the last one + try: + content = urllib2.urlopen(url).read() + except Exception, e: + _logger.exception('ggr') + raise osv.except_osv('grrr', e) + 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 + module_path = modules.get_module_path(module_name, downloaded=True, display_warning=False) + bck = backup(module_path, False) + shutil.move(os.path.join(tmp, module_name), module_path) + if bck: + shutil.rmtree(bck) + + if urls.get(OPENERP, None): + # special case. it containt 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) + for d in os.listdir(base_path): + if d != 'base' and os.path.isdir(os.path.join(base_path, d)): + destdir = os.path.join(tmp, OPENERP, 'addons', d) # XXX 'openerp' subdirectory ? + shutil.copytree(os.path.join(base_path, d), destdir) + + # then replace the server by the new "base" module + server_dir = openerp.tools.config['root_path'] # XXX or dirname() + bck = backup(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 + cr.commit() + openerp.service.restart_server() + return { + 'type': 'ir.actions.client', + 'tag': 'home', + 'params': {'wait': True}, + } + return self.button_immediate_install(cr, uid, ids, context=context) + finally: + shutil.rmtree(tmp) + + def install_by_names(self, cr, uid, names, context=None): + raise NotImplementedError('# TODO') + def _update_dependencies(self, cr, uid, mod_browse, depends=None): if depends is None: depends = [] @@ -679,20 +770,20 @@ class module_dependency(osv.osv): _columns = { # The dependency name - 'name': fields.char('Name', size=128, select=True), + 'name': fields.char('Name', size=128, select=True), # The module that depends on it 'module_id': fields.many2one('ir.module.module', 'Module', select=True, ondelete='cascade'), 'state': fields.function(_state, type='selection', selection=[ - ('uninstallable','Uninstallable'), - ('uninstalled','Not Installed'), - ('installed','Installed'), - ('to upgrade','To be upgraded'), - ('to remove','To be removed'), - ('to install','To be installed'), + ('uninstallable', 'Uninstallable'), + ('uninstalled', 'Not Installed'), + ('installed', 'Installed'), + ('to upgrade', 'To be upgraded'), + ('to remove', 'To be removed'), + ('to install', 'To be installed'), ('unknown', 'Unknown'), - ], string='Status', readonly=True, select=True), + ], string='Status', readonly=True, select=True), } # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/addons/base/module/module_view.xml b/openerp/addons/base/module/module_view.xml index 5f33a437f08..3a43a2591ba 100644 --- a/openerp/addons/base/module/module_view.xml +++ b/openerp/addons/base/module/module_view.xml @@ -1,9 +1,7 @@ - - ir.module.category.form ir.module.category @@ -32,7 +30,6 @@ - ir.module.module.list.select ir.module.module @@ -43,7 +40,7 @@ - + @@ -53,37 +50,6 @@ - - - Modules Kanban - ir.module.module - - - - - - - - -
- - -
-

-

-
- -

- - -
-
-
-
-
-
-
- Modules ir.module.module @@ -100,7 +66,6 @@ - ir.module.module.form ir.module.module @@ -176,20 +141,74 @@ + + Modules Kanban + ir.module.module + + + + + + + + +
+ + +
+

+

+
+ +

+ + +
+
+
+
+
+
+
- Install a Module + + Modules ir.module.module form kanban,tree,form - {'search_default_app':1} +

No module found!

You should try others search criteria.

- + + + + + + Apps + apps + + + + + + Updates + apps.updates + {} + + +
diff --git a/openerp/addons/base/module/wizard/base_export_language_view.xml b/openerp/addons/base/module/wizard/base_export_language_view.xml index cbf7104f957..f184186a500 100644 --- a/openerp/addons/base/module/wizard/base_export_language_view.xml +++ b/openerp/addons/base/module/wizard/base_export_language_view.xml @@ -11,7 +11,7 @@ - +

Export Complete

diff --git a/openerp/addons/base/module/wizard/base_module_import_view.xml b/openerp/addons/base/module/wizard/base_module_import_view.xml index 192bf6c2a92..d9d6bb6ee78 100644 --- a/openerp/addons/base/module/wizard/base_module_import_view.xml +++ b/openerp/addons/base/module/wizard/base_module_import_view.xml @@ -43,7 +43,7 @@ id="menu_view_base_module_import" parent="menu_management" groups="base.group_no_one" - sequence="1"/> + sequence="6"/> --> diff --git a/openerp/addons/base/module/wizard/base_module_update_view.xml b/openerp/addons/base/module/wizard/base_module_update_view.xml index 75d2b1316a6..cb9b9090294 100644 --- a/openerp/addons/base/module/wizard/base_module_update_view.xml +++ b/openerp/addons/base/module/wizard/base_module_update_view.xml @@ -18,17 +18,17 @@
-
-
- + Module Update @@ -45,7 +45,7 @@ id="menu_view_base_module_update" groups="base.group_no_one" parent="menu_management" - sequence="2" + sequence="40" icon="STOCK_CONVERT"/> diff --git a/openerp/addons/base/module/wizard/base_module_upgrade_view.xml b/openerp/addons/base/module/wizard/base_module_upgrade_view.xml index afd3a2e17b1..1a1225befcb 100644 --- a/openerp/addons/base/module/wizard/base_module_upgrade_view.xml +++ b/openerp/addons/base/module/wizard/base_module_upgrade_view.xml @@ -35,7 +35,7 @@ groups="base.group_no_one" id="menu_view_base_module_upgrade" parent="menu_management" - sequence="3"/> + sequence="50"/> Module Upgrade Install diff --git a/openerp/addons/base/res/__init__.py b/openerp/addons/base/res/__init__.py index 752bb03033a..59403545112 100644 --- a/openerp/addons/base/res/__init__.py +++ b/openerp/addons/base/res/__init__.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- ############################################################################## -# +# # OpenERP, Open Source Management Solution # Copyright (C) 2004-2009 Tiny SPRL (). # @@ -15,7 +15,7 @@ # 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 . +# along with this program. If not, see . # ############################################################################## @@ -32,6 +32,7 @@ import res_lang import ir_property import report +import wizard # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/addons/base/res/res_company.py b/openerp/addons/base/res/res_company.py index 9e01e9a4f94..5917b76aee2 100644 --- a/openerp/addons/base/res/res_company.py +++ b/openerp/addons/base/res/res_company.py @@ -118,7 +118,7 @@ class res_company(osv.osv): 'child_ids': fields.one2many('res.company', 'parent_id', 'Child Companies'), 'partner_id': fields.many2one('res.partner', 'Partner', required=True), 'rml_header': fields.text('RML Header', required=True), - 'rml_header1': fields.char('Company Slogan', size=200, help="Appears by default on the top right corner of your printed documents (report header)."), + 'rml_header1': fields.char('Company Tagline', size=200, help="Appears by default on the top right corner of your printed documents (report header)."), 'rml_header2': fields.text('RML Internal Header', required=True), 'rml_header3': fields.text('RML Internal Header for Landscape Reports', required=True), 'rml_footer': fields.text('Report Footer', help="Footer text displayed at the bottom of all reports."), @@ -330,7 +330,7 @@ class res_company(osv.osv): - produced by OpenERP.com + generated by OpenERP.com diff --git a/openerp/addons/base/res/res_company_view.xml b/openerp/addons/base/res/res_company_view.xml index 7cb461b2b68..06775d159ac 100644 --- a/openerp/addons/base/res/res_company_view.xml +++ b/openerp/addons/base/res/res_company_view.xml @@ -32,6 +32,11 @@
+
+

+ Click to set your company logo. +

+
diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py index 9513f48a27e..e9c813c19c9 100644 --- a/openerp/addons/base/res/res_config.py +++ b/openerp/addons/base/res/res_config.py @@ -466,7 +466,8 @@ class res_config_settings(osv.osv_memory): groups.append((name, ref(field_group), ref(field.implied_group))) elif name.startswith('module_') and isinstance(field, fields.boolean): mod_ids = ir_module.search(cr, uid, [('name', '=', name[7:])]) - modules.append((name, ir_module.browse(cr, uid, mod_ids[0], context))) + record = ir_module.browse(cr, uid, mod_ids[0], context) if mod_ids else None + modules.append((name, record)) else: others.append(name) @@ -490,7 +491,7 @@ class res_config_settings(osv.osv_memory): # modules: which modules are installed/to install for name, module in classified['module']: - res[name] = module.state in ('installed', 'to install', 'to upgrade') + res[name] = module and module.state in ('installed', 'to install', 'to upgrade') # other fields: call all methods that start with 'get_default_' for method in dir(self): @@ -501,9 +502,7 @@ class res_config_settings(osv.osv_memory): def execute(self, cr, uid, ids, context=None): ir_values = self.pool.get('ir.values') - ir_model_data = self.pool.get('ir.model.data') ir_module = self.pool.get('ir.module.module') - res_groups = self.pool.get('res.groups') classified = self._get_classified_fields(cr, uid, context) config = self.browse(cr, uid, ids[0], context) @@ -526,17 +525,26 @@ class res_config_settings(osv.osv_memory): getattr(self, method)(cr, uid, ids, context) # module fields: install/uninstall the selected modules - to_install_ids = [] + to_install_names = [] to_uninstall_ids = [] + lm = len('module_') for name, module in classified['module']: if config[name]: - if module.state == 'uninstalled': to_install_ids.append(module.id) + if not module or module.state == 'uninstalled': + to_install_names.append(name[lm:]) else: - if module.state in ('installed','upgrade'): to_uninstall_ids.append(module.id) + if module and module.state in ('installed', 'to upgrade'): + to_uninstall_ids.append(module.id) - if to_install_ids or to_uninstall_ids: - ir_module.button_uninstall(cr, uid, to_uninstall_ids, context=context) - ir_module.button_immediate_install(cr, uid, to_install_ids, context=context) + if to_uninstall_ids: + ir_module.button_immediate_uninstall(cr, uid, to_uninstall_ids, context=context) + + if to_install_names: + return { + 'type': 'ir.actions.client', + 'tag': 'apps', + 'params': {'modules': to_install_names}, + } config = self.pool.get('res.config').next(cr, uid, [], context=context) or {} if config.get('type') not in ('ir.actions.act_window_close',): diff --git a/openerp/addons/base/res/res_partner.py b/openerp/addons/base/res/res_partner.py index d236d867795..b35db73b1f4 100644 --- a/openerp/addons/base/res/res_partner.py +++ b/openerp/addons/base/res/res_partner.py @@ -187,6 +187,12 @@ class res_partner(osv.osv, format_address): def _set_image(self, cr, uid, id, name, value, args, context=None): return self.write(cr, uid, [id], {'image': tools.image_resize_image_big(value)}, context=context) + def _has_image(self, cr, uid, ids, name, args, context=None): + result = {} + for obj in self.browse(cr, uid, ids, context=context): + result[obj.id] = obj.image != False + return result + _order = "name" _columns = { 'name': fields.char('Name', size=128, required=True, select=True), @@ -253,6 +259,7 @@ class res_partner(osv.osv, format_address): help="Small-sized image of this contact. It is automatically "\ "resized as a 64x64px image, with aspect ratio preserved. "\ "Use this field anywhere a small image is required."), + 'has_image': fields.function(_has_image, type="boolean"), 'company_id': fields.many2one('res.company', 'Company', select=1), 'color': fields.integer('Color Index'), 'user_ids': fields.one2many('res.users', 'partner_id', 'Users'), @@ -297,7 +304,7 @@ class res_partner(osv.osv, format_address): 'is_company': False, 'type': 'default', 'use_parent_address': True, - 'image': lambda self, cr, uid, ctx: self._get_default_image(cr, uid, ctx.get('default_is_company', False), ctx), + 'image': False, } def copy(self, cr, uid, id, default=None, context=None): @@ -308,8 +315,7 @@ class res_partner(osv.osv, format_address): return super(res_partner, self).copy(cr, uid, id, default, context) def onchange_type(self, cr, uid, ids, is_company, context=None): - # get value as for an onchange on the image - value = tools.image_get_resized_images(self._get_default_image(cr, uid, is_company, context), return_big=True, return_medium=False, return_small=False) + value = {} value['title'] = False if is_company: value['parent_id'] = False @@ -402,6 +408,8 @@ class res_partner(osv.osv, format_address): name = name + "\n" + self._display_address(cr, uid, record, without_company=True, context=context) name = name.replace('\n\n','\n') name = name.replace('\n\n','\n') + if context.get('show_email') and record.email: + name = "%s <%s>" % (name, record.email) res.append((record.id, name)) return res @@ -437,18 +445,23 @@ class res_partner(osv.osv, format_address): def name_search(self, cr, uid, name, args=None, operator='ilike', context=None, limit=100): if not args: args = [] - if name and operator in ('=', 'ilike', '=ilike', 'like'): + if name and operator in ('=', 'ilike', '=ilike', 'like', '=like'): # search on the name of the contacts and of its company - name2 = operator == '=' and name or '%' + name + '%' + search_name = name + if operator in ('ilike', 'like'): + search_name = '%%%s%%' % name + if operator in ('=ilike', '=like'): + operator = operator[1:] + query_args = {'name': search_name} limit_str = '' - query_args = [name2] if limit: - limit_str = ' limit %s' - query_args += [limit] + limit_str = ' limit %(limit)s' + query_args['limit'] = limit cr.execute('''SELECT partner.id FROM res_partner partner LEFT JOIN res_partner company ON partner.parent_id = company.id - WHERE partner.name || ' (' || COALESCE(company.name,'') || ')' - ''' + operator + ''' %s ''' + limit_str, query_args) + WHERE partner.email ''' + operator +''' %(name)s + OR partner.name || ' (' || COALESCE(company.name,'') || ')' + ''' + operator + ' %(name)s ' + limit_str, query_args) ids = map(lambda x: x[0], cr.fetchall()) if args: ids = self.search(cr, uid, [('id', 'in', ids)] + args, limit=limit, context=context) diff --git a/openerp/addons/base/res/res_partner_view.xml b/openerp/addons/base/res/res_partner_view.xml index 1cbfd818d28..d1a803ce2d8 100644 --- a/openerp/addons/base/res/res_partner_view.xml +++ b/openerp/addons/base/res/res_partner_view.xml @@ -196,12 +196,13 @@ - + + @@ -209,7 +210,17 @@ X
- + + + + + + + + + + +
@@ -222,6 +233,9 @@ +
Phone:
+
Mobile:
+
Fax:
@@ -285,8 +299,7 @@ + filter_domain="['|','|',('name','ilike',self),('parent_id','ilike',self),('ref','=',self)]"/> @@ -328,11 +341,22 @@ +
- + + + + + + + + + + +

diff --git a/openerp/addons/base/res/res_users_view.xml b/openerp/addons/base/res/res_users_view.xml index 9a4f88cd1fc..7e83b43179f 100644 --- a/openerp/addons/base/res/res_users_view.xml +++ b/openerp/addons/base/res/res_users_view.xml @@ -136,6 +136,10 @@
+
+
- diff --git a/openerp/addons/base/res/wizard/__init__.py b/openerp/addons/base/res/wizard/__init__.py new file mode 100644 index 00000000000..f572814a2cf --- /dev/null +++ b/openerp/addons/base/res/wizard/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2011 OpenERP S.A (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +import change_password_wizard \ No newline at end of file diff --git a/openerp/addons/base/res/wizard/change_password_wizard.py b/openerp/addons/base/res/wizard/change_password_wizard.py new file mode 100644 index 00000000000..4d1bfe67fce --- /dev/null +++ b/openerp/addons/base/res/wizard/change_password_wizard.py @@ -0,0 +1,81 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2011 OpenERP S.A (). +# +# 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 . +# +############################################################################## + +from openerp.osv import fields, osv + +class change_password_wizard(osv.TransientModel): + """ + A wizard to manage the change of users' passwords + """ + + _name = "change.password.wizard" + _description = "Change Password Wizard" + _columns = { + 'user_ids': fields.one2many('change.password.user', 'wizard_id', string='Users'), + } + + def default_get(self, cr, uid, fields, context=None): + if context == None: + context = {} + user_ids = context.get('active_ids', []) + wiz_id = context.get('active_id', None) + res = [] + users = self.pool.get('res.users').browse(cr, uid, user_ids, context=context) + for user in users: + res.append((0, 0, { + 'wizard_id': wiz_id, + 'user_id': user.id, + 'user_login': user.login, + })) + return {'user_ids': res} + + + def change_password_button(self, cr, uid, id, context=None): + wizard = self.browse(cr, uid, id, context=context)[0] + user_ids = [] + for user in wizard.user_ids: + user_ids.append(user.id) + self.pool.get('change.password.user').change_password_button(cr, uid, user_ids, context=context) + return { + 'type': 'ir.actions.act_window_close', + } + +class change_password_user(osv.TransientModel): + """ + A model to configure users in the change password wizard + """ + + _name = 'change.password.user' + _description = 'Change Password Wizard User' + _columns = { + 'wizard_id': fields.many2one('change.password.wizard', string='Wizard', required=True), + 'user_id': fields.many2one('res.users', string='User', required=True), + 'user_login': fields.char('User Login', readonly=True), + 'new_passwd': fields.char('New Password'), + } + _defaults = { + 'new_passwd': '', + } + + def change_password_button(self, cr, uid, ids, context=None): + for user in self.browse(cr, uid, ids, context=context): + self.pool.get('res.users').write(cr, uid, user.user_id.id, {'password': user.new_passwd}) + diff --git a/openerp/addons/base/res/wizard/change_password_wizard_view.xml b/openerp/addons/base/res/wizard/change_password_wizard_view.xml new file mode 100644 index 00000000000..c5bd5c96901 --- /dev/null +++ b/openerp/addons/base/res/wizard/change_password_wizard_view.xml @@ -0,0 +1,44 @@ + + + + + + + + + + Change Password + change.password.wizard + + + +
+
+ +
+
+ + + + Change Password Users + change.password.user + + + + + + + + + +
+
diff --git a/openerp/addons/base/static/src/js/apps.js b/openerp/addons/base/static/src/js/apps.js new file mode 100644 index 00000000000..397f028c1fd --- /dev/null +++ b/openerp/addons/base/static/src/js/apps.js @@ -0,0 +1,117 @@ +openerp.base = function(instance) { + + instance.base.apps_remote = null; + instance.base.apps_client = null; + + instance.base.Apps = instance.web.Widget.extend({ + template: 'EmptyComponent', + remote_action_id: 'loempia.action_embed', + failback_action_id: 'base.open_module_tree', + + init: function(parent, action) { + this._super(parent, action); + var options = action.params || {}; + + if (options.apps_user) { + sessionStorage.setItem('apps.login', options.apps_user); + } + if (options.apps_access_token) { + sessionStorage.setItem('apps.access_token', options.apps_access_token); + } + + this.params = options; // NOTE read by embedded client action + }, + + get_client: function() { + // return the client via a deferred, resolved or rejected depending if the remote host is available or not. + var check_client_available = function(client) { + var d = $.Deferred(); + var i = new Image(); + i.onerror = function() { + d.reject(client); + }; + i.onload = function() { + client.session.session_bind(client.origin).then(function() { + // check if client can authenticate + client.authenticate().then( + function() { /* done */ + d.resolve(client); + }, function() { /* fail */ + if (client.login === 'anonymous') { + d.reject(client); + } else { + sessionStorage.removeItem('apps.login'); + sessionStorage.removeItem('apps.access_token'); + client.bind_crendentials(client.dbname, 'anonymous', 'anonymous'); + client.authenticate().then( + function() { /* done */ + d.resolve(client); + }, function() { /* fail */ + d.reject(client); + }); + } + }); + }); + + }; + i.src = _.str.sprintf('%s/web/static/src/img/sep-a.gif', client.origin); + return d.promise(); + }; + if (instance.base.apps_client) { + return check_client_available(instance.base.apps_client); + } else { + var ICP = new instance.web.Model('ir.config_parameter'); + return ICP.call('get_param', ['apps.server', 'https://apps.openerp.com/apps']).then(function(u) { + var link = $(_.str.sprintf('', u))[0]; + var host = _.str.sprintf('%s//%s', link.protocol, link.host); + var dbname = link.pathname; + if (dbname[0] === '/') { + dbname = dbname.substr(1); + } + var login = (sessionStorage ? sessionStorage.getItem('apps.login') : null) || 'anonymous'; + var passwd = (sessionStorage ? sessionStorage.getItem('apps.access_token') : null) || 'anonymous'; + if (_.isNull(instance.base.apps_remote)) { + instance.base.apps_remote = new openerp.init(); + } + var client = new instance.base.apps_remote.web.EmbeddedClient(null, host, dbname, login, passwd); + instance.base.apps_client = client; + return check_client_available(client); + }); + } + }, + + destroy: function() { + if (instance.base.apps_client) { + instance.base.apps_client.destroy(); + } + return this._super(); + }, + + start: function() { + var self = this; + return self.get_client(). + done(function(client) { + client.replace(self.$el). + done(function() { + client.$el.removeClass('openerp'); + client.do_action(self.remote_action_id); + }); + }). + fail(function(client) { + self.do_warn('Apps Server not reachable.', 'Showing local modules.', true); + self.rpc('/web/action/load', {action_id: self.failback_action_id}).done(function(action) { + self.do_action(action); + instance.webclient.menu.open_action(action.id); + }); + }); + }, + }); + + instance.base.AppsUpdates = instance.base.Apps.extend({ + remote_action_id: 'loempia.action_embed_updates' + }); + + instance.web.client_actions.add("apps", "instance.base.Apps"); + instance.web.client_actions.add("apps.updates", "instance.base.AppsUpdates"); + +}; diff --git a/openerp/addons/base/test/base_test.xml b/openerp/addons/base/test/base_test.xml deleted file mode 100644 index 27bcabfc8f9..00000000000 --- a/openerp/addons/base/test/base_test.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - ASUSTeK - - - - \ No newline at end of file diff --git a/openerp/addons/base/test/test_ir_cron.py b/openerp/addons/base/test/test_ir_cron.py deleted file mode 100644 index 6ef79ac3a78..00000000000 --- a/openerp/addons/base/test/test_ir_cron.py +++ /dev/null @@ -1,116 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2011-TODAY OpenERP S.A. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -import time -from datetime import datetime -from dateutil.relativedelta import relativedelta - -import openerp - -JOB = { - 'function': u'_0_seconds', - 'interval_type': u'minutes', - 'user_id': 1, - 'name': u'test', - 'args': False, - 'numbercall': 1, - 'nextcall': datetime.now().strftime('%Y-%m-%d %H:%M:%S'), - 'priority': 5, - 'doall': True, - 'active': True, - 'interval_number': 1, - 'model': u'ir.cron' -} - -class test_ir_cron(openerp.osv.osv.osv): - """ Add a few handy methods to test cron jobs scheduling. """ - _inherit = "ir.cron" - - def _0_seconds(a, b, c): - print ">>> _0_seconds" - - def _20_seconds(self, cr, uid): - print ">>> in _20_seconds" - time.sleep(20) - print ">>> out _20_seconds" - - def _80_seconds(self, cr, uid): - print ">>> in _80_seconds" - time.sleep(80) - print ">>> out _80_seconds" - - def test_0(self, cr, uid): - now = datetime.now() - t1 = (now + relativedelta(minutes=1)).strftime('%Y-%m-%d %H:%M:%S') - t2 = (now + relativedelta(minutes=1, seconds=5)).strftime('%Y-%m-%d %H:%M:%S') - t3 = (now + relativedelta(minutes=1, seconds=10)).strftime('%Y-%m-%d %H:%M:%S') - self.create(cr, uid, dict(JOB, name='test_0 _20_seconds A', function='_20_seconds', nextcall=t1)) - self.create(cr, uid, dict(JOB, name='test_0 _20_seconds B', function='_20_seconds', nextcall=t2)) - self.create(cr, uid, dict(JOB, name='test_0 _20_seconds C', function='_20_seconds', nextcall=t3)) - - def test_1(self, cr, uid): - now = datetime.now() - t1 = (now + relativedelta(minutes=1)).strftime('%Y-%m-%d %H:%M:%S') - self.create(cr, uid, dict(JOB, name='test_1 _20_seconds * 3', function='_20_seconds', nextcall=t1, numbercall=3)) - - def test_2(self, cr, uid): - now = datetime.now() - t1 = (now + relativedelta(minutes=1)).strftime('%Y-%m-%d %H:%M:%S') - self.create(cr, uid, dict(JOB, name='test_2 _80_seconds * 2', function='_80_seconds', nextcall=t1, numbercall=2)) - - def test_3(self, cr, uid): - now = datetime.now() - t1 = (now + relativedelta(minutes=1)).strftime('%Y-%m-%d %H:%M:%S') - t2 = (now + relativedelta(minutes=1, seconds=5)).strftime('%Y-%m-%d %H:%M:%S') - t3 = (now + relativedelta(minutes=1, seconds=10)).strftime('%Y-%m-%d %H:%M:%S') - self.create(cr, uid, dict(JOB, name='test_3 _80_seconds A', function='_80_seconds', nextcall=t1)) - self.create(cr, uid, dict(JOB, name='test_3 _20_seconds B', function='_20_seconds', nextcall=t2)) - self.create(cr, uid, dict(JOB, name='test_3 _20_seconds C', function='_20_seconds', nextcall=t3)) - - # This test assumes 4 cron threads. - def test_00(self, cr, uid): - self.test_00_set = set() - now = datetime.now() - t1 = (now + relativedelta(minutes=1)).strftime('%Y-%m-%d %H:%M:%S') - t2 = (now + relativedelta(minutes=1, seconds=5)).strftime('%Y-%m-%d %H:%M:%S') - t3 = (now + relativedelta(minutes=1, seconds=10)).strftime('%Y-%m-%d %H:%M:%S') - self.create(cr, uid, dict(JOB, name='test_00 _20_seconds_A', function='_20_seconds_A', nextcall=t1)) - self.create(cr, uid, dict(JOB, name='test_00 _20_seconds_B', function='_20_seconds_B', nextcall=t2)) - self.create(cr, uid, dict(JOB, name='test_00 _20_seconds_C', function='_20_seconds_C', nextcall=t3)) - - def _expect(self, cr, uid, to_add, to_sleep, to_expect_in, to_expect_out): - assert self.test_00_set == to_expect_in - self.test_00_set.add(to_add) - time.sleep(to_sleep) - self.test_00_set.discard(to_add) - assert self.test_00_set == to_expect_out - - def _20_seconds_A(self, cr, uid): - self._expect(cr, uid, 'A', 20, set(), set(['B', 'C'])) - - def _20_seconds_B(self, cr, uid): - self._expect(cr, uid, 'B', 20, set('A'), set('C')) - - def _20_seconds_C(self, cr, uid): - self._expect(cr, uid, 'C', 20, set(['A', 'B']), set()) - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/openerp/addons/base/test/test_ir_cron.yml b/openerp/addons/base/test/test_ir_cron.yml deleted file mode 100644 index 16d648e1c30..00000000000 --- a/openerp/addons/base/test/test_ir_cron.yml +++ /dev/null @@ -1,61 +0,0 @@ -- - Test the cron jobs scheduling. -- - Disable the existing cron jobs if any during the tests. -- - !python {model: ir.cron }: | - # For this test to work, as it involves multiple database cursors, - # we have to commit changes. But YAML tests must be rollbacked, so - # the final database state is left untouched. So we have to be a bit - # ugly here: use our own cursor, commit, and clean after ourselves. - # We also pass around some ids using setattr/delattr, and we have to - # rollback the previous tests otherwise we won't be able to touch the - # db. - # Well, this should probably be a standalone, or regular unit test, - # instead of using the YAML infrastructure. - cr.rollback() - our_cr = self.pool.db.cursor() - try: - ids = self.search(our_cr, uid, [], {}) - setattr(self, 'saved_ids', ids) - self.write(our_cr, uid, ids, {'active': False}, {}) - our_cr.commit() - finally: - our_cr.close() -- - Three concurrent jobs started with a slight time gap. Assume 4 cron threads. - This will take about 2 minutes. -- - !python {model: ir.cron }: | - # Pretend initialization is already done. We the use a try/finally - # to reset _init correctly. - self.pool._init = False - our_cr = self.pool.db.cursor() - try: - self.test_00(our_cr, uid) # this will commit using the passed cursor - import openerp.cron - openerp.cron._thread_slots = 4 - # Wake up this db as soon as the master cron thread starts. - openerp.cron.schedule_wakeup(1, self.pool.db.dbname) - # Pretend to be the master thread, for 4 iterations. - openerp.cron.runner_body() - openerp.cron.runner_body() - openerp.cron.runner_body() - openerp.cron.runner_body() - finally: - self.pool._init = True - our_cr.close() -- - Clean after ourselves. -- - !python {model: ir.cron }: | - our_cr = self.pool.db.cursor() - try: - ids = [x for x in self.search(our_cr, uid, ['|', ('active', '=', True), ('active', '=', False)], {}) if x not in self.saved_ids] - self.unlink(our_cr, uid, ids, {}) - ids = self.saved_ids - delattr(self, 'saved_ids') - self.write(our_cr, uid, ids, {'active': True}, {}) - our_cr.commit() - finally: - our_cr.close() diff --git a/openerp/addons/base/tests/__init__.py b/openerp/addons/base/tests/__init__.py index 70f9a932d01..d891bc06fda 100644 --- a/openerp/addons/base/tests/__init__.py +++ b/openerp/addons/base/tests/__init__.py @@ -1,9 +1,15 @@ -import test_base, test_expression, test_search, test_ir_values, test_menu +import test_base +import test_expression +import test_ir_attachment +import test_ir_values +import test_menu +import test_search checks = [ test_base, test_expression, - test_search, + test_ir_attachment, test_ir_values, test_menu, + test_search, ] diff --git a/openerp/addons/base/tests/test_ir_attachment.py b/openerp/addons/base/tests/test_ir_attachment.py new file mode 100644 index 00000000000..4d96ec42b28 --- /dev/null +++ b/openerp/addons/base/tests/test_ir_attachment.py @@ -0,0 +1,89 @@ +import hashlib +import os + +import unittest2 + +import openerp +import openerp.tests.common + +class test_ir_attachment(openerp.tests.common.TransactionCase): + + def test_00_attachment_flow(self): + registry, cr, uid = self.registry, self.cr, self.uid + root_path = openerp.tools.config['root_path'] + ira = registry('ir.attachment') + + # Blob1 + blob1 = 'blob1' + blob1_b64 = blob1.encode('base64') + blob1_hash = hashlib.sha1(blob1).hexdigest() + blob1_fname = blob1_hash[:3] + '/' + blob1_hash + + # Blob2 + blob2 = 'blob2' + blob2_b64 = blob2.encode('base64') + blob2_hash = hashlib.sha1(blob2).hexdigest() + blob2_fname = blob2_hash[:3] + '/' + blob2_hash + + # 'ir_attachment.location' is undefined test database storage + a1 = ira.create(cr, uid, {'name': 'a1', 'datas': blob1_b64}) + a1_read = ira.read(cr, uid, [a1], ['datas']) + self.assertEqual(a1_read[0]['datas'], blob1_b64) + + cr.execute("select id,db_datas from ir_attachment where id = %s", (a1,) ) + a1_db_datas = str(cr.fetchall()[0][1]) + self.assertEqual(a1_db_datas, blob1_b64) + + # define a location for filestore + registry('ir.config_parameter').set_param(cr, uid, 'ir_attachment.location', 'file:///filestore') + + # Test file storage + a2 = ira.create(cr, uid, {'name': 'a2', 'datas': blob1_b64}) + a2_read = ira.read(cr, uid, [a2], ['datas']) + self.assertEqual(a2_read[0]['datas'], blob1_b64) + + cr.execute("select id,store_fname from ir_attachment where id = %s", (a2,) ) + a2_store_fname = cr.fetchall()[0][1] + self.assertEqual(a2_store_fname, blob1_fname) + + a2_fn = os.path.join(root_path, 'filestore', cr.dbname, blob1_hash[:3], blob1_hash) + fc = file(a2_fn).read() + self.assertEqual(fc, blob1) + + # create a3 with same blob + a3 = ira.create(cr, uid, {'name': 'a3', 'datas': blob1_b64}) + a3_read = ira.read(cr, uid, [a3], ['datas']) + self.assertEqual(a3_read[0]['datas'], blob1_b64) + + cr.execute("select id,store_fname from ir_attachment where id = %s", (a3,) ) + a3_store_fname = cr.fetchall()[0][1] + self.assertEqual(a3_store_fname, a2_store_fname) + + # create a4 blob2 + a4 = ira.create(cr, uid, {'name': 'a4', 'datas': blob2_b64}) + a4_read = ira.read(cr, uid, [a4], ['datas']) + self.assertEqual(a4_read[0]['datas'], blob2_b64) + + a4_fn = os.path.join(root_path, 'filestore', cr.dbname, blob2_hash[:3], blob2_hash) + self.assertTrue(os.path.isfile(a4_fn)) + + # delete a3 but file stays + ira.unlink(cr, uid, [a3]) + self.assertTrue(os.path.isfile(a2_fn)) + + # delete a2 it is unlinked + ira.unlink(cr, uid, [a2]) + self.assertFalse(os.path.isfile(a2_fn)) + + # update a4 blob2 by blob1 + ira.write(cr, uid, [a4], {'datas': blob1_b64}) + a4_read = ira.read(cr, uid, [a4], ['datas']) + self.assertEqual(a4_read[0]['datas'], blob1_b64) + + # file of a4 disapear and a2 reappear + self.assertFalse(os.path.isfile(a4_fn)) + self.assertTrue(os.path.isfile(a2_fn)) + + # everybody applause + + diff --git a/openerp/cli/server.py b/openerp/cli/server.py index d97d4c81571..7fb252f905f 100644 --- a/openerp/cli/server.py +++ b/openerp/cli/server.py @@ -95,7 +95,7 @@ def preload_registry(dbname): """ Preload a registry, and start the cron.""" try: update_module = True if openerp.tools.config['init'] or openerp.tools.config['update'] else False - db, registry = openerp.pooler.get_db_and_pool(dbname, update_module=update_module, pooljobs=False) + db, registry = openerp.pooler.get_db_and_pool(dbname,update_module=update_module) except Exception: _logger.exception('Failed to initialize database `%s`.', dbname) @@ -103,7 +103,7 @@ def run_test_file(dbname, test_file): """ Preload a registry, possibly run a test file, and start the cron.""" try: config = openerp.tools.config - db, registry = openerp.pooler.get_db_and_pool(dbname, update_module=config['init'] or config['update'], pooljobs=False) + db, registry = openerp.pooler.get_db_and_pool(dbname, update_module=config['init'] or config['update']) cr = db.cursor() _logger.info('loading test file %s', test_file) openerp.tools.convert_yaml_import(cr, 'base', file(test_file), 'test', {}, 'test', True) @@ -207,10 +207,15 @@ def quit_on_signals(): pass config = openerp.tools.config + openerp.service.stop_services() + + if getattr(openerp, 'phoenix', False): + # like the phoenix, reborn from ashes... + openerp.service._reexec() + return + if config['pidfile']: os.unlink(config['pidfile']) - - openerp.service.stop_services() sys.exit(0) def configure_babel_localedata_path(): diff --git a/openerp/modules/__init__.py b/openerp/modules/__init__.py index 56265e353a2..feaf014f568 100644 --- a/openerp/modules/__init__.py +++ b/openerp/modules/__init__.py @@ -3,7 +3,7 @@ # # OpenERP, Open Source Management Solution # Copyright (C) 2004-2009 Tiny SPRL (). -# Copyright (C) 2010-2011 OpenERP s.a. (). +# Copyright (C) 2010-2012 OpenERP s.a. (). # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -32,7 +32,8 @@ from openerp.modules.module import \ load_information_from_description_file, \ get_module_resource, zip_directory, \ get_module_path, initialize_sys_path, \ - load_openerp_module, init_module_models + load_openerp_module, init_module_models, \ + adapt_version from openerp.modules.loading import load_modules diff --git a/openerp/modules/module.py b/openerp/modules/module.py index bb4ff481fb9..98955aff492 100644 --- a/openerp/modules/module.py +++ b/openerp/modules/module.py @@ -3,7 +3,7 @@ # # OpenERP, Open Source Management Solution # Copyright (C) 2004-2009 Tiny SPRL (). -# Copyright (C) 2010-2011 OpenERP s.a. (). +# Copyright (C) 2010-2012 OpenERP s.a. (). # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -329,7 +329,7 @@ def load_information_from_description_file(module): 'license': 'AGPL-3', 'name': False, 'post_load': None, - 'version': '0.0.0', + 'version': '1.0', 'web': False, 'website': '', 'sequence': 100, @@ -349,6 +349,7 @@ def load_information_from_description_file(module): # 'active' has been renamed 'auto_install' info['auto_install'] = info['active'] + info['version'] = adapt_version(info['version']) return info #TODO: refactor the logger in this file to follow the logging guidelines @@ -447,15 +448,22 @@ def get_modules(): def get_modules_with_version(): modules = get_modules() - res = {} + res = dict.fromkeys(modules, adapt_version('1.0')) for module in modules: try: info = load_information_from_description_file(module) - res[module] = "%s.%s" % (release.major_version, info['version']) - except Exception, e: + res[module] = info['version'] + except Exception: continue return res +def adapt_version(version): + serie = release.major_version + if version == serie or not version.startswith(serie + '.'): + version = '%s.%s' % (serie, version) + return version + + def get_test_modules(module, submodule, explode): """ Return a list of submodules containing tests. diff --git a/openerp/modules/registry.py b/openerp/modules/registry.py index 23dbc280803..4aa20f3349d 100644 --- a/openerp/modules/registry.py +++ b/openerp/modules/registry.py @@ -58,8 +58,8 @@ class Registry(object): self.db_name = db_name self.db = openerp.sql_db.db_connect(db_name) - # In monoprocess cron jobs flag (pooljobs) - self.cron = False + # Indicates that the registry is + self.ready = False # Inter-process signaling (used only when openerp.multi_process is True): # The `base_registry_signaling` sequence indicates the whole registry @@ -121,15 +121,6 @@ class Registry(object): models_to_load.append(model._name) return [self.models[m] for m in models_to_load] - def schedule_cron_jobs(self): - """ Make the cron thread care about this registry/database jobs. - This will initiate the cron thread to check for any pending jobs for - this registry/database as soon as possible. Then it will continuously - monitor the ir.cron model for future jobs. See openerp.cron for - details. - """ - self.cron = True - def clear_caches(self): """ Clear the caches This clears the caches associated to methods decorated with @@ -192,18 +183,17 @@ class RegistryManager(object): registries_lock = threading.RLock() @classmethod - def get(cls, db_name, force_demo=False, status=None, update_module=False, - pooljobs=True): + def get(cls, db_name, force_demo=False, status=None, update_module=False): """ Return a registry for a given database name.""" try: return cls.registries[db_name] except KeyError: return cls.new(db_name, force_demo, status, - update_module, pooljobs) + update_module) @classmethod def new(cls, db_name, force_demo=False, status=None, - update_module=False, pooljobs=True): + update_module=False): """ Create and return a new registry for a given database name. The (possibly) previous registry for that database name is discarded. @@ -235,8 +225,7 @@ class RegistryManager(object): finally: cr.close() - if pooljobs: - registry.schedule_cron_jobs() + registry.ready = True return registry @@ -273,7 +262,7 @@ class RegistryManager(object): @classmethod def check_registry_signaling(cls, db_name): if openerp.multi_process and db_name in cls.registries: - registry = cls.get(db_name, pooljobs=False) + registry = cls.get(db_name) cr = registry.db.cursor() try: cr.execute(""" @@ -285,8 +274,7 @@ class RegistryManager(object): # database has been updated by another process). if registry.base_registry_signaling_sequence != r: _logger.info("Reloading the model registry after database signaling.") - # Don't run the cron in the Gunicorn worker. - registry = cls.new(db_name, pooljobs=False) + registry = cls.new(db_name) registry.base_registry_signaling_sequence = r # Check if the model caches must be invalidated (e.g. after a write # occured on another process). Don't clear right after a registry @@ -311,7 +299,7 @@ class RegistryManager(object): if openerp.multi_process and db_name in cls.registries: # Check the registries if any cache has been cleared and signal it # through the database to other processes. - registry = cls.get(db_name, pooljobs=False) + registry = cls.get(db_name) if registry.any_cache_cleared(): _logger.info("At least one model cache has been cleared, signaling through the database.") cr = registry.db.cursor() @@ -327,7 +315,7 @@ class RegistryManager(object): @classmethod def signal_registry_change(cls, db_name): if openerp.multi_process and db_name in cls.registries: - registry = cls.get(db_name, pooljobs=False) + registry = cls.get(db_name) cr = registry.db.cursor() r = 1 try: diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index 875723b0989..2123aaf2286 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -4857,7 +4857,15 @@ class BaseModel(object): return res[0][0] cr.execute('SELECT "%s".id FROM ' % self._table + from_clause + where_str + order_by + limit_str + offset_str, where_clause_params) res = cr.fetchall() - return [x[0] for x in res] + + # TDE note: with auto_join, we could have several lines about the same result + # i.e. a lead with several unread messages; we uniquify the result using + # a fast way to do it while preserving order (http://www.peterbe.com/plog/uniqifiers-benchmark) + def _uniquify_list(seq): + seen = set() + return [x for x in seq if x not in seen and not seen.add(x)] + + return _uniquify_list([x[0] for x in res]) # returns the different values ever entered for one field # this is used, for example, in the client when the user hits enter on diff --git a/openerp/pooler.py b/openerp/pooler.py index 88b60864b90..58cf4936b27 100644 --- a/openerp/pooler.py +++ b/openerp/pooler.py @@ -28,18 +28,17 @@ from openerp.modules.registry import RegistryManager -def get_db_and_pool(db_name, force_demo=False, status=None, update_module=False, pooljobs=True): +def get_db_and_pool(db_name, force_demo=False, status=None, update_module=False): """Create and return a database connection and a newly initialized registry.""" - registry = RegistryManager.get(db_name, force_demo, status, update_module, pooljobs) + registry = RegistryManager.get(db_name, force_demo, status, update_module) return registry.db, registry def restart_pool(db_name, force_demo=False, status=None, update_module=False): """Delete an existing registry and return a database connection and a newly initialized registry.""" - registry = RegistryManager.new(db_name, force_demo, status, update_module, True) + registry = RegistryManager.new(db_name, force_demo, status, update_module) return registry.db, registry - def get_db(db_name): """Return a database connection. The corresponding registry is initialized.""" return get_db_and_pool(db_name)[0] diff --git a/openerp/release.py b/openerp/release.py index 50d9b8ac760..e66d924906b 100644 --- a/openerp/release.py +++ b/openerp/release.py @@ -50,4 +50,6 @@ author = 'OpenERP S.A.' author_email = 'info@openerp.com' license = 'AGPL-3' +nt_service_name = "openerp-server-" + serie + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/report/render/rml2pdf/trml2pdf.py b/openerp/report/render/rml2pdf/trml2pdf.py index 81faef88a93..57699f4c807 100644 --- a/openerp/report/render/rml2pdf/trml2pdf.py +++ b/openerp/report/render/rml2pdf/trml2pdf.py @@ -493,7 +493,7 @@ class _rml_canvas(object): img = ImageReader(s) (sx,sy) = img.getSize() _logger.debug("Image is %dx%d", sx, sy) - args = { 'x': 0.0, 'y': 0.0 } + args = { 'x': 0.0, 'y': 0.0, 'mask': 'auto'} for tag in ('width','height','x','y'): if node.get(tag): args[tag] = utils.unit_get(node.get(tag)) diff --git a/openerp/service/__init__.py b/openerp/service/__init__.py index f8752732cdf..307ee4a6526 100644 --- a/openerp/service/__init__.py +++ b/openerp/service/__init__.py @@ -21,6 +21,10 @@ ############################################################################## import logging +import os +import signal +import subprocess +import sys import threading import time @@ -33,6 +37,7 @@ import wsgi_server import openerp.modules import openerp.netsvc import openerp.osv +from openerp.release import nt_service_name import openerp.tools #.apidoc title: RPC Services @@ -97,27 +102,58 @@ def stop_services(): _logger.info("Initiating shutdown") _logger.info("Hit CTRL-C again or send a second signal to force the shutdown.") - logging.shutdown() # Manually join() all threads before calling sys.exit() to allow a second signal # to trigger _force_quit() in case some non-daemon threads won't exit cleanly. # threading.Thread.join() should not mask signals (at least in python 2.5). me = threading.currentThread() + _logger.debug('current thread: %r', me) for thread in threading.enumerate(): + _logger.debug('process %r (%r)', thread, thread.isDaemon()) if thread != me and not thread.isDaemon() and thread.ident != main_thread_id: while thread.isAlive(): + _logger.debug('join and sleep') # Need a busyloop here as thread.join() masks signals # and would prevent the forced shutdown. thread.join(0.05) time.sleep(0.05) + _logger.debug('--') openerp.modules.registry.RegistryManager.delete_all() + logging.shutdown() def start_services_workers(): import openerp.service.workers openerp.multi_process = True - openerp.service.workers.Multicorn(openerp.service.wsgi_server.application).run() +def _reexec(): + """reexecute openerp-server process with (nearly) the same arguments""" + if openerp.tools.osutil.is_running_as_nt_service(): + subprocess.call('sc stop {0} && sc start {0}'.format(nt_service_name), shell=True) + exe = os.path.basename(sys.executable) + strip_args = ['-d', '-u'] + a = sys.argv[:] + args = [x for i, x in enumerate(a) if x not in strip_args and a[max(i - 1, 0)] not in strip_args] + if not args or args[0] != exe: + args.insert(0, exe) + os.execv(sys.executable, args) + +def restart_server(): + if openerp.multi_process: + raise NotImplementedError("Multicorn is not supported (but gunicorn was)") + pid = openerp.wsgi.core.arbiter_pid + os.kill(pid, signal.SIGHUP) + else: + if os.name == 'nt': + def reborn(): + stop_services() + _reexec() + + # run in a thread to let the current thread return response to the caller. + threading.Thread(target=reborn).start() + else: + openerp.phoenix = True + os.kill(os.getpid(), signal.SIGINT) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/service/cron.py b/openerp/service/cron.py index 337583b65e4..f3c81fe785f 100644 --- a/openerp/service/cron.py +++ b/openerp/service/cron.py @@ -43,7 +43,7 @@ def cron_runner(number): registries = openerp.modules.registry.RegistryManager.registries _logger.debug('cron%d polling for jobs', number) for db_name, registry in registries.items(): - while True and registry.cron: + while True and registry.ready: # acquired = openerp.addons.base.ir.ir_cron.ir_cron._acquire_job(db_name) # TODO why isnt openerp.addons.base defined ? import sys diff --git a/openerp/service/web_services.py b/openerp/service/web_services.py index 5b88e0fd880..940ecdb23e8 100644 --- a/openerp/service/web_services.py +++ b/openerp/service/web_services.py @@ -54,7 +54,12 @@ from openerp import SUPERUSER_ID _logger = logging.getLogger(__name__) -RPC_VERSION_1 = {'server_version': '6.1', 'protocol_version': 1} +RPC_VERSION_1 = { + 'server_version': release.version, + 'server_version_info': release.version_info, + 'server_serie': release.serie, + 'protocol_version': 1, +} # This should be moved to openerp.modules.db, along side initialize(). def _initialize_db(serv, id, db_name, demo, lang, user_password): @@ -120,6 +125,12 @@ class db(netsvc.ExportService): db = sql_db.db_connect('postgres') cr = db.cursor() chosen_template = tools.config['db_template'] + cr.execute("""SELECT datname + FROM pg_database + WHERE datname = %s """, + (name,)) + if cr.fetchall(): + raise openerp.exceptions.Warning(" %s database already exists!" % name ) try: cr.autocommit(True) # avoid transaction block cr.execute("""CREATE DATABASE "%s" ENCODING 'unicode' TEMPLATE "%s" """ % (name, chosen_template)) diff --git a/openerp/service/wsgi_server.py b/openerp/service/wsgi_server.py index f6d7a0582f7..67436a1c0bf 100644 --- a/openerp/service/wsgi_server.py +++ b/openerp/service/wsgi_server.py @@ -442,5 +442,6 @@ def stop_service(): """ if httpd: httpd.shutdown() + openerp.netsvc.close_socket(httpd.socket) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/tests/__init__.py b/openerp/tests/__init__.py index 2606f421669..7f82c414fdd 100644 --- a/openerp/tests/__init__.py +++ b/openerp/tests/__init__.py @@ -8,12 +8,20 @@ Tests can be explicitely added to the `fast_suite` or `checks` lists or not. See the :ref:`test-framework` section in the :ref:`features` list. """ -from . import test_acl -from . import test_expression, test_mail, test_ir_sequence, test_orm, \ - test_fields, test_basecase, \ - test_view_validation, test_uninstall, test_misc, test_db_cursor, \ - test_osv, test_translate -from . import test_ir_filters +import test_acl +import test_basecase +import test_db_cursor +import test_expression +import test_fields +import test_ir_filters +import test_ir_sequence +import test_mail +import test_misc +import test_orm +import test_osv +import test_translate +import test_uninstall +import test_view_validation fast_suite = [ test_ir_sequence, @@ -33,5 +41,5 @@ checks = [ test_osv, test_translate, ] - + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/tests/test_mail.py b/openerp/tests/test_mail.py index a8c806a13d0..b3c11a13bfe 100644 --- a/openerp/tests/test_mail.py +++ b/openerp/tests/test_mail.py @@ -177,6 +177,10 @@ class TestCleaner(unittest2.TestCase): new_html = html_email_clean(False) self.assertEqual(new_html, False, 'html_email_cleaner did change a False in an other value.') + # Test6: Message with xml and doctype tags don't crash + new_html = html_email_clean(u'\n\n\n \n 404 - Not Found\n \n \n

404 - Not Found

\n \n\n') + self.assertNotIn('encoding', new_html, 'html_email_cleaner did not remove correctly encoding attributes') + class TestHtmlTools(unittest2.TestCase): """ Test some of our generic utility functions about html """ diff --git a/openerp/tools/config.py b/openerp/tools/config.py index 9717792a82a..e80b58ed998 100644 --- a/openerp/tools/config.py +++ b/openerp/tools/config.py @@ -484,7 +484,7 @@ class configmanager(object): if opt.server_wide_modules: openerp.conf.server_wide_modules = map(lambda m: m.strip(), opt.server_wide_modules.split(',')) else: - openerp.conf.server_wide_modules = ['web'] + openerp.conf.server_wide_modules = ['web','web_kanban'] if complete: openerp.modules.module.initialize_sys_path() openerp.modules.loading.open_openerp_namespace() diff --git a/openerp/tools/mail.py b/openerp/tools/mail.py index a54f99ba1ad..e6b471a26ba 100644 --- a/openerp/tools/mail.py +++ b/openerp/tools/mail.py @@ -130,11 +130,15 @@ def html_email_clean(html): dest += source[idx:] return dest - if not html: + if not html or not isinstance(html, basestring): return html html = ustr(html) + # 0. remove encoding attribute inside tags + doctype = re.compile(r'(<[^>]*\s)(encoding=(["\'][^"\']*?["\']|[^\s\n\r>]+)(\s[^>]*|/)?>)', re.IGNORECASE | re.DOTALL) + html = doctype.sub(r"", html) + # 1. -> \n, because otherwise the tree is obfuscated br_tags = re.compile(r'([<]\s*[bB][rR]\s*\/?[>])') html = _replace_matching_regex(br_tags, html, '__BR_TAG__') diff --git a/openerp/tools/osutil.py b/openerp/tools/osutil.py index 67c586ad008..b5cff6b2646 100644 --- a/openerp/tools/osutil.py +++ b/openerp/tools/osutil.py @@ -26,6 +26,12 @@ Some functions related to the os and os.path module import os from os.path import join as opj +if os.name == 'nt': + import ctypes + import win32service as ws + import win32serviceutil as wsu + + def listdir(dir, recursive=False): """Allow to recursively get the file listing""" dir = os.path.normpath(dir) @@ -56,6 +62,59 @@ def walksymlinks(top, topdown=True, onerror=None): yield dirpath, dirnames, filenames +if os.name != 'nt': + getppid = os.getppid + is_running_as_nt_service = lambda: False +else: + # based on http://mail.python.org/pipermail/python-win32/2007-June/006174.html + _TH32CS_SNAPPROCESS = 0x00000002 + class _PROCESSENTRY32(ctypes.Structure): + _fields_ = [("dwSize", ctypes.c_ulong), + ("cntUsage", ctypes.c_ulong), + ("th32ProcessID", ctypes.c_ulong), + ("th32DefaultHeapID", ctypes.c_ulong), + ("th32ModuleID", ctypes.c_ulong), + ("cntThreads", ctypes.c_ulong), + ("th32ParentProcessID", ctypes.c_ulong), + ("pcPriClassBase", ctypes.c_ulong), + ("dwFlags", ctypes.c_ulong), + ("szExeFile", ctypes.c_char * 260)] + + def getppid(): + CreateToolhelp32Snapshot = ctypes.windll.kernel32.CreateToolhelp32Snapshot + Process32First = ctypes.windll.kernel32.Process32First + Process32Next = ctypes.windll.kernel32.Process32Next + CloseHandle = ctypes.windll.kernel32.CloseHandle + hProcessSnap = CreateToolhelp32Snapshot(_TH32CS_SNAPPROCESS, 0) + current_pid = os.getpid() + try: + pe32 = _PROCESSENTRY32() + pe32.dwSize = ctypes.sizeof(_PROCESSENTRY32) + if not Process32First(hProcessSnap, ctypes.byref(pe32)): + raise OSError('Failed getting first process.') + while True: + if pe32.th32ProcessID == current_pid: + return pe32.th32ParentProcessID + if not Process32Next(hProcessSnap, ctypes.byref(pe32)): + return None + finally: + CloseHandle(hProcessSnap) + + from contextlib import contextmanager + from openerp.release import nt_service_name + + def is_running_as_nt_service(): + @contextmanager + def close_srv(srv): + try: + yield srv + finally: + ws.CloseServiceHandle(srv) + + with close_srv(ws.OpenSCManager(None, None, ws.SC_MANAGER_ALL_ACCESS)) as hscm: + with close_srv(wsu.SmartOpenService(hscm, nt_service_name, ws.SERVICE_ALL_ACCESS)) as hs: + info = ws.QueryServiceStatusEx(hs) + return info['ProcessId'] == getppid() if __name__ == '__main__': from pprint import pprint as pp diff --git a/win32/OpenERPServerService.py b/win32/OpenERPServerService.py index bf7c83e74a4..8b3c117c03d 100644 --- a/win32/OpenERPServerService.py +++ b/win32/OpenERPServerService.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- ############################################################################## -# +# # OpenERP, Open Source Management Solution # Copyright (C) 2004-2009 Tiny SPRL (). # @@ -15,14 +15,12 @@ # 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 . +# along with this program. If not, see . # ############################################################################## -# Win32 python extensions modules import win32serviceutil import win32service -import win32event import win32api import win32process import servicemanager @@ -30,35 +28,32 @@ import servicemanager import sys import subprocess import os -import thread + +try: + import meta +except ImportError: + if hasattr(sys, 'frozen'): + raise + from setup import generate_files + generate_files() + import meta # noqa class OpenERPServerService(win32serviceutil.ServiceFramework): # required info - _svc_name_ = "openerp-server-6.1" - _svc_display_name_ = "OpenERP Server 6.1" - # optionnal info - _svc_description_ = "OpenERP Server 6.1 service" + _svc_name_ = meta.nt_service_name + _svc_display_name_ = "%s %s" % (meta.description, meta.serie) def __init__(self, args): win32serviceutil.ServiceFramework.__init__(self, args) - # Create an event which we will use to wait on. - # The "service stop" request will set this event. - self.hWaitStop = win32event.CreateEvent(None, 0, 0, None) # a reference to the server's process self.terpprocess = None - # info if the service terminates correctly or if the server crashed - self.stopping = False - def SvcStop(self): # Before we do anything, tell the SCM we are starting the stop process. self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) - # stop the running TERP Server: say it's a normal exit + # stop the running OpenERP Server: say it's a normal exit win32api.TerminateProcess(int(self.terpprocess._handle), 0) servicemanager.LogInfoMsg("OpenERP Server stopped correctly") - # And set my event. - win32event.SetEvent(self.hWaitStop) - def StartTERP(self): # The server finds now its configuration automatically on Windows @@ -69,29 +64,19 @@ class OpenERPServerService(win32serviceutil.ServiceFramework): server_path = os.path.join(server_dir, 'server', 'openerp-server.exe') self.terpprocess = subprocess.Popen([server_path], cwd=server_dir, creationflags=win32process.CREATE_NO_WINDOW) - - def StartControl(self,ws): - # this listens to the Service Manager's events - win32event.WaitForSingleObject(ws, win32event.INFINITE) - self.stopping = True - def SvcDoRun(self): - # Start OpenERP Server itself self.StartTERP() - # start the loop waiting for the Service Manager's stop signal - thread.start_new_thread(self.StartControl, (self.hWaitStop,)) - # Log a info message that the server is running servicemanager.LogInfoMsg("OpenERP Server up and running") - # verification if the server is really running, else quit with an error - self.terpprocess.wait() - if not self.stopping: - sys.exit("OpenERP Server check: server not running, check the logfile for more info") + # exit with same exit code as OpenERP process + sys.exit(self.terpprocess.wait()) +def option_handler(opts): + # configure the service to auto restart on failures... + subprocess.call(['sc', 'failure', meta.nt_service_name, 'reset=', '0', 'actions=', 'restart/0/restart/0/restart/0']) -if __name__=='__main__': +if __name__ == '__main__': # Do with the service whatever option is passed in the command line - win32serviceutil.HandleCommandLine(OpenERPServerService) + win32serviceutil.HandleCommandLine(OpenERPServerService, customOptionHandler=option_handler) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/win32/setup.py b/win32/setup.py index 2dfb8ef3493..0feedce01e0 100644 --- a/win32/setup.py +++ b/win32/setup.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- ############################################################################## -# +# # OpenERP, Open Source Management Solution # Copyright (C) 2004-2010 Tiny SPRL (). # @@ -15,7 +15,7 @@ # 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 . +# along with this program. If not, see . # ############################################################################## @@ -30,15 +30,46 @@ def datas(): r.append(("Microsoft.VC90.CRT", glob.glob('C:\Microsoft.VC90.CRT\*.*'))) return r -setup(service=["OpenERPServerService"], - options={"py2exe":{"excludes":["Tkconstants","Tkinter","tcl", - "_imagingtk","PIL._imagingtk", - "ImageTk", "PIL.ImageTk", - "FixTk"], - "skip_archive": 1, - "optimize": 2,}}, +meta = {} +execfile(os.path.join(os.path.dirname(__file__), '..', 'openerp', 'release.py'), meta) + +def generate_files(): + actions = { + 'start': ['stop', 'start'], + 'stop': ['stop'], + } + + files = [] + for action, steps in actions.items(): + fname = action + '.bat' + files.append(fname) + with open(fname, 'w') as fp: + fp.write('@PATH=%WINDIR%\system32;%WINDIR%;%WINDIR%\System32\Wbem;.\n') + for step in steps: + fp.write('@net %s %s\n' % (step, meta['nt_service_name'])) + + files.append('meta.py') + with open('meta.py', 'w') as fp: + for m in 'description serie nt_service_name'.split(): + fp.write("%s = %r\n" % (m, meta[m],)) + + return files + +excludes = "Tkconstants Tkinter tcl _imagingtk PIL._imagingtk ImageTk PIL.ImageTk FixTk".split() + +setup(service = ["OpenERPServerService"], + version = meta['version'], + license = meta['license'], + url = meta['url'], + author = meta['author'], + author_email = meta['author_email'], + data_files = generate_files(), + options = {"py2exe": { + "excludes": excludes, + "skip_archive": 1, + "optimize": 2, + }}, data_files=datas(), ) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/win32/start.bat b/win32/start.bat deleted file mode 100644 index ff3c49b1397..00000000000 --- a/win32/start.bat +++ /dev/null @@ -1,7 +0,0 @@ -@PATH=%WINDIR%\system32;%WINDIR%;%WINDIR%\System32\Wbem;. - -@net stop openerp-server-6.1 - -@net start openerp-server-6.1 - -cls diff --git a/win32/stop.bat b/win32/stop.bat deleted file mode 100644 index 76a35b7e91f..00000000000 --- a/win32/stop.bat +++ /dev/null @@ -1,5 +0,0 @@ -@PATH=%WINDIR%\system32;%WINDIR%;%WINDIR%\System32\Wbem;. - -@net stop openerp-server-6.1 - -cls