--- /dev/null
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * base
++# Dutch (Belgium) translation for openobject-server
++# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
++# This file is distributed under the same license as the openobject-server package.
++# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+ #
+ msgid ""
+ msgstr ""
-"Project-Id-Version: OpenERP Server 5.0.0\n"
-"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2009-12-09 16:01+0000\n"
-"PO-Revision-Date: 2009-12-10 07:54+0000\n"
-"Last-Translator: Mark van Deursen (Neobis) <mark@neobis.nl>\n"
-"Language-Team: \n"
++"Project-Id-Version: openobject-server\n"
++"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
++"POT-Creation-Date: 2011-01-11 11:14+0000\n"
++"PO-Revision-Date: 2011-02-07 14:53+0000\n"
++"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
++"Language-Team: Dutch (Belgium) <nl_BE@li.org>\n"
+ "MIME-Version: 1.0\n"
+ "Content-Type: text/plain; charset=UTF-8\n"
+ "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2009-11-17 05:06+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
++"X-Launchpad-Export-Date: 2011-02-08 04:35+0000\n"
++"X-Generator: Launchpad (build 12177)\n"
++
++#. module: base
++#: view:ir.filters:0
++#: field:ir.model.fields,domain:0
++#: field:ir.rule,domain:0
++#: field:ir.rule,domain_force:0
++#: field:res.partner.title,domain:0
++msgid "Domain"
++msgstr "Domeinnaam"
+
+ #. module: base
+ #: model:res.country,name:base.sh
+ msgid "Saint Helena"
-msgstr "Saint Helena"
++msgstr "Sint-Helena"
+
+ #. module: base
-#: wizard_view:res.partner.sms_send,init:0
-msgid "SMS - Gateway: clickatell"
-msgstr "SMS - Service : clickatell"
++#: view:ir.actions.report.xml:0
++msgid "Other Configuration"
++msgstr "Andere configuratie"
+
+ #. module: base
-#: view:res.lang:0
-msgid "%j - Day of the year as a decimal number [001,366]."
-msgstr "%j - Dag van het jaar als een decimaal getal [001,366]."
++#: selection:ir.property,type:0
++msgid "DateTime"
++msgstr "DatumTijd"
++
++#. module: base
++#: code:addons/fields.py:534
++#, python-format
++msgid ""
++"The second argument of the many2many field %s must be a SQL table !You used "
++"%s, which is not a valid SQL table name."
++msgstr ""
++"Het tweede argument van het many2many veld %s moet een SQL tabel zijn ! U "
++"gebruikte %s, wat geen geldige SQL tabelnaam is."
+
+ #. module: base
++#: view:ir.values:0
+ #: field:ir.values,meta_unpickle:0
+ msgid "Metadata"
-msgstr "Metadata"
++msgstr "Metagegevens"
+
+ #. module: base
+ #: field:ir.ui.view,arch:0
+ #: field:ir.ui.view.custom,arch:0
+ msgid "View Architecture"
-msgstr "Hiërargie Bekijken"
-
-#. module: base
-#: code:addons/addons/base/ir/ir_model.py:0
-#, python-format
-msgid "You can not create this kind of document! (%s)"
-msgstr "U kan dit soort documenten niet creëren! (%s)"
++msgstr "Opbouw weergave"
+
+ #. module: base
-#: wizard_field:module.lang.import,init,code:0
++#: field:base.language.import,code:0
+ msgid "Code (eg:en__US)"
+ msgstr "Code (bijv: nl_BE)"
+
+ #. module: base
+ #: view:workflow:0
++#: view:workflow.activity:0
+ #: field:workflow.activity,wkf_id:0
+ #: field:workflow.instance,wkf_id:0
++#: field:workflow.transition,wkf_id:0
++#: field:workflow.workitem,wkf_id:0
+ msgid "Workflow"
-msgstr ""
++msgstr "Werkschema"
++
++#. module: base
++#: view:partner.sms.send:0
++msgid "SMS - Gateway: clickatell"
++msgstr "SMS - Service : clickatell"
+
+ #. module: base
-#: selection:module.lang.install,init,lang:0
++#: selection:base.language.install,lang:0
+ msgid "Hungarian / Magyar"
-msgstr "Hungarian / Magyar"
++msgstr "Hongaars / Magyar"
++
++#. module: base
++#: selection:ir.model.fields,select_level:0
++msgid "Not Searchable"
++msgstr "Niet zoekbaar"
++
++#. module: base
++#: selection:base.language.install,lang:0
++msgid "Spanish (VE) / Español (VE)"
++msgstr "Spaans (VE) / Spanje (VE)"
+
+ #. module: base
+ #: field:ir.actions.server,wkf_model_id:0
+ msgid "Workflow On"
-msgstr ""
++msgstr "Werkschema op"
++
++#. module: base
++#: field:ir.actions.act_window,display_menu_tip:0
++msgid "Display Menu Tips"
++msgstr "Toon menu tips"
+
+ #. module: base
+ #: view:ir.module.module:0
+ msgid "Created Views"
-msgstr "Aangemaakte Weergaves"
++msgstr "Aangemaakte weergaves"
+
+ #. module: base
-#: view:workflow.activity:0
-msgid "Outgoing transitions"
-msgstr "Uitgaande mutaties"
++#: code:addons/base/ir/ir_model.py:485
++#, python-format
++msgid ""
++"You can not write in this document (%s) ! Be sure your user belongs to one "
++"of these groups: %s."
++msgstr ""
++"U kunt niet schrijven in dit document (%s) ! Controleer of uw gebruiker "
++"behoort bij één van deze groepen: %s."
+
+ #. module: base
-#: selection:ir.report.custom,frequency:0
-msgid "Yearly"
-msgstr "Jaarlijks"
++#: help:ir.model.fields,domain:0
++msgid ""
++"The optional domain to restrict possible values for relationship fields, "
++"specified as a Python expression defining a list of triplets. For example: "
++"[('color','=','red')]"
++msgstr ""
++"Het optionele domein om mogelijke waardes voor relatievelden te beperken, in "
++"de vorm van een Python uitdrukking bestaande uit een lijst van triplets. "
++"Bijvoorbeeld: [('color','=','red')]"
+
+ #. module: base
-#: code:addons/osv/orm.py:0
-#, python-format
-msgid "The unlink method is not implemented on this object !"
-msgstr "De unlink methode is niet in dit object geïmplenteerd !"
++#: field:res.partner,ref:0
++msgid "Reference"
++msgstr "Referentie"
+
+ #. module: base
+ #: field:ir.actions.act_window,target:0
+ msgid "Target Window"
-msgstr "Doelvenster"
-
-#. module: base
-#: model:ir.actions.todo,note:base.config_wizard_simple_view
-msgid ""
-"Choose between the \"Simplified Interface\" or the extended one.\n"
-"If you are testing or using OpenERP for the first time, we suggest you to "
-"use\n"
-"the simplified interface, which has less options and fields but is easier "
-"to\n"
-"understand. You will be able to switch to the extended view later.\n"
-" "
-msgstr ""
-"Kies tussen de \"Eenvoudige Interface\" of de \"Uitgebreide Interface\".\n"
-"Indien u Open ERP wil testen of voor de eerste keer gebruikt, raden\n"
-"wij aan om de eenvoudige interface te kiezen met minder opties en velden\n"
-"maar makkelijker om te begrijpen. U kan later wisselen naar de uitgebreide\n"
-"interface.\n"
-" "
++msgstr "Doel (Venster)"
+
+ #. module: base
-#: field:ir.rule,operand:0
-msgid "Operand"
-msgstr "Invoerwaarde"
++#: code:addons/base/res/res_user.py:507
++#, python-format
++msgid "Warning!"
++msgstr "Waarschuwing!"
+
+ #. module: base
-#: model:res.country,name:base.kr
-msgid "South Korea"
-msgstr "Zuid-Korea"
++#: code:addons/base/ir/ir_model.py:304
++#, python-format
++msgid ""
++"Properties of base fields cannot be altered in this manner! Please modify "
++"them through Python code, preferably through a custom addon!"
++msgstr ""
++"Eigenschappen van basisvelden kunnen niet op deze manier gewijzigd worden! "
++"Wijzigt u deze door middel van Python-code, bij voorkeur in een eigen addon-"
++"module."
+
+ #. module: base
-#: model:ir.actions.act_window,name:base.action_workflow_transition_form
-#: model:ir.ui.menu,name:base.menu_workflow_transition
-#: view:workflow.activity:0
-msgid "Transitions"
-msgstr "Mutaties"
++#: code:addons/osv.py:133
++#, python-format
++msgid "Constraint Error"
++msgstr "Voorwaarde Fout"
+
+ #. module: base
+ #: model:ir.model,name:base.model_ir_ui_view_custom
+ msgid "ir.ui.view.custom"
+ msgstr "ir.ui.view.custom"
+
+ #. module: base
+ #: model:res.country,name:base.sz
+ msgid "Swaziland"
-msgstr "Swaziland"
++msgstr "Swasiland"
+
+ #. module: base
-#: model:ir.model,name:base.model_ir_actions_report_custom
-#: selection:ir.ui.menu,action:0
-msgid "ir.actions.report.custom"
-msgstr "ir.actions.report.custom"
++#: code:addons/orm.py:1993
++#: code:addons/orm.py:3653
++#, python-format
++msgid "created."
++msgstr "gemaakt."
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_CANCEL"
-msgstr "STOCK_CANCEL"
++#: model:res.partner.category,name:base.res_partner_category_woodsuppliers0
++msgid "Wood Suppliers"
++msgstr "Houtleveranciers"
+
+ #. module: base
-#: field:ir.report.custom,sortby:0
-msgid "Sorted By"
-msgstr "Gesorteerd op"
++#: code:addons/base/module/module.py:303
++#, python-format
++msgid ""
++"Some installed modules depend on the module you plan to Uninstall :\n"
++" %s"
++msgstr ""
++"Sommige geïnstalleerde modules zijn afhankelijk van de module die u wilt "
++"verwijderen: \n"
++" %s"
+
+ #. module: base
+ #: field:ir.sequence,number_increment:0
+ msgid "Increment Number"
-msgstr ""
++msgstr "Stapgrootte"
+
+ #. module: base
+ #: model:ir.actions.act_window,name:base.action_res_company_tree
+ #: model:ir.ui.menu,name:base.menu_action_res_company_tree
+ msgid "Company's Structure"
+ msgstr "Bedrijfsstructuur"
+
+ #. module: base
-#: model:ir.model,name:base.model_ir_report_custom_fields
-msgid "ir.report.custom.fields"
-msgstr "ir.report.custom.fields"
++#: selection:base.language.install,lang:0
++msgid "Inuktitut / ᐃᓄᒃᑎᑐᑦ"
++msgstr ""
++
++#. module: base
++#: view:res.partner:0
++msgid "Search Partner"
++msgstr "Zoek relatie"
+
+ #. module: base
-#: code:addons/addons/base/module/wizard/wizard_export_lang.py:0
++#: code:addons/base/res/res_user.py:132
+ #, python-format
-msgid "new"
-msgstr "nieuw"
++msgid "\"smtp_server\" needs to be set to send mails to users"
++msgstr ""
++"\"smtp_server\" moet ingevuld zijn om mails te versturen naar gebruikers"
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_GOTO_TOP"
-msgstr "STOCK_GOTO_TOP"
++#: code:addons/base/module/wizard/base_export_language.py:60
++#, python-format
++msgid "new"
++msgstr "nieuwe"
+
+ #. module: base
-#: field:ir.actions.report.custom,multi:0
+ #: field:ir.actions.report.xml,multi:0
+ msgid "On multiple doc."
-msgstr ""
++msgstr "Op meerdere doc."
+
+ #. module: base
+ #: field:ir.module.category,module_nr:0
+ msgid "Number of Modules"
+ msgstr "Aantal modules"
+
+ #. module: base
++#: help:multi_company.default,company_dest_id:0
++msgid "Company to store the current record"
++msgstr "Bedrijf om het huidige record op te slaan"
++
++#. module: base
+ #: field:res.partner.bank.type.field,size:0
+ msgid "Max. Size"
-msgstr ""
++msgstr "Max. lengte"
+
+ #. module: base
+ #: field:res.partner.address,name:0
+ msgid "Contact Name"
-msgstr "Naam contactpersoon"
++msgstr "Contactnaam"
+
+ #. module: base
-#: code:addons/addons/base/module/wizard/wizard_export_lang.py:0
++#: code:addons/base/module/wizard/base_export_language.py:56
+ #, python-format
+ msgid ""
+ "Save this document to a %s file and edit it with a specific software or a "
+ "text editor. The file encoding is UTF-8."
+ msgstr ""
++"Sla dit document op als een %s bestand en bewerk het met daarvoor bedoelde "
++"software of een tekstverwerker. Het bestand is UTF-8 gecodeerd."
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_DELETE"
-msgstr "STOCK_DELETE"
-
-#. module: base
-#: code:addons/addons/base/ir/ir_model.py:0
-#, python-format
-msgid "Password mismatch !"
-msgstr "Wachtwoord onjuist !"
-
-#. module: base
-#: code:addons/addons/base/module/module.py:0
-#, python-format
-msgid "This url '%s' must provide an html file with links to zip modules"
++#: sql_constraint:res.lang:0
++msgid "The name of the language must be unique !"
+ msgstr ""
-"Deze url: '%s' moet een html bestand bevatten met links naar zip modules."
+
+ #. module: base
+ #: selection:res.request,state:0
+ msgid "active"
-msgstr "actief"
++msgstr ""
+
+ #. module: base
+ #: field:ir.actions.wizard,wiz_name:0
+ msgid "Wizard Name"
-msgstr "Naam Assistent"
-
-#. module: base
-#: view:res.lang:0
-msgid "%y - Year without century as a decimal number [00,99]."
-msgstr "%y - Jaartal zonder eeuw als decimaal getal [00,99]."
-
-#. module: base
-#: selection:maintenance.contract.wizard,state:0
-msgid "Validated"
-msgstr "Gevalideerd"
++msgstr ""
+
+ #. module: base
-#: selection:ir.report.custom.fields,operation:0
-msgid "Get Max"
-msgstr "Haal Max. op"
++#: code:addons/orm.py:2160
++#, python-format
++msgid "Invalid group_by"
++msgstr ""
+
+ #. module: base
+ #: field:res.partner,credit_limit:0
+ msgid "Credit Limit"
+ msgstr ""
+
+ #. module: base
+ #: field:ir.model.data,date_update:0
+ msgid "Update Date"
-msgstr "Update Datum"
++msgstr ""
++
++#. module: base
++#: view:ir.attachment:0
++msgid "Owner"
++msgstr ""
+
+ #. module: base
+ #: field:ir.actions.act_window,src_model:0
+ msgid "Source Object"
-msgstr "Bron Object"
++msgstr ""
+
+ #. module: base
-#: model:ir.actions.act_window,name:base.act_ir_actions_todo_form
+ #: view:ir.actions.todo:0
-#: model:ir.ui.menu,name:base.menu_ir_actions_todo_form
+ msgid "Config Wizard Steps"
-msgstr "Configuratie Wizard Stappen"
++msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_ir_ui_view_sc
+ msgid "ir.ui.view_sc"
-msgstr "ir.ui.view_sc"
++msgstr ""
+
+ #. module: base
-#: field:ir.model.access,group_id:0
-#: field:ir.rule,rule_group:0
-msgid "Group"
-msgstr "Groep"
++#: field:res.widget.user,widget_id:0
++#: field:res.widget.wizard,widgets_list:0
++msgid "Widget"
++msgstr ""
+
+ #. module: base
-#: view:wizard.module.lang.export:0
-msgid "To browse official translations, you can visit this link: "
-msgstr "Om de officiele vertalingen te bekijken kun je deze link bezoeken: "
++#: view:ir.model.access:0
++#: field:ir.model.access,group_id:0
++#: view:res.config.users:0
++msgid "Group"
++msgstr ""
+
+ #. module: base
+ #: field:ir.exports.line,name:0
+ #: field:ir.translation,name:0
+ #: field:res.partner.bank.type.field,name:0
+ msgid "Field Name"
-msgstr "Veldnaam"
-
-#. module: base
-#: model:ir.actions.act_window,name:base.open_module_tree_uninstall
-#: model:ir.ui.menu,name:base.menu_module_tree_uninstall
-msgid "Uninstalled modules"
-msgstr "Ongeïnstalleerde modules"
++msgstr ""
+
+ #. module: base
+ #: wizard_view:server.action.create,init:0
+ #: wizard_field:server.action.create,init,type:0
+ msgid "Select Action Type"
-msgstr "Selecteer actie type"
-
-#. module: base
-#: selection:ir.actions.todo,type:0
-msgid "Configure"
-msgstr "Configureren"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.tv
+ msgid "Tuvalu"
-msgstr "Tuvalu"
++msgstr ""
+
+ #. module: base
+ #: selection:ir.model,state:0
-#: selection:ir.model.grid,state:0
+ msgid "Custom Object"
-msgstr "Aangepast Object"
++msgstr ""
+
+ #. module: base
+ #: field:res.lang,date_format:0
+ msgid "Date Format"
-msgstr "Datum Format"
++msgstr ""
+
+ #. module: base
+ #: field:res.bank,email:0
+ #: field:res.partner.address,email:0
+ msgid "E-Mail"
-msgstr "E-mail"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.an
+ msgid "Netherlands Antilles"
-msgstr "Nederlandse Antillen"
++msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/res/res_user.py:0
++#: code:addons/base/res/res_user.py:389
+ #, python-format
+ msgid ""
+ "You can not remove the admin user as it is used internally for resources "
+ "created by OpenERP (updates, module installation, ...)"
+ msgstr ""
-"U kunt gebruiker 'admin' niet verwijderen. Deze wordt gebruikt om interne "
-"handelingen zoals updates, module installaties, enz. uit te voeren."
+
+ #. module: base
+ #: model:res.country,name:base.gf
+ msgid "French Guyana"
-msgstr "Frans Guinea"
++msgstr ""
++
++#. module: base
++#: selection:base.language.install,lang:0
++msgid "Greek / Ελληνικά"
++msgstr ""
+
+ #. module: base
-#: selection:module.lang.install,init,lang:0
++#: selection:base.language.install,lang:0
+ msgid "Bosnian / bosanski jezik"
-msgstr "Bosnië"
++msgstr ""
+
+ #. module: base
+ #: help:ir.actions.report.xml,attachment_use:0
+ msgid ""
+ "If you check this, then the second time the user prints with same attachment "
+ "name, it returns the previous report."
+ msgstr ""
-"Als u dit aanvinkt, dan wordt de tweede keer dat de gebruiker het rapport "
-"met dezelfde bijlagenaam het vorige rapport gebruikt."
+
+ #. module: base
-#: code:addons/osv/orm.py:0
++#: code:addons/orm.py:904
+ #, python-format
+ msgid "The read method is not implemented on this object !"
-msgstr "De read methode is niet in dit object geïmplementeerd !"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_MEDIA_REWIND"
-msgstr "STOCK_MEDIA_REWIND"
++#: help:res.lang,iso_code:0
++msgid "This ISO code is the name of po files to use for translations"
++msgstr ""
++
++#. module: base
++#: view:base.module.upgrade:0
++msgid "Your system will be updated."
++msgstr ""
+
+ #. module: base
+ #: field:ir.actions.todo,note:0
++#: selection:ir.property,type:0
+ msgid "Text"
-msgstr "Tekst"
++msgstr ""
+
+ #. module: base
+ #: field:res.country,name:0
+ msgid "Country Name"
-msgstr "Land"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.co
+ msgid "Colombia"
-msgstr "Colombia"
++msgstr ""
+
+ #. module: base
+ #: view:ir.module.module:0
+ msgid "Schedule Upgrade"
-msgstr "Upgrade Plannen"
-
-#. module: base
-#: code:addons/service/web_services.py:0
-#, python-format
-msgid ""
-"''\n"
-"\n"
-"OpenERP is an ERP+CRM program for small and medium businesses.\n"
-"\n"
-"The whole source code is distributed under the terms of the\n"
-"GNU Public Licence.\n"
-"\n"
-"(c) 2003-TODAY, Fabien Pinckaers - Tiny sprl''"
+ msgstr ""
+
+ #. module: base
-#: code:addons/osv/orm.py:0
++#: code:addons/orm.py:838
+ #, python-format
+ msgid "Key/value '%s' not found in selection field '%s'"
+ msgstr ""
+
+ #. module: base
+ #: help:res.country,code:0
+ msgid ""
+ "The ISO country code in two chars.\n"
+ "You can use this field for quick search."
+ msgstr ""
-"De ISO landcode in 2 tekens.\n"
-"U kunt dit veld gebruiken voor snel zoeken."
+
+ #. module: base
+ #: model:res.country,name:base.pw
+ msgid "Palau"
-msgstr "Palau"
++msgstr ""
+
+ #. module: base
+ #: view:res.partner:0
+ msgid "Sales & Purchases"
-msgstr "Verkopen & Inkopen"
++msgstr ""
+
+ #. module: base
-#: view:ir.actions.wizard:0
-#: field:wizard.ir.model.menu.create.line,wizard_id:0
-msgid "Wizard"
-msgstr "Assistent"
++#: view:ir.translation:0
++msgid "Untranslated"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_CUT"
-msgstr "STOCK_CUT"
++#: help:ir.actions.act_window,context:0
++msgid ""
++"Context dictionary as Python expression, empty by default (Default: {})"
++msgstr ""
+
+ #. module: base
+ #: model:ir.actions.act_window,name:base.ir_action_wizard
+ #: view:ir.actions.wizard:0
+ #: model:ir.ui.menu,name:base.menu_ir_action_wizard
+ msgid "Wizards"
-msgstr "Assistenten"
++msgstr ""
+
+ #. module: base
-#: selection:res.config.view,view:0
-msgid "Extended Interface"
-msgstr "Uitgebreide Interface"
++#: model:res.partner.category,name:base.res_partner_category_miscellaneoussuppliers0
++msgid "Miscellaneous Suppliers"
++msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/ir/ir_model.py:0
++#: code:addons/base/ir/ir_model.py:255
+ #, python-format
+ msgid "Custom fields must have a name that starts with 'x_' !"
-msgstr "Aangepaste velden moet een naam hebben die beginnen met 'x_'!"
++msgstr ""
+
+ #. module: base
+ #: help:ir.actions.server,action_id:0
+ msgid "Select the Action Window, Report, Wizard to be executed."
-msgstr "Kies het Actievenster, Rapport of Assistent die u wilt uitvoeren"
++msgstr ""
+
+ #. module: base
-#: view:wizard.module.lang.export:0
++#: view:res.config.users:0
++msgid "New User"
++msgstr ""
++
++#. module: base
++#: view:base.language.export:0
+ msgid "Export done"
-msgstr "Export voltooid"
++msgstr ""
+
+ #. module: base
+ #: view:ir.model:0
+ msgid "Model Description"
-msgstr "Model Omschrijving"
++msgstr ""
++
++#. module: base
++#: help:ir.actions.act_window,src_model:0
++msgid ""
++"Optional model name of the objects on which this action should be visible"
++msgstr ""
+
+ #. module: base
+ #: field:workflow.transition,trigger_expr_id:0
+ msgid "Trigger Expression"
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.jo
+ msgid "Jordan"
-msgstr "Jordanië"
++msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/ir/ir_model.py:0
-#, python-format
-msgid "You can not remove the model '%s' !"
-msgstr "Het kunt het model '%s' niet verwijderen!"
++#: view:ir.module.module:0
++msgid "Certified"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.er
+ msgid "Eritrea"
-msgstr "Eritrea"
++msgstr ""
+
+ #. module: base
-#: view:res.config.view:0
-msgid "Configure simple view"
-msgstr "Eenvoudige weergave configureren"
++#: view:res.config:0
++#: view:res.config.installer:0
++msgid "description"
++msgstr ""
+
+ #. module: base
-#: selection:module.lang.install,init,lang:0
-msgid "Bulgarian / български"
++#: model:ir.ui.menu,name:base.menu_base_action_rule
++msgid "Automated Actions"
+ msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_ir_actions_actions
+ msgid "ir.actions.actions"
-msgstr "ir.actions.actions"
++msgstr ""
++
++#. module: base
++#: view:partner.wizard.ean.check:0
++msgid "Want to check Ean ? "
++msgstr ""
++
++#. module: base
++#: field:ir.values,key2:0
++msgid "Event Type"
++msgstr ""
+
+ #. module: base
-#: selection:ir.report.custom,type:0
-msgid "Bar Chart"
-msgstr "Staafgrafiek"
++#: view:base.language.export:0
++msgid ""
++"OpenERP translations (core, modules, clients) are managed through "
++"Launchpad.net, our open source project management facility. We use their "
++"online interface to synchronize all translations efforts."
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_DIALOG_ERROR"
-msgstr "STOCK_DIALOG_ERROR"
++#: field:res.partner,title:0
++msgid "Partner Form"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_INDEX"
-msgstr "STOCK_INDEX"
++#: selection:base.language.install,lang:0
++msgid "Swedish / svenska"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.rs
+ msgid "Serbia"
-msgstr "Servië"
++msgstr ""
+
+ #. module: base
+ #: selection:ir.translation,type:0
+ msgid "Wizard View"
-msgstr "Assistent Weergave"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.kh
+ msgid "Cambodia, Kingdom of"
-msgstr "Cambodja"
++msgstr ""
+
+ #. module: base
+ #: model:ir.actions.act_window,name:base.ir_sequence_form
+ #: view:ir.sequence:0
+ #: model:ir.ui.menu,name:base.menu_ir_sequence_form
+ #: model:ir.ui.menu,name:base.next_id_5
+ msgid "Sequences"
-msgstr "Volgorden"
++msgstr ""
++
++#. module: base
++#: model:ir.model,name:base.model_base_language_import
++msgid "Language Import"
++msgstr ""
++
++#. module: base
++#: model:ir.model,name:base.model_res_config_users
++msgid "res.config.users"
++msgstr ""
++
++#. module: base
++#: selection:base.language.install,lang:0
++msgid "Albanian / Shqip"
++msgstr ""
++
++#. module: base
++#: model:ir.ui.menu,name:base.menu_crm_config_opportunity
++msgid "Opportunities"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_DIALOG_QUESTION"
-msgstr "STOCK_DIALOG_QUESTION"
++#: model:ir.model,name:base.model_base_language_export
++msgid "base.language.export"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.pg
+ msgid "Papua New Guinea"
-msgstr "Papua Nieuw Guinea"
++msgstr ""
++
++#. module: base
++#: help:ir.actions.report.xml,report_type:0
++msgid "Report Type, e.g. pdf, html, raw, sxw, odt, html2html, mako2html, ..."
++msgstr ""
+
+ #. module: base
+ #: model:res.partner.category,name:base.res_partner_category_4
+ msgid "Basic Partner"
-msgstr "Basis Relatie"
++msgstr ""
+
+ #. module: base
-#: rml:ir.module.reference:0
++#: report:ir.module.reference.graph:0
+ msgid ","
-msgstr ","
++msgstr ""
++
++#. module: base
++#: view:res.partner:0
++msgid "My Partners"
++msgstr ""
++
++#. module: base
++#: view:ir.actions.report.xml:0
++msgid "XML Report"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.es
+ msgid "Spain"
-msgstr "Spanje"
++msgstr ""
+
+ #. module: base
-#: wizard_view:module.upgrade,end:0
-#: wizard_view:module.upgrade,start:0
-msgid "You may have to reinstall some language pack."
-msgstr "Het kan nodig zijn om sommige vertalingen te her-installeren."
++#: model:ir.ui.menu,name:base.menu_translation_export
++msgid "Import / Export"
++msgstr ""
++
++#. module: base
++#: help:ir.actions.act_window,domain:0
++msgid ""
++"Optional domain filtering of the destination data, as a Python expression"
++msgstr ""
++
++#. module: base
++#: model:ir.actions.act_window,name:base.action_view_base_module_upgrade
++#: model:ir.model,name:base.model_base_module_upgrade
++msgid "Module Upgrade"
++msgstr ""
++
++#. module: base
++#: view:res.config.users:0
++msgid ""
++"Groups are used to define access rights on objects and the visibility of "
++"screens and menus"
++msgstr ""
++
++#. module: base
++#: selection:base.language.install,lang:0
++msgid "Spanish (UY) / Español (UY)"
++msgstr ""
+
+ #. module: base
++#: field:res.partner,mobile:0
+ #: field:res.partner.address,mobile:0
+ msgid "Mobile"
-msgstr "Mobiel"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.om
+ msgid "Oman"
-msgstr "Oman"
++msgstr ""
+
+ #. module: base
+ #: model:ir.actions.act_window,name:base.action_payterm_form
+ #: model:ir.model,name:base.model_res_payterm
+ msgid "Payment term"
-msgstr "Betalingstermijn"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.nu
+ msgid "Niue"
-msgstr "Niue"
++msgstr ""
+
+ #. module: base
+ #: selection:ir.cron,interval_type:0
+ msgid "Work Days"
-msgstr "Werkdagen"
++msgstr ""
+
+ #. module: base
-#: help:ir.values,action_id:0
-msgid "This field is not used, it only helps you to select the right action."
++#: selection:ir.module.module,license:0
++msgid "Other OSI Approved Licence"
+ msgstr ""
-"Dit veld wordt niet gebruikt, het helpt u alleen de juiste actie te kiezen."
+
+ #. module: base
-#: model:ir.actions.act_window,name:base.act_menu_create
-#: view:wizard.ir.model.menu.create:0
-msgid "Create Menu"
-msgstr "Menu Aanmaken"
++#: help:res.config.users,context_lang:0
++#: help:res.users,context_lang:0
++msgid ""
++"Sets the language for the user's user interface, when UI translations are "
++"available"
++msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.in
-msgid "India"
-msgstr "India"
++#: code:addons/orm.py:1043
++#, python-format
++msgid "The unlink method is not implemented on this object !"
++msgstr ""
++
++#. module: base
++#: model:ir.actions.act_window,name:base.act_menu_create
++#: view:wizard.ir.model.menu.create:0
++msgid "Create Menu"
++msgstr ""
++
++#. module: base
++#: model:res.country,name:base.in
++msgid "India"
++msgstr ""
+
+ #. module: base
-#: model:ir.model,name:base.model_maintenance_contract_module
-msgid "maintenance contract modules"
-msgstr "onderhoudscontract modules"
++#: model:ir.actions.act_window,name:base.res_request_link-act
++#: model:ir.ui.menu,name:base.menu_res_request_link_act
++msgid "Request Reference Types"
++msgstr ""
+
+ #. module: base
+ #: view:ir.values:0
+ msgid "client_action_multi, client_action_relate"
-msgstr "client_action_multi, client_action_relate"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.ad
+ msgid "Andorra, Principality of"
-msgstr "Andorra"
++msgstr ""
+
+ #. module: base
+ #: field:ir.module.category,child_ids:0
+ #: field:res.partner.category,child_ids:0
+ msgid "Child Categories"
-msgstr "Onderliggende categorieën"
++msgstr ""
+
+ #. module: base
-#: selection:wizard.module.lang.export,format:0
-msgid "TGZ Archive"
-msgstr "TGZ archiefbestand"
++#: model:ir.model,name:base.model_ir_config_parameter
++msgid "ir.config_parameter"
++msgstr ""
+
+ #. module: base
-#: field:res.partner.som,factor:0
-msgid "Factor"
-msgstr "Factor"
++#: selection:base.language.export,format:0
++msgid "TGZ Archive"
++msgstr ""
+
+ #. module: base
+ #: view:res.lang:0
+ msgid "%B - Full month name."
-msgstr "%B - Volledige naam van de maand."
++msgstr ""
+
+ #. module: base
-#: field:ir.actions.report.xml,report_type:0
-#: field:ir.actions.todo,type:0
++#: view:ir.attachment:0
++#: field:ir.attachment,type:0
++#: field:ir.model,state:0
++#: field:ir.model.fields,state:0
++#: field:ir.property,type:0
+ #: field:ir.server.object.lines,type:0
+ #: field:ir.translation,type:0
++#: view:ir.ui.view:0
++#: view:ir.values:0
+ #: field:ir.values,key:0
+ #: view:res.partner:0
++#: view:res.partner.address:0
+ msgid "Type"
-msgstr "Soort"
-
-#. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_FILE"
-msgstr "STOCK_FILE"
++msgstr ""
+
+ #. module: base
-#: field:ir.report.custom.fields,field_child2:0
-msgid "Field child2"
++#: code:addons/orm.py:210
++#, python-format
++msgid ""
++"Language with code \"%s\" is not defined in your system !\n"
++"Define it through the Administration menu."
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.gu
+ msgid "Guam (USA)"
-msgstr "Guam (VS)"
-
-#. module: base
-#: model:ir.model,name:base.model_ir_model_grid
-msgid "Objects Security Grid"
-msgstr "Object Veiligheidspatroon"
-
-#. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_GO_DOWN"
-msgstr "STOCK_GO_DOWN"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_OK"
-msgstr "STOCK_OK"
++#: model:ir.ui.menu,name:base.menu_hr_project
++msgid "Human Resources Dashboard"
++msgstr ""
+
+ #. module: base
-#: field:ir.actions.act_window.view,act_window_id:0
-#: view:ir.actions.actions:0
-#: field:ir.actions.todo,action_id:0
-#: field:ir.ui.menu,action:0
-#: field:ir.values,action_id:0
-#: selection:ir.values,key:0
-msgid "Action"
-msgstr "Actie"
++#: code:addons/base/res/res_user.py:507
++#, python-format
++msgid "Setting empty passwords is not allowed for security reasons!"
++msgstr ""
+
+ #. module: base
+ #: selection:ir.actions.server,state:0
+ #: selection:workflow.activity,kind:0
+ msgid "Dummy"
+ msgstr ""
+
+ #. module: base
+ #: constraint:ir.ui.view:0
+ msgid "Invalid XML for View Architecture!"
-msgstr "Ongeldige XML voor weergave opbouw"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.ky
+ msgid "Cayman Islands"
-msgstr "Kaaimaneilanden"
++msgstr ""
++
++#. module: base
++#: model:res.country,name:base.kr
++msgid "South Korea"
++msgstr ""
++
++#. module: base
++#: model:ir.actions.act_window,name:base.action_workflow_transition_form
++#: model:ir.ui.menu,name:base.menu_workflow_transition
++#: view:workflow.activity:0
++msgid "Transitions"
++msgstr ""
+
+ #. module: base
-#: code:addons/report/custom.py:0
++#: code:addons/orm.py:4020
+ #, python-format
-msgid ""
-"The sum of the data (2nd field) is null.\n"
-"We can't draw a pie chart !"
++msgid "Record #%d of %s not found, cannot copy!"
+ msgstr ""
-"De som van de gegevens (2de veld) is nul.\n"
-"Het is onmogelijk om een taart-diagram te tekenen."
+
+ #. module: base
-#: field:ir.sequence,name:0
-#: field:ir.sequence.type,name:0
-msgid "Sequence Name"
++#: field:ir.module.module,contributors:0
++msgid "Contributors"
+ msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.td
-msgid "Chad"
-msgstr "Tsjaad"
++#: selection:ir.property,type:0
++msgid "Char"
++msgstr ""
+
+ #. module: base
-#: selection:module.lang.install,init,lang:0
++#: model:ir.actions.act_window,name:base.action_publisher_warranty_contract_form
++#: model:ir.ui.menu,name:base.menu_publisher_warranty_contract
++msgid "Contracts"
++msgstr ""
++
++#. module: base
++#: selection:base.language.install,lang:0
+ msgid "Spanish (AR) / Español (AR)"
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.ug
+ msgid "Uganda"
-msgstr "Oeganda"
++msgstr ""
++
++#. module: base
++#: field:ir.model.access,perm_unlink:0
++msgid "Delete Access"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.ne
+ msgid "Niger"
-msgstr "Niger"
++msgstr ""
++
++#. module: base
++#: selection:base.language.install,lang:0
++msgid "Chinese (HK)"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.ba
+ msgid "Bosnia-Herzegovina"
-msgstr "Bosnië-Herzegovina"
++msgstr ""
+
+ #. module: base
-#: field:ir.report.custom.fields,alignment:0
-msgid "Alignment"
-msgstr "Uitlijning"
++#: view:base.language.export:0
++msgid ""
++"To improve or expand the official translations, you should use directly "
++"Lauchpad's web interface (Rosetta). If you need to perform mass translation, "
++"Launchpad also allows uploading full .po files at once"
++msgstr ""
+
+ #. module: base
-#: selection:ir.rule,operator:0
-msgid ">="
-msgstr ">="
++#: selection:base.language.install,lang:0
++msgid "Spanish (GT) / Español (GT)"
++msgstr ""
+
+ #. module: base
+ #: view:res.lang:0
+ msgid ""
+ "%W - Week number of the year (Monday as the first day of the week) as a "
+ "decimal number [00,53]. All days in a new year preceding the first Monday "
+ "are considered to be in week 0."
+ msgstr ""
-"%W - Weeknummer van het jaar (Maandag als eerste dag van de week) als "
-"decimaal nummer [00,53]. Alle dagen in het nieuwe jaar, voor de eerste "
-"maandag vallen in week 0."
-
-#. module: base
-#: field:res.partner.event,planned_cost:0
-msgid "Planned Cost"
-msgstr "Geraamde Kosten"
-
-#. module: base
-#: model:ir.model,name:base.model_ir_model_config
-msgid "ir.model.config"
-msgstr "ir.model.config"
+
+ #. module: base
+ #: field:ir.module.module,website:0
+ #: field:res.partner,website:0
+ msgid "Website"
-msgstr "Website"
-
-#. module: base
-#: view:ir.module.repository:0
-msgid "Repository"
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.gs
+ msgid "S. Georgia & S. Sandwich Isls."
+ msgstr ""
+
+ #. module: base
+ #: field:ir.actions.url,url:0
+ msgid "Action URL"
-msgstr "Actie URL"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_JUSTIFY_FILL"
-msgstr "STOCK_JUSTIFY_FILL"
++#: field:base.module.import,module_name:0
++msgid "Module Name"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.mh
+ msgid "Marshall Islands"
-msgstr "Marshalleilanden"
++msgstr ""
++
++#. module: base
++#: code:addons/base/ir/ir_model.py:328
++#, python-format
++msgid "Changing the model of a field is forbidden!"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.ht
+ msgid "Haiti"
-msgstr "Haïti"
++msgstr ""
+
+ #. module: base
-#: selection:ir.translation,type:0
-msgid "RML"
-msgstr "RML"
++#: view:ir.ui.view:0
++#: selection:ir.ui.view,type:0
++msgid "Search"
++msgstr ""
+
+ #. module: base
-#: model:ir.actions.act_window,name:base.action_partner_category
-#: model:ir.ui.menu,name:base.menu_partner_category_main
-msgid "Partners by Categories"
-msgstr "Relaties per Categorie"
++#: code:addons/osv.py:136
++#, python-format
++msgid ""
++"The operation cannot be completed, probably due to the following:\n"
++"- deletion: you may be trying to delete a record while other records still "
++"reference it\n"
++"- creation/update: a mandatory field is not correctly set"
++msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/ir/ir_report_custom.py:0
-#, python-format
-msgid "Pie charts need exactly two fields"
++#: view:ir.rule:0
++msgid ""
++"2. Group-specific rules are combined together with a logical AND operator"
+ msgstr ""
+
+ #. module: base
-#: code:addons/osv/orm.py:0
++#: code:addons/base/res/res_user.py:206
+ #, python-format
-msgid "Id is not the same than existing one: %s"
++msgid "Operation Canceled"
+ msgstr ""
+
+ #. module: base
-#: help:wizard.module.lang.export,lang:0
++#: help:base.language.export,lang:0
+ msgid "To export a new language, do not select a language."
+ msgstr ""
+
+ #. module: base
++#: view:res.request:0
++msgid "Request Date"
++msgstr ""
++
++#. module: base
++#: model:ir.ui.menu,name:base.menu_hr_dasboard
++msgid "Dashboard"
++msgstr ""
++
++#. module: base
++#: model:ir.ui.menu,name:base.menu_purchase_root
++msgid "Purchases"
++msgstr ""
++
++#. module: base
+ #: model:res.country,name:base.md
+ msgid "Moldavia"
-msgstr "Moldavië"
++msgstr ""
+
+ #. module: base
+ #: view:ir.module.module:0
+ msgid "Features"
+ msgstr ""
+
+ #. module: base
-#: field:ir.report.custom,frequency:0
-msgid "Frequency"
-msgstr ""
-
-#. module: base
-#: field:ir.report.custom.fields,fc0_op:0
-#: field:ir.report.custom.fields,fc1_op:0
-#: field:ir.report.custom.fields,fc2_op:0
-#: field:ir.report.custom.fields,fc3_op:0
-msgid "Relation"
++#: view:ir.module.module:0
++#: report:ir.module.reference.graph:0
++msgid "Version"
+ msgstr ""
+
+ #. module: base
++#: view:ir.model.access:0
+ #: field:ir.model.access,perm_read:0
++#: view:ir.rule:0
+ msgid "Read Access"
+ msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_ir_exports
+ msgid "ir.exports"
-msgstr "ir.exports"
-
-#. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_MISSING_IMAGE"
-msgstr "STOCK_MISSING_IMAGE"
-
-#. module: base
-#: view:res.users:0
-msgid "Define New Users"
+ msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_REMOVE"
-msgstr "STOCK_REMOVE"
++#: code:addons/base/module/wizard/base_update_translations.py:38
++#, python-format
++msgid "No language with code \"%s\" exists"
++msgstr ""
+
+ #. module: base
-#: selection:ir.actions.report.xml,report_type:0
-msgid "raw"
++#: code:addons/base/publisher_warranty/publisher_warranty.py:163
++#, python-format
++msgid "Error during communication with the publisher warranty server."
+ msgstr ""
+
+ #. module: base
+ #: help:ir.actions.server,email:0
+ msgid ""
+ "Provides the fields that will be used to fetch the email address, e.g. when "
+ "you select the invoice, then `object.invoice_address_id.email` is the field "
+ "which gives the correct address"
+ msgstr ""
+
+ #. module: base
-#: field:res.roles,name:0
-msgid "Role Name"
++#: view:res.lang:0
++msgid "%Y - Year with century."
+ msgstr ""
+
+ #. module: base
-#: field:res.partner,user_id:0
-msgid "Dedicated Salesman"
++#: report:ir.module.reference.graph:0
++msgid "-"
+ msgstr ""
+
+ #. module: base
-#: rml:ir.module.reference:0
-msgid "-"
-msgstr "-"
++#: view:publisher_warranty.contract.wizard:0
++msgid ""
++"This wizard helps you register a publisher warranty contract in your OpenERP "
++"system. After the contract has been registered, you will be able to send "
++"issues directly to OpenERP."
++msgstr ""
++
++#. module: base
++#: code:addons/orm.py:1744
++#, python-format
++msgid "The search method is not implemented on this object !"
++msgstr ""
++
++#. module: base
++#: view:wizard.ir.model.menu.create:0
++msgid "Create _Menu"
++msgstr ""
+
+ #. module: base
+ #: field:res.payterm,name:0
+ msgid "Payment Term (short name)"
+ msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_res_bank
+ #: view:res.bank:0
+ #: field:res.partner.bank,bank:0
+ msgid "Bank"
-msgstr "Bank"
++msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_ir_exports_line
+ msgid "ir.exports.line"
-msgstr "ir.exports.line"
++msgstr ""
++
++#. module: base
++#: help:base.language.install,overwrite:0
++msgid ""
++"If you check this box, your customized translations will be overwritten and "
++"replaced by the official ones."
++msgstr ""
++
++#. module: base
++#: field:ir.actions.report.xml,report_rml:0
++msgid "Main report file path"
++msgstr ""
+
+ #. module: base
++#: model:ir.actions.act_window,name:base.ir_action_report_xml
+ #: field:ir.module.module,reports_by_module:0
++#: model:ir.ui.menu,name:base.menu_ir_action_report_xml
+ msgid "Reports"
-msgstr "Rapporten"
++msgstr ""
++
++#. module: base
++#: help:ir.actions.act_window.view,multi:0
++#: help:ir.actions.report.xml,multi:0
++msgid ""
++"If set to true, the action will not be displayed on the right toolbar of a "
++"form view."
++msgstr ""
+
+ #. module: base
+ #: field:workflow,on_create:0
+ msgid "On Create"
-msgstr "Bij Aanmaken"
++msgstr ""
+
+ #. module: base
-#: wizard_view:base.module.import,init:0
-msgid "Please give your module .ZIP file to import."
++#: code:addons/base/ir/ir_model.py:607
++#, python-format
++msgid ""
++"'%s' contains too many dots. XML ids should not contain dots ! These are "
++"used to refer to other modules data, as in module.reference_id"
+ msgstr ""
+
+ #. module: base
-#: wizard_field:res.partner.sms_send,init,user:0
++#: field:partner.sms.send,user:0
++#: field:res.config.users,login:0
+ #: field:res.users,login:0
+ msgid "Login"
+ msgstr ""
+
+ #. module: base
-#: model:ir.model,name:base.model_ir_sequence_type
-msgid "ir.sequence.type"
-msgstr "ir.sequence.type"
-
-#. module: base
-#: view:maintenance.contract:0
-#: field:maintenance.contract,module_ids:0
-msgid "Covered Modules"
++#: view:ir.actions.server:0
++msgid ""
++"Access all the fields related to the current object using expressions, i.e. "
++"object.partner_id.name "
+ msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_COPY"
-msgstr "STOCK_COPY"
++#: model:ir.model,name:base.model_res_country_state
++msgid "Country state"
++msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/ir/ir_model.py:0
-#, python-format
-msgid ""
-"Model %s Does not Exist !"
++#: selection:ir.property,type:0
++msgid "Float"
+ msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_res_request_link
+ msgid "res.request.link"
-msgstr "res.request.link"
++msgstr ""
+
+ #. module: base
-#: wizard_button:module.module.update,init,update:0
-msgid "Check new modules"
++#: field:ir.actions.wizard,name:0
++msgid "Wizard Info"
+ msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.km
-msgid "Comoros"
++#: view:base.language.export:0
++#: model:ir.actions.act_window,name:base.action_wizard_lang_export
++#: model:ir.ui.menu,name:base.menu_wizard_lang_export
++msgid "Export Translation"
+ msgstr ""
+
+ #. module: base
-#: model:ir.actions.act_window,name:base.action_server_action
-#: view:ir.actions.server:0
-#: model:ir.ui.menu,name:base.menu_server_action
-msgid "Server Actions"
++#: help:res.log,secondary:0
++msgid ""
++"Do not display this log if it belongs to the same object the user is working "
++"on"
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.tp
+ msgid "East Timor"
-msgstr "Oost-Timor"
++msgstr ""
+
+ #. module: base
-#: view:ir.rule:0
-msgid "Simple domain setup"
++#: model:res.company,follow_up_msg:base.main_company
++msgid ""
++"Date : %(date)s\n"
++"\n"
++"Dear %(partner_name)s,\n"
++"\n"
++"Please find in attachment a reminder of all your unpaid invoices, for a "
++"total amount due of:\n"
++"\n"
++"%(followup_amount).2f %(company_currency)s\n"
++"\n"
++"Thanks,\n"
++"--\n"
++"%(user_signature)s\n"
++"%(company_name)s"
+ msgstr ""
+
+ #. module: base
+ #: field:res.currency,accuracy:0
+ msgid "Computational Accuracy"
+ msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.kg
-msgid "Kyrgyz Republic (Kyrgyzstan)"
++#: selection:base.language.install,lang:0
++msgid "Sinhalese / සිංහල"
+ msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_wizard_ir_model_menu_create_line
+ msgid "wizard.ir.model.menu.create.line"
-msgstr "wizard.ir.model.menu.create.line"
++msgstr ""
+
+ #. module: base
+ #: field:ir.attachment,res_id:0
+ msgid "Attached ID"
+ msgstr ""
+
+ #. module: base
+ #: view:ir.sequence:0
+ msgid "Day: %(day)s"
-msgstr "Dag: %(day)s"
-
-#. module: base
-#: code:addons/addons/base/ir/ir_model.py:0
-#, python-format
-msgid "You can not read this document! (%s)"
-msgstr ""
-
-#. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_FIND_AND_REPLACE"
-msgstr "STOCK_FIND_AND_REPLACE"
-
-#. module: base
-#: code:addons/osv/orm.py:0
-#, python-format
-msgid "Relation not found: %s on '%s'"
+ msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "terp-crm"
-msgstr "terp-crm"
-
-#. module: base
+ #: model:res.country,name:base.mv
+ msgid "Maldives"
-msgstr "Malediven"
++msgstr ""
+
+ #. module: base
+ #: help:ir.values,res_id:0
+ msgid "Keep 0 if the action must appear on all resources."
+ msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_ir_rule
+ msgid "ir.rule"
-msgstr "ir.rule"
-
-#. module: base
-#: field:ir.report.custom.fields,width:0
-msgid "Fixed Width"
+ msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "terp-calendar"
-msgstr "terp-calendar"
-
-#. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_YES"
-msgstr "STOCK_YES"
++#: selection:ir.cron,interval_type:0
++msgid "Days"
++msgstr ""
+
+ #. module: base
-#: model:ir.actions.act_window,name:base.ir_action_report_custom
-#: model:ir.ui.menu,name:base.menu_ir_action_report_custom
-msgid "Report Custom"
++#: help:ir.actions.server,condition:0
++msgid ""
++"Condition that is to be tested before action is executed, e.g. "
++"object.list_price > object.cost_price"
+ msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.tm
-msgid "Turkmenistan"
-msgstr "Turkmenistan"
++#: code:addons/base/res/partner/partner.py:155
++#: code:addons/base/res/res_company.py:66
++#, python-format
++msgid " (copy)"
++msgstr ""
+
+ #. module: base
+ #: view:res.lang:0
+ msgid "7. %H:%M:%S ==> 18:25:20"
-msgstr "7. %H:%M:%S ==> 18:25:20"
++msgstr ""
+
+ #. module: base
-#: model:ir.actions.act_window,name:base.action_partner_form
-#: model:ir.ui.menu,name:base.menu_base_partner
-#: model:ir.ui.menu,name:base.menu_partner_form
+ #: view:res.partner:0
++#: view:res.partner.category:0
++#: field:res.partner.category,partner_ids:0
+ msgid "Partners"
-msgstr "Relaties"
++msgstr ""
++
++#. module: base
++#: field:res.partner.category,parent_left:0
++msgid "Left parent"
++msgstr ""
++
++#. module: base
++#: model:ir.actions.act_window,name:base.res_widget_act_window
++#: model:ir.ui.menu,name:base.menu_res_widget_act_window
++msgid "Homepage Widgets"
++msgstr ""
+
+ #. module: base
+ #: help:ir.actions.server,message:0
+ msgid ""
+ "Specify the message. You can use the fields from the object. e.g. `Dear [[ "
+ "object.partner_id.name ]]`"
+ msgstr ""
+
+ #. module: base
+ #: field:ir.attachment,res_model:0
+ msgid "Attached Model"
+ msgstr ""
+
+ #. module: base
-#: field:ir.actions.server,trigger_name:0
-msgid "Trigger Name"
++#: view:ir.rule:0
++msgid "Domain Setup"
++msgstr ""
++
++#. module: base
++#: field:ir.actions.server,trigger_name:0
++msgid "Trigger Name"
+ msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_ir_model_access
+ msgid "ir.model.access"
-msgstr "ir.model.access"
++msgstr ""
+
+ #. module: base
+ #: field:ir.cron,priority:0
-#: field:ir.ui.view,priority:0
+ #: field:res.request,priority:0
+ #: field:res.request.link,priority:0
+ msgid "Priority"
-msgstr "Prioriteit"
++msgstr ""
+
+ #. module: base
+ #: field:workflow.transition,act_from:0
+ msgid "Source Activity"
+ msgstr ""
+
+ #. module: base
+ #: view:ir.sequence:0
+ msgid "Legend (for prefix, suffix)"
+ msgstr ""
+
+ #. module: base
-#: view:res.request:0
-msgid "Reply"
++#: selection:ir.server.object.lines,type:0
++msgid "Formula"
+ msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/res/res_user.py:0
++#: code:addons/base/res/res_user.py:389
+ #, python-format
+ msgid "Can not remove root user!"
+ msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_JUSTIFY_LEFT"
-msgstr "STOCK_JUSTIFY_LEFT"
-
-#. module: base
+ #: model:res.country,name:base.mw
+ msgid "Malawi"
-msgstr "Malawi"
++msgstr ""
+
+ #. module: base
-#: field:res.partner.address,type:0
-msgid "Address Type"
++#: code:addons/base/res/res_user.py:51
++#: code:addons/base/res/res_user.py:413
++#, python-format
++msgid "%s (copy)"
+ msgstr ""
+
+ #. module: base
-#: selection:ir.actions.todo,start_on:0
-msgid "Auto"
++#: field:res.partner.address,type:0
++msgid "Address Type"
+ msgstr ""
+
+ #. module: base
-#: view:res.request:0
-msgid "End of Request"
++#: view:ir.ui.menu:0
++msgid "Full Path"
+ msgstr ""
+
+ #. module: base
+ #: view:res.request:0
+ msgid "References"
-msgstr "Referenties"
++msgstr ""
+
+ #. module: base
+ #: view:res.lang:0
+ msgid ""
+ "%U - Week number of the year (Sunday as the first day of the week) as a "
+ "decimal number [00,53]. All days in a new year preceding the first Sunday "
+ "are considered to be in week 0."
+ msgstr ""
-"%U - Weeknummer (Zondag als eerste dag van week) als een decimaal getal "
-"[00,53]. Alle dagen in het nieuwe jaar, voor de eerste zondag, vallen in "
-"week 0."
+
+ #. module: base
-#: wizard_view:module.lang.install,init:0
-msgid "Note that this operation may take a few minutes."
-msgstr "Deze uitvoering kan enige minuten duren."
++#: view:ir.ui.view:0
++msgid "Advanced"
++msgstr ""
++
++#. module: base
++#: model:res.country,name:base.fi
++msgid "Finland"
++msgstr ""
+
+ #. module: base
+ #: selection:ir.actions.act_window,view_type:0
+ #: selection:ir.actions.act_window.view,view_mode:0
++#: view:ir.ui.view:0
+ #: selection:ir.ui.view,type:0
+ #: selection:wizard.ir.model.menu.create.line,view_type:0
+ msgid "Tree"
+ msgstr ""
+
+ #. module: base
-#: view:maintenance.contract.wizard:0
-msgid "Could you check your contract information ?"
-msgstr "Kunt u de contractinformatie controleren ?"
++#: help:res.config.users,password:0
++msgid ""
++"Keep empty if you don't want the user to be able to connect on the system."
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_CLEAR"
-msgstr "STOCK_CLEAR"
++#: view:ir.actions.server:0
++msgid "Create / Write / Copy"
++msgstr ""
+
+ #. module: base
-#: help:res.users,password:0
-msgid ""
-"Keep empty if you don't want the user to be able to connect on the system."
++#: view:base.language.export:0
++msgid "https://help.launchpad.net/Translations"
+ msgstr ""
+
+ #. module: base
+ #: field:ir.actions.act_window,view_mode:0
-#: field:res.config.view,view:0
+ msgid "View Mode"
-msgstr "Weergavemodus"
++msgstr ""
+
+ #. module: base
-#: code:addons/osv/fields.py:0
++#: view:base.language.import:0
++msgid ""
++"When using CSV format, please also check that the first line of your file is "
++"one of the following:"
++msgstr ""
++
++#. module: base
++#: code:addons/fields.py:114
+ #, python-format
+ msgid "Not implemented search_memory method !"
+ msgstr ""
+
+ #. module: base
-#: selection:module.lang.install,init,lang:0
++#: view:res.log:0
++msgid "Logs"
++msgstr ""
++
++#. module: base
++#: selection:base.language.install,lang:0
+ msgid "Spanish / Español"
-msgstr "Spaans / Español"
++msgstr ""
++
++#. module: base
++#: selection:base.language.install,lang:0
++msgid "Korean (KP) / 한국어 (KP)"
++msgstr ""
++
++#. module: base
++#: view:base.module.update:0
++msgid ""
++"This wizard will scan all module repositories on the server side to detect "
++"newly added modules as well as any change to existing modules."
++msgstr ""
+
+ #. module: base
+ #: field:res.company,logo:0
+ msgid "Logo"
-msgstr "Logo"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_PROPERTIES"
-msgstr "STOCK_PROPERTIES"
++#: view:res.partner.address:0
++msgid "Search Contact"
++msgstr ""
++
++#. module: base
++#: view:ir.module.module:0
++msgid "Uninstall (beta)"
++msgstr ""
+
+ #. module: base
+ #: selection:ir.actions.act_window,target:0
+ #: selection:ir.actions.url,target:0
+ msgid "New Window"
-msgstr "Nieuw venster"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.bs
+ msgid "Bahamas"
-msgstr "Bahama's"
-
-#. module: base
-#: selection:res.partner.event,partner_type:0
-msgid "Commercial Prospect"
-msgstr "Commercieel Prospect"
++msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/res/partner/partner.py:0
++#: code:addons/base/res/partner/partner.py:250
+ #, python-format
+ msgid ""
+ "Couldn't generate the next id because some partners have an alphabetic id !"
+ msgstr ""
+
+ #. module: base
+ #: view:ir.attachment:0
+ msgid "Attachment"
-msgstr "Bijlage"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.ie
+ msgid "Ireland"
-msgstr "Ierland"
-
-#. module: base
-#: view:ir.sequence:0
-msgid "Year without century: %(y)s"
-msgstr "Jaartal zonder eeuw: %(y)s"
++msgstr ""
+
+ #. module: base
-#: wizard_field:module.module.update,update,update:0
++#: field:base.module.update,update:0
+ msgid "Number of modules updated"
-msgstr "Aantal modules bewerkt"
++msgstr ""
+
+ #. module: base
-#: code:addons/osv/fields.py:0
++#: code:addons/fields.py:100
+ #, python-format
+ msgid "Not implemented set_memory method !"
+ msgstr ""
+
+ #. module: base
++#: view:workflow.activity:0
++msgid "Workflow Activity"
++msgstr ""
++
++#. module: base
++#: view:ir.rule:0
++msgid ""
++"Example: GLOBAL_RULE_1 AND GLOBAL_RULE_2 AND ( (GROUP_A_RULE_1 AND "
++"GROUP_A_RULE_2) OR (GROUP_B_RULE_1 AND GROUP_B_RULE_2) )"
++msgstr ""
++
++#. module: base
++#: model:ir.actions.act_window,help:base.action_ui_view
++msgid ""
++"Views allows you to personalize each view of OpenERP. You can add new "
++"fields, move fields, rename them or delete the ones that you do not need."
++msgstr ""
++
++#. module: base
+ #: field:ir.actions.act_window,groups_id:0
+ #: model:ir.actions.act_window,name:base.action_res_groups
++#: view:ir.actions.report.xml:0
+ #: field:ir.actions.report.xml,groups_id:0
++#: view:ir.actions.todo:0
+ #: field:ir.actions.todo,groups_id:0
+ #: field:ir.actions.wizard,groups_id:0
++#: view:ir.model:0
+ #: field:ir.model.fields,groups:0
++#: field:ir.rule,groups:0
++#: view:ir.ui.menu:0
+ #: field:ir.ui.menu,groups_id:0
+ #: model:ir.ui.menu,name:base.menu_action_res_groups
++#: field:res.config.users,groups_id:0
+ #: view:res.groups:0
+ #: view:res.users:0
+ #: field:res.users,groups_id:0
+ msgid "Groups"
-msgstr "Groepen"
++msgstr ""
++
++#. module: base
++#: selection:base.language.install,lang:0
++msgid "Spanish (CL) / Español (CL)"
++msgstr ""
++
++#. module: base
++#: view:res.config.users:0
++msgid ""
++"Create additional users and assign them groups that will allow them to have "
++"access to selected functionalities within the system. Click on 'Done' if you "
++"do not wish to add more users at this stage, you can always do this later."
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.bz
+ msgid "Belize"
-msgstr "Belize"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.ge
+ msgid "Georgia"
-msgstr "Georgië"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.pl
+ msgid "Poland"
-msgstr "Polen"
++msgstr ""
++
++#. module: base
++#: help:ir.actions.act_window,view_mode:0
++msgid ""
++"Comma-separated list of allowed view modes, such as 'form', 'tree', "
++"'calendar', etc. (Default: tree,form)"
++msgstr ""
++
++#. module: base
++#: code:addons/orm.py:3147
++#, python-format
++msgid "A document was modified since you last viewed it (%s:%d)"
++msgstr ""
++
++#. module: base
++#: view:workflow:0
++msgid "Workflow Editor"
++msgstr ""
+
+ #. module: base
+ #: selection:ir.module.module,state:0
+ #: selection:ir.module.module.dependency,state:0
+ msgid "To be removed"
-msgstr "Te verwijderen"
++msgstr ""
+
+ #. module: base
-#: view:maintenance.contract.wizard:0
-msgid "Maintenance contract added !"
-msgstr "Onderhoudscontract toegevoegd !"
++#: model:ir.model,name:base.model_ir_sequence
++msgid "ir.sequence"
++msgstr ""
+
+ #. module: base
-#: view:wizard.module.update_translations:0
++#: help:ir.actions.server,expression:0
+ msgid ""
-"This wizard will detect new terms in the application so that you can update "
-"them manually."
++"Enter the field/expression that will return the list. E.g. select the sale "
++"order in Object, and you can have loop on the sales order line. Expression = "
++"`object.order_line`."
+ msgstr ""
-"Deze assistent zal nieuwe termen in de toepassing opsporen zodat deze "
-"handmatig kunnen worden bijgewerkt"
+
+ #. module: base
-#: help:ir.actions.server,expression:0
-msgid "Enter the field/expression that will return the list. E.g. select the sale order in Object, and you can have loop on the sales order line. Expression = `object.order_line`."
++#: field:ir.property,fields_id:0
++#: selection:ir.translation,type:0
++#: field:multi_company.default,field_id:0
++msgid "Field"
+ msgstr ""
+
+ #. module: base
-#: selection:ir.translation,type:0
-msgid "Wizard Field"
-msgstr "Assistent Veld"
++#: view:ir.rule:0
++msgid "Groups (no group = global)"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_SELECT_COLOR"
-msgstr "STOCK_SELECT_COLOR"
++#: model:res.country,name:base.fo
++msgid "Faroe Islands"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_NO"
-msgstr "STOCK_NO"
++#: selection:res.config.users,view:0
++#: selection:res.config.view,view:0
++#: selection:res.users,view:0
++msgid "Simplified"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.st
+ msgid "Saint Tome (Sao Tome) and Principe"
+ msgstr ""
+
+ #. module: base
+ #: selection:res.partner.address,type:0
+ msgid "Invoice"
-msgstr "Factuur"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_REDO"
-msgstr "STOCK_REDO"
++#: selection:base.language.install,lang:0
++msgid "Portugese (BR) / Português (BR)"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.bb
+ msgid "Barbados"
-msgstr "Barbados"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.mg
+ msgid "Madagascar"
-msgstr "Madagascar"
++msgstr ""
+
+ #. module: base
-#: constraint:ir.model:0
++#: code:addons/base/ir/ir_model.py:96
++#, python-format
+ msgid ""
+ "The Object name must start with x_ and not contain any special character !"
+ msgstr ""
-"De objectnaam moet beginnen met x_ en mag geen speciale karakters bevatten !"
++
++#. module: base
++#: field:ir.actions.configuration.wizard,note:0
++msgid "Next Wizard"
++msgstr ""
+
+ #. module: base
+ #: model:ir.actions.act_window,name:base.action_menu_admin
-#: field:ir.report.custom,menu_id:0
+ #: view:ir.ui.menu:0
+ #: field:ir.ui.menu,name:0
+ msgid "Menu"
-msgstr "Menu"
++msgstr ""
+
+ #. module: base
+ #: field:res.currency,rate:0
+ msgid "Current Rate"
-msgstr "Huidige koers"
++msgstr ""
+
+ #. module: base
+ #: field:ir.ui.view.custom,ref_id:0
+ msgid "Original View"
+ msgstr ""
+
+ #. module: base
+ #: view:ir.values:0
+ msgid "Action To Launch"
+ msgstr ""
+
+ #. module: base
+ #: field:ir.actions.url,target:0
+ msgid "Action Target"
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.ai
+ msgid "Anguilla"
+ msgstr ""
+
+ #. module: base
-#: field:ir.model.config,password_check:0
-msgid "Confirmation"
-msgstr "Bevestiging"
-
-#. module: base
-#: code:addons/addons/base/ir/ir_report_custom.py:0
-#, python-format
-msgid "Enter at least one field !"
-msgstr "Er moet tenminste één veld worden ingevuld !"
-
-#. module: base
-#: model:res.country,name:base.ve
-msgid "Venezuela"
-msgstr "Venezuela"
-
-#. module: base
+ #: field:ir.ui.view_sc,name:0
+ msgid "Shortcut Name"
-msgstr "Naam Snelkoppeling"
++msgstr ""
+
+ #. module: base
+ #: help:ir.actions.act_window,limit:0
+ msgid "Default limit for the list view"
-msgstr "Standaard aantal items in lijst-weergave"
++msgstr ""
+
+ #. module: base
+ #: help:ir.actions.server,write_id:0
+ msgid ""
+ "Provide the field name that the record id refers to for the write operation. "
+ "If it is empty it will refer to the active id of the object."
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.zw
+ msgid "Zimbabwe"
-msgstr "Zimbabwe"
++msgstr ""
+
+ #. module: base
-#: model:ir.ui.menu,name:base.menu_translation_export
-msgid "Import / Export"
-msgstr "Import / Export"
++#: view:base.module.update:0
++msgid "Please be patient, as this operation may take a few seconds..."
++msgstr ""
+
+ #. module: base
-#: model:ir.actions.act_window,name:base.action_config_user_form
-#: view:res.users:0
-msgid "Configure User"
-msgstr "Gebruiker Configureren"
++#: help:ir.values,action_id:0
++msgid "This field is not used, it only helps you to select the right action."
++msgstr ""
+
+ #. module: base
+ #: field:ir.actions.server,email:0
+ msgid "Email Address"
-msgstr "E-mailadres"
++msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/ir/ir_model.py:0
-#, python-format
-msgid "You can not write in this document! (%s)"
++#: selection:base.language.install,lang:0
++msgid "French (BE) / Français (BE)"
+ msgstr ""
+
+ #. module: base
+ #: view:ir.actions.server:0
+ #: field:workflow.activity,action_id:0
+ msgid "Server Action"
-msgstr "Server Actie"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.tt
+ msgid "Trinidad and Tobago"
-msgstr "Trinidad en Tobago"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.lv
+ msgid "Latvia"
-msgstr "Letland"
++msgstr ""
+
+ #. module: base
+ #: view:ir.values:0
+ msgid "Values"
-msgstr "Waarden"
++msgstr ""
+
+ #. module: base
+ #: view:ir.actions.server:0
+ msgid "Field Mappings"
+ msgstr ""
+
+ #. module: base
++#: view:base.language.export:0
++msgid "Export Translations"
++msgstr ""
++
++#. module: base
+ #: model:ir.ui.menu,name:base.menu_custom
+ msgid "Customization"
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.py
+ msgid "Paraguay"
-msgstr "Paraguay"
-
-#. module: base
-#: selection:ir.report.custom.fields,alignment:0
-msgid "left"
-msgstr "links"
++msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_ir_actions_act_window_close
+ msgid "ir.actions.act_window_close"
-msgstr "ir.actions.act_window_close"
++msgstr ""
+
+ #. module: base
+ #: field:ir.server.object.lines,col1:0
+ msgid "Destination"
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.lt
+ msgid "Lithuania"
-msgstr "Litouwen"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_PRINT_PREVIEW"
-msgstr "STOCK_PRINT_PREVIEW"
++#: model:ir.actions.act_window,name:base.action_view_partner_clear_ids
++#: model:ir.model,name:base.model_partner_clear_ids
++#: view:partner.clear.ids:0
++msgid "Clear IDs"
++msgstr ""
++
++#. module: base
++#: help:ir.cron,model:0
++msgid ""
++"Name of object whose function will be called when this scheduler will run. "
++"e.g. 'res.partener'"
++msgstr ""
+
+ #. module: base
-#: code:addons/osv/orm.py:0
++#: code:addons/orm.py:1040
+ #, python-format
+ msgid "The perm_read method is not implemented on this object !"
-msgstr "De perm_read methode is niet in dit object geïmplementeerd !"
++msgstr ""
++
++#. module: base
++#: view:res.lang:0
++msgid "%y - Year without century [00,99]."
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.si
+ msgid "Slovenia"
-msgstr "Slovenië"
++msgstr ""
+
+ #. module: base
-#: view:res.partner.canal:0
-#: field:res.partner.event,canal_id:0
-msgid "Channel"
-msgstr "Kanaal"
++#: model:res.country,name:base.pk
++msgid "Pakistan"
++msgstr ""
++
++#. module: base
++#: code:addons/orm.py:1350
++#, python-format
++msgid "Invalid Object Architecture!"
++msgstr ""
++
++#. module: base
++#: model:ir.ui.menu,name:base.menu_email_gateway_form
++msgid "Messages"
++msgstr ""
++
++#. module: base
++#: code:addons/base/ir/ir_model.py:303
++#: code:addons/base/ir/ir_model.py:317
++#: code:addons/base/ir/ir_model.py:319
++#: code:addons/base/ir/ir_model.py:321
++#: code:addons/base/ir/ir_model.py:328
++#: code:addons/base/ir/ir_model.py:331
++#: code:addons/base/module/wizard/base_update_translations.py:38
++#, python-format
++msgid "Error!"
++msgstr ""
+
+ #. module: base
+ #: view:res.lang:0
+ msgid "%p - Equivalent of either AM or PM."
-msgstr "%p - Equivalent van AM of PM."
++msgstr ""
+
+ #. module: base
+ #: view:ir.actions.server:0
+ msgid "Iteration Actions"
+ msgstr ""
+
+ #. module: base
-#: field:maintenance.contract,date_stop:0
++#: help:multi_company.default,company_id:0
++msgid "Company where the user is connected"
++msgstr ""
++
++#. module: base
++#: field:publisher_warranty.contract,date_stop:0
+ msgid "Ending Date"
-msgstr "Einddatum"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.nz
+ msgid "New Zealand"
-msgstr "Nieuw-Zeeland"
++msgstr ""
+
+ #. module: base
-#: model:res.partner.category,name:base.res_partner_category_7
-msgid "Openstuff.net"
-msgstr "Openstuff.net"
++#: code:addons/orm.py:3366
++#, python-format
++msgid ""
++"One of the records you are trying to modify has already been deleted "
++"(Document type: %s)."
++msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.nf
-msgid "Norfolk Island"
-msgstr "Norfolkeiland"
++#: model:ir.actions.act_window,help:base.action_country
++msgid ""
++"Display and manage the list of all countries that can be assigned to your "
++"partner records. You can create or delete countries to make sure the ones "
++"you are working on will be maintained."
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_MEDIA_PLAY"
-msgstr "STOCK_MEDIA_PLAY"
++#: model:res.partner.category,name:base.res_partner_category_7
++msgid "Openstuff.net"
++msgstr ""
+
+ #. module: base
-#: field:ir.rule,operator:0
-msgid "Operator"
-msgstr "Operator"
++#: model:res.country,name:base.nf
++msgid "Norfolk Island"
++msgstr ""
+
+ #. module: base
-#: wizard_view:module.lang.install,start:0
-msgid "Installation Done"
-msgstr "Installatie gereed"
++#: selection:base.language.install,lang:0
++msgid "Korean (KR) / 한국어 (KR)"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_OPEN"
-msgstr "STOCK_OPEN"
++#: help:ir.model.fields,model:0
++msgid "The technical name of the model this field belongs to"
++msgstr ""
+
+ #. module: base
+ #: field:ir.actions.server,action_id:0
+ #: selection:ir.actions.server,state:0
+ msgid "Client Action"
+ msgstr ""
+
+ #. module: base
-#: selection:ir.report.custom.fields,alignment:0
-msgid "right"
-msgstr "rechts"
-
-#. module: base
+ #: model:res.country,name:base.bd
+ msgid "Bangladesh"
-msgstr "Bangladesh"
++msgstr ""
+
+ #. module: base
+ #: constraint:res.company:0
+ msgid "Error! You can not create recursive companies."
+ msgstr ""
+
+ #. module: base
-#: selection:maintenance.contract,state:0
++#: selection:publisher_warranty.contract,state:0
+ msgid "Valid"
-msgstr "Geldig"
-
-#. module: base
-#: code:addons/addons/base/ir/ir_model.py:0
-#, python-format
-msgid "You can not delete this document! (%s)"
-msgstr "U kunt dit document niet verwijderen! (%s)"
++msgstr ""
+
+ #. module: base
+ #: selection:ir.translation,type:0
+ msgid "XSL"
-msgstr "XSL"
-
-#. module: base
-#: model:ir.actions.act_window,name:base.action_partner_other_form
-#: model:ir.ui.menu,name:base.menu_partner_other_form
-msgid "Others Partners"
+ msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/module/module.py:0
++#: code:addons/base/module/module.py:322
+ #, python-format
+ msgid "Can not upgrade module '%s'. It is not installed."
-msgstr "U kunt module '%s' niet upgraden. Deze module is niet geïnstalleerd."
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.cu
+ msgid "Cuba"
-msgstr "Cuba"
++msgstr ""
+
+ #. module: base
-#: view:res.lang:0
-msgid "%S - Second as a decimal number [00,61]."
-msgstr "%S - Seconden als een decimaal getal [00,61]."
++#: model:ir.model,name:base.model_res_partner_event
++msgid "res.partner.event"
++msgstr ""
++
++#. module: base
++#: model:res.widget,title:base.facebook_widget
++msgid "Facebook"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.am
+ msgid "Armenia"
-msgstr "Armenië"
++msgstr ""
+
+ #. module: base
-#: view:ir.sequence:0
-msgid "Year with century: %(year)s"
-msgstr "Jaartal met eeuw: %(year)s"
++#: model:ir.actions.act_window,name:base.ir_property_form
++#: model:ir.ui.menu,name:base.menu_ir_property_form_all
++msgid "Configuration Parameters"
++msgstr ""
+
+ #. module: base
-#: selection:ir.report.custom,frequency:0
-msgid "Daily"
-msgstr "Dagelijks"
++#: constraint:ir.cron:0
++msgid "Invalid arguments"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.se
+ msgid "Sweden"
-msgstr "Zweden"
++msgstr ""
+
+ #. module: base
+ #: selection:ir.actions.act_window.view,view_mode:0
+ #: selection:ir.ui.view,type:0
+ #: selection:wizard.ir.model.menu.create.line,view_type:0
+ msgid "Gantt"
-msgstr "Gantt"
++msgstr ""
+
+ #. module: base
+ #: view:ir.property:0
+ msgid "Property"
+ msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_res_partner_bank_type
+ #: view:res.partner.bank.type:0
+ msgid "Bank Account Type"
-msgstr "Bankrekening Type"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "terp-project"
-msgstr "terp-project"
++#: field:base.language.export,config_logo:0
++#: field:base.language.import,config_logo:0
++#: field:base.language.install,config_logo:0
++#: field:base.module.import,config_logo:0
++#: field:base.module.update,config_logo:0
++#: field:base.update.translations,config_logo:0
++#: field:ir.actions.configuration.wizard,config_logo:0
++#: field:ir.wizard.screen,config_logo:0
++#: field:publisher_warranty.contract.wizard,config_logo:0
++#: field:res.config,config_logo:0
++#: field:res.config.installer,config_logo:0
++#: field:res.config.users,config_logo:0
++#: field:res.config.view,config_logo:0
++msgid "Image"
++msgstr ""
+
+ #. module: base
+ #: view:ir.actions.server:0
+ msgid "Iteration Action Configuration"
+ msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.at
++#: selection:publisher_warranty.contract,state:0
++msgid "Canceled"
++msgstr ""
++
++#. module: base
++#: model:res.country,name:base.at
+ msgid "Austria"
-msgstr "Oostenrijk"
++msgstr ""
++
++#. module: base
++#: selection:base.language.install,state:0
++#: selection:base.module.import,state:0
++#: selection:base.module.update,state:0
++msgid "done"
++msgstr ""
+
+ #. module: base
+ #: selection:ir.actions.act_window.view,view_mode:0
++#: model:ir.ui.menu,name:base.menu_calendar_configuration
+ #: selection:ir.ui.view,type:0
+ #: selection:wizard.ir.model.menu.create.line,view_type:0
+ msgid "Calendar"
+ msgstr ""
+
+ #. module: base
++#: field:res.partner.address,partner_id:0
++msgid "Partner Name"
++msgstr ""
++
++#. module: base
+ #: field:workflow.activity,signal_send:0
+ msgid "Signal (subflow.*)"
+ msgstr ""
+
+ #. module: base
+ #: model:res.partner.category,name:base.res_partner_category_17
+ msgid "HR sector"
+ msgstr ""
+
+ #. module: base
++#: code:addons/orm.py:3817
++#, python-format
++msgid ""
++"Invalid \"order\" specified. A valid \"order\" specification is a comma-"
++"separated list of valid field names (optionally followed by asc/desc for the "
++"direction)"
++msgstr ""
++
++#. module: base
+ #: model:ir.model,name:base.model_ir_module_module_dependency
+ msgid "Module dependency"
-msgstr "Module afhankelijkheid"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_JUSTIFY_CENTER"
-msgstr "STOCK_JUSTIFY_CENTER"
++#: selection:publisher_warranty.contract.wizard,state:0
++msgid "Draft"
++msgstr ""
+
+ #. module: base
-#: view:res.config.view:0
-msgid "Choose Your Mode"
++#: selection:res.config.users,view:0
++#: selection:res.config.view,view:0
++#: selection:res.users,view:0
++msgid "Extended"
++msgstr ""
++
++#. module: base
++#: model:ir.actions.act_window,help:base.action_partner_title_contact
++msgid ""
++"Manage the contact titles you want to have available in your system and the "
++"way you want to print them in letters and other documents. Some example: "
++"Mr., Mrs. "
+ msgstr ""
+
+ #. module: base
+ #: field:res.company,rml_footer1:0
+ msgid "Report Footer 1"
+ msgstr ""
+
+ #. module: base
+ #: field:res.company,rml_footer2:0
+ msgid "Report Footer 2"
+ msgstr ""
+
+ #. module: base
+ #: view:ir.model.access:0
-#: model:ir.ui.menu,name:base.menu_security_access
+ #: view:res.groups:0
+ #: field:res.groups,model_access:0
+ msgid "Access Controls"
+ msgstr ""
+
+ #. module: base
+ #: view:ir.module.module:0
+ #: field:ir.module.module,dependencies_id:0
+ msgid "Dependencies"
-msgstr "Afhankelijkheden"
++msgstr ""
+
+ #. module: base
-#: field:res.partner,parent_id:0
++#: field:multi_company.default,company_id:0
+ msgid "Main Company"
+ msgstr ""
+
+ #. module: base
-#: field:ir.report.custom.fields,bgcolor:0
-msgid "Background Color"
-msgstr "Achtergrondkleur"
++#: field:ir.ui.menu,web_icon_hover:0
++msgid "Web Icon File (hover)"
++msgstr ""
+
+ #. module: base
+ #: view:ir.actions.server:0
+ msgid ""
+ "If you use a formula type, use a python expression using the variable "
+ "'object'."
+ msgstr ""
-"Wanneer u een formule type gebruikt, gebruik dan een python expressie die de "
-"variabele 'object' gebruikt."
+
+ #. module: base
+ #: field:res.partner.address,birthdate:0
+ msgid "Birthdate"
-msgstr "Geboortedatum"
++msgstr ""
+
+ #. module: base
+ #: model:ir.actions.act_window,name:base.action_partner_title_contact
+ #: model:ir.ui.menu,name:base.menu_partner_title_contact
+ msgid "Contact Titles"
+ msgstr ""
+
+ #. module: base
-#: model:ir.model,name:base.model_res_partner_som
-msgid "res.partner.som"
-msgstr "res.partner.som"
++#: view:base.language.import:0
++msgid ""
++"Please double-check that the file encoding is set to UTF-8 (sometimes called "
++"Unicode) when the translator exports it."
++msgstr ""
++
++#. module: base
++#: selection:base.language.install,lang:0
++msgid "Spanish (DO) / Español (DO)"
++msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_workflow_activity
+ msgid "workflow.activity"
-msgstr "workflow.activity"
++msgstr ""
++
++#. module: base
++#: help:ir.ui.view_sc,res_id:0
++msgid ""
++"Reference of the target resource, whose model/table depends on the 'Resource "
++"Name' field."
++msgstr ""
+
+ #. module: base
+ #: field:ir.model.fields,select_level:0
+ msgid "Searchable"
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.uy
+ msgid "Uruguay"
+ msgstr ""
+
+ #. module: base
-#: view:res.partner.event:0
-msgid "Document Link"
++#: selection:base.language.install,lang:0
++msgid "Finnish / Suomi"
+ msgstr ""
+
+ #. module: base
-#: model:ir.model,name:base.model_res_partner_title
-msgid "res.partner.title"
-msgstr "res.partner.title"
++#: field:ir.rule,perm_write:0
++msgid "Apply For Write"
++msgstr ""
+
+ #. module: base
+ #: field:ir.sequence,prefix:0
+ msgid "Prefix"
-msgstr "Voorvoegsel"
-
-#. module: base
-#: field:ir.actions.server,loop_action:0
-msgid "Loop Action"
+ msgstr ""
+
+ #. module: base
-#: selection:module.lang.install,init,lang:0
++#: selection:base.language.install,lang:0
+ msgid "German / Deutsch"
-msgstr "Duits / Deutsch"
++msgstr ""
+
+ #. module: base
+ #: help:ir.actions.server,trigger_name:0
+ msgid "Select the Signal name that is to be used as the trigger."
+ msgstr ""
+
+ #. module: base
+ #: view:ir.actions.server:0
+ msgid "Fields Mapping"
+ msgstr ""
+
+ #. module: base
++#: selection:base.language.install,lang:0
++msgid "Portugese / Português"
++msgstr ""
++
++#. module: base
+ #: model:res.partner.title,name:base.res_partner_title_sir
+ msgid "Sir"
-msgstr "De heer"
++msgstr ""
+
+ #. module: base
-#: wizard_button:module.upgrade,next,start:0
-msgid "Start Upgrade"
-msgstr "Upgrade Starten"
++#: code:addons/orm.py:1622
++#, python-format
++msgid "There is no view of type '%s' defined for the structure!"
++msgstr ""
+
+ #. module: base
+ #: field:ir.default,ref_id:0
+ msgid "ID Ref."
-msgstr "ID Ref."
++msgstr ""
+
+ #. module: base
-#: selection:module.lang.install,init,lang:0
-msgid "French / Français"
-msgstr "Frans / Français"
++#: model:ir.actions.server,name:base.action_start_configurator
++#: model:ir.ui.menu,name:base.menu_view_base_module_configuration
++msgid "Start Configuration"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.mt
+ msgid "Malta"
-msgstr "Malta"
++msgstr ""
+
+ #. module: base
+ #: field:ir.actions.server,fields_lines:0
+ msgid "Field Mappings."
+ msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_ir_module_module
++#: view:ir.model.data:0
+ #: field:ir.model.data,module:0
+ #: view:ir.module.module:0
+ #: field:ir.module.module.dependency,module_id:0
-#: rml:ir.module.reference:0
++#: report:ir.module.reference.graph:0
++#: field:ir.translation,module:0
+ msgid "Module"
-msgstr "Module"
++msgstr ""
+
+ #. module: base
+ #: field:ir.attachment,description:0
++#: view:ir.module.module:0
+ #: field:ir.module.module,description:0
+ #: field:res.partner.bank,name:0
+ #: view:res.partner.event:0
+ #: field:res.partner.event,description:0
+ #: view:res.request:0
+ msgid "Description"
-msgstr "Omschrijving"
++msgstr ""
+
+ #. module: base
-#: field:res.users,action_id:0
-msgid "Home Action"
++#: model:ir.actions.act_window,name:base.action_workflow_instance_form
++#: model:ir.ui.menu,name:base.menu_workflow_instance
++msgid "Instances"
+ msgstr ""
+
+ #. module: base
-#: field:res.lang,grouping:0
-msgid "Separator Format"
++#: model:res.country,name:base.aq
++msgid "Antarctica"
++msgstr ""
++
++#. module: base
++#: field:ir.actions.report.xml,auto:0
++msgid "Custom python parser"
++msgstr ""
++
++#. module: base
++#: view:base.language.import:0
++msgid "_Import"
++msgstr ""
++
++#. module: base
++#: view:res.partner.canal:0
++msgid "Channel"
+ msgstr ""
+
+ #. module: base
-#: view:wizard.module.lang.export:0
-msgid "Export language"
-msgstr "Taal exporteren"
++#: field:res.lang,grouping:0
++msgid "Separator Format"
++msgstr ""
+
+ #. module: base
-#: selection:maintenance.contract.wizard,state:0
++#: selection:publisher_warranty.contract,state:0
+ msgid "Unvalidated"
-msgstr "Niet gevalideerd"
++msgstr ""
+
+ #. module: base
+ #: model:ir.ui.menu,name:base.next_id_9
+ msgid "Database Structure"
-msgstr "Database Structuur"
++msgstr ""
+
+ #. module: base
-#: model:ir.actions.wizard,name:base.res_partner_mass_mailing_wizard
-#: wizard_view:res.partner.spam_send,init:0
++#: model:ir.actions.act_window,name:base.action_partner_mass_mail
++#: model:ir.model,name:base.model_partner_wizard_spam
++#: view:partner.wizard.spam:0
+ msgid "Mass Mailing"
-msgstr "Massa Mailing"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.yt
+ msgid "Mayotte"
+ msgstr ""
+
+ #. module: base
-#: wizard_view:module.lang.import,init:0
-msgid "You can also import .po files."
-msgstr "U kunt ook .po bestanden importeren"
-
-#. module: base
-#: code:addons/addons/base/maintenance/maintenance.py:0
-#, python-format
-msgid "Unable to find a valid contract"
-msgstr ""
-
-#. module: base
-#: code:addons/addons/base/ir/ir_actions.py:0
++#: code:addons/base/ir/ir_actions.py:597
+ #, python-format
+ msgid "Please specify an action to launch !"
-msgstr "Kies aub een actie die moet worden uitgevoerd !"
-
-#. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_JUSTIFY_RIGHT"
-msgstr "STOCK_JUSTIFY_RIGHT"
-
-#. module: base
-#: model:ir.model,name:base.model_res_partner_function
-msgid "Function of the contact"
-msgstr "Functie contactpersoon"
-
-#. module: base
-#: model:ir.actions.act_window,name:base.open_module_tree_upgrade
-#: model:ir.ui.menu,name:base.menu_module_tree_upgrade
-msgid "Modules to be installed, upgraded or removed"
-msgstr "Modules die worden geïnstalleerd, bijgewerkt of verwijderd"
++msgstr ""
+
+ #. module: base
+ #: view:res.payterm:0
+ msgid "Payment Term"
-msgstr "Betalingsvoorwaarde"
-
-#. module: base
-#: field:ir.report.custom,footer:0
-msgid "Report Footer"
+ msgstr ""
+
+ #. module: base
+ #: selection:res.lang,direction:0
+ msgid "Right-to-Left"
-msgstr "Rechts-naar-Links"
++msgstr ""
+
+ #. module: base
-#: code:addons/osv/orm.py:0
-#, python-format
-msgid "Please check that all your lines have %d columns."
++#: view:ir.actions.act_window:0
++#: model:ir.actions.act_window,name:base.actions_ir_filters_view
++#: view:ir.filters:0
++#: model:ir.model,name:base.model_ir_filters
++#: model:ir.ui.menu,name:base.menu_ir_filters
++msgid "Filters"
+ msgstr ""
+
+ #. module: base
-#: wizard_view:module.lang.import,init:0
-msgid "Import language"
-msgstr "Taal importeren"
++#: code:addons/orm.py:758
++#, python-format
++msgid "Please check that all your lines have %d columns."
++msgstr ""
+
+ #. module: base
+ #: model:ir.actions.act_window,name:base.ir_cron_act
+ #: view:ir.cron:0
+ #: model:ir.ui.menu,name:base.menu_ir_cron_act
+ msgid "Scheduled Actions"
-msgstr "Geplande acties"
++msgstr ""
+
+ #. module: base
-#: field:res.partner,title:0
+ #: field:res.partner.address,title:0
+ #: field:res.partner.title,name:0
++#: field:res.widget,title:0
+ msgid "Title"
-msgstr "Titel"
++msgstr ""
+
+ #. module: base
-#: code:addons/osv/orm.py:0
-#, python-format
-msgid "Recursivity Detected."
++#: help:ir.property,res_id:0
++msgid "If not set, acts as a default value for new resources"
+ msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "terp-account"
-msgstr "terp-account"
++#: code:addons/orm.py:3448
++#, python-format
++msgid "Recursivity Detected."
++msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/module/module.py:0
++#: code:addons/base/module/module.py:262
+ #, python-format
+ msgid "Recursion error in modules dependencies !"
+ msgstr ""
+
+ #. module: base
++#: view:base.language.install:0
++msgid ""
++"This wizard helps you add a new language to your OpenERP system. After "
++"loading a new language it becomes available as default interface language "
++"for users and partners."
++msgstr ""
++
++#. module: base
+ #: view:ir.model:0
+ msgid "Create a Menu"
-msgstr "Menu aanmaken"
++msgstr ""
+
+ #. module: base
+ #: help:res.partner,vat:0
+ msgid ""
+ "Value Added Tax number. Check the box if the partner is subjected to the "
+ "VAT. Used by the VAT legal statement."
+ msgstr ""
-"BTW nummer. Kies dit vakje als de relatie BTW plichtig is. Wordt gebruikt "
-"bij de BTW rapportage."
-
-#. module: base
-#: model:ir.actions.act_window,name:base.action_module_category_tree
-#: model:ir.ui.menu,name:base.menu_action_module_category_tree
-msgid "Categories of Modules"
-msgstr "Module Categorieën"
+
+ #. module: base
-#: selection:module.lang.install,init,lang:0
-msgid "Ukrainian / украї́нська мо́ва"
++#: model:ir.model,name:base.model_maintenance_contract
++msgid "maintenance.contract"
+ msgstr ""
+
+ #. module: base
-#: selection:ir.actions.todo,state:0
-msgid "Not Started"
-msgstr "Niet Gestart"
-
-#. module: base
+ #: model:res.country,name:base.ru
+ msgid "Russian Federation"
-msgstr "Rusland"
++msgstr ""
+
+ #. module: base
-#: field:res.company,name:0
-msgid "Company Name"
-msgstr "Bedrijfsnaam"
++#: selection:base.language.install,lang:0
++msgid "Urdu / اردو"
++msgstr ""
+
+ #. module: base
-#: model:ir.actions.act_window,name:base.action_res_roles_form
-#: model:ir.ui.menu,name:base.menu_action_res_roles_form
-#: view:res.roles:0
-#: view:res.users:0
-#: field:res.users,roles_id:0
-msgid "Roles"
-msgstr "Rollen"
++#: field:res.company,name:0
++msgid "Company Name"
++msgstr ""
+
+ #. module: base
+ #: model:ir.actions.act_window,name:base.action_country
+ #: model:ir.ui.menu,name:base.menu_country_partner
+ msgid "Countries"
-msgstr "Landen"
++msgstr ""
++
++#. module: base
++#: selection:ir.translation,type:0
++msgid "RML (deprecated - use Report)"
++msgstr ""
++
++#. module: base
++#: view:ir.rule:0
++msgid "Record rules"
++msgstr ""
++
++#. module: base
++#: view:ir.property:0
++msgid "Field Information"
++msgstr ""
++
++#. module: base
++#: view:ir.actions.todo:0
++msgid "Search Actions"
++msgstr ""
++
++#. module: base
++#: model:ir.actions.act_window,name:base.action_view_partner_wizard_ean_check
++#: view:partner.wizard.ean.check:0
++msgid "Ean check"
++msgstr ""
++
++#. module: base
++#: field:res.partner,vat:0
++msgid "VAT"
++msgstr ""
+
+ #. module: base
+ #: view:res.lang:0
+ msgid "12. %w ==> 5 ( Friday is the 6th day)"
-msgstr "12. %w ==> 5 ( Vrijdag is de 6de dag)"
++msgstr ""
+
+ #. module: base
+ #: constraint:res.partner.category:0
+ msgid "Error ! You can not create recursive categories."
+ msgstr ""
+
+ #. module: base
+ #: view:res.lang:0
+ msgid "%x - Appropriate date representation."
-msgstr "%x - Passende datum weergave"
-
-#. module: base
-#: help:ir.module.repository,filter:0
-msgid ""
-"Regexp to search module on the repository webpage:\n"
-"- The first parenthesis must match the name of the module.\n"
-"- The second parenthesis must match the whole version number.\n"
-"- The last parenthesis must match the extension of the module."
+ msgstr ""
+
+ #. module: base
+ #: view:res.lang:0
-msgid "%M - Minute as a decimal number [00,59]."
-msgstr "%M - Minuut als decimaal getal [00,59]"
++msgid "%d - Day of the month [01,31]."
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.tj
+ msgid "Tajikistan"
-msgstr "Tajikistan"
-
-#. module: base
-#: help:ir.actions.report.xml,header:0
-msgid "Add or not the coporate RML header"
-msgstr "Wel of niet RML-bedrijfskoptekst toevoegen"
-
-#. module: base
-#: model:ir.actions.act_window,name:base.act_values_form_action
-#: model:ir.ui.menu,name:base.menu_values_form_action
-msgid "Connect Actions To Client Events"
+ msgstr ""
+
+ #. module: base
+ #: selection:ir.module.module,license:0
+ msgid "GPL-2 or later version"
-msgstr "GPL-2 of latere versie"
++msgstr ""
+
+ #. module: base
-#: selection:res.partner.event,type:0
-msgid "Prospect Contact"
++#: model:res.partner.title,shortcut:base.res_partner_title_sir
++msgid "M."
+ msgstr ""
+
+ #. module: base
-#: model:ir.model,name:base.model_ir_actions_wizard
-#: selection:ir.ui.menu,action:0
-msgid "ir.actions.wizard"
-msgstr "ir.actions.wizard"
++#: code:addons/base/module/module.py:429
++#, python-format
++msgid ""
++"Can not create the module file:\n"
++" %s"
++msgstr ""
++
++#. module: base
++#: code:addons/orm.py:2973
++#, python-format
++msgid ""
++"Operation prohibited by access rules, or performed on an already deleted "
++"document (Operation: read, Document type: %s)."
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.nr
+ msgid "Nauru"
-msgstr "Nauru"
++msgstr ""
++
++#. module: base
++#: code:addons/base/module/module.py:200
++#, python-format
++msgid "The certificate ID of the module must be unique !"
++msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_ir_property
+ msgid "ir.property"
-msgstr "ir.property"
++msgstr ""
+
+ #. module: base
+ #: selection:ir.actions.act_window,view_type:0
+ #: selection:ir.actions.act_window.view,view_mode:0
++#: view:ir.ui.view:0
+ #: selection:ir.ui.view,type:0
+ #: selection:wizard.ir.model.menu.create.line,view_type:0
+ msgid "Form"
-msgstr "Formulier"
-
-#. module: base
-#: code:addons/osv/orm.py:0
-#, python-format
-msgid "Can not define a column %s. Reserved keyword !"
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.me
+ msgid "Montenegro"
-msgstr "Montenegro"
-
-#. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_QUIT"
-msgstr "STOCK_QUIT"
++msgstr ""
+
+ #. module: base
+ #: view:ir.cron:0
+ msgid "Technical Data"
+ msgstr ""
+
+ #. module: base
+ #: view:res.partner:0
+ #: field:res.partner,category_id:0
+ msgid "Categories"
-msgstr "Categorieën"
++msgstr ""
++
++#. module: base
++#: view:base.language.import:0
++msgid ""
++"If you need another language than the official ones available, you can "
++"import a language pack from here. Other OpenERP languages than the official "
++"ones can be found on launchpad."
++msgstr ""
+
+ #. module: base
++#: view:ir.module.module:0
+ #: selection:ir.module.module,state:0
+ #: selection:ir.module.module.dependency,state:0
+ msgid "To be upgraded"
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.ly
+ msgid "Libya"
-msgstr "Libië"
-
-#. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "terp-purchase"
-msgstr "terp-purchase"
-
-#. module: base
-#: wizard_field:module.module.update,init,repositories:0
-msgid "Repositories"
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.cf
+ msgid "Central African Republic"
-msgstr "Centraal-Afrikaanse Republiek"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.li
+ msgid "Liechtenstein"
-msgstr "Liechtenstein"
-
-#. module: base
-#: model:res.partner.title,name:base.res_partner_title_ltd
-msgid "Ltd"
+ msgstr ""
+
+ #. module: base
-#: field:ir.actions.server,expression:0
-msgid "Loop Expression"
++#: model:ir.model,name:base.model_partner_sms_send
++#: view:partner.sms.send:0
++msgid "Send SMS"
+ msgstr ""
+
+ #. module: base
-#: field:ir.actions.report.custom,report_id:0
-msgid "Report Ref."
-msgstr "Rapport Ref."
-
-#. module: base
+ #: field:res.partner,ean13:0
+ msgid "EAN13"
-msgstr "EAN13"
++msgstr ""
++
++#. module: base
++#: code:addons/orm.py:1622
++#, python-format
++msgid "Invalid Architecture!"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.pt
+ msgid "Portugal"
-msgstr "Portugal"
++msgstr ""
+
+ #. module: base
-#: selection:maintenance.contract,state:0
-msgid "Unvalid"
-msgstr "Ongeldig"
++#: sql_constraint:ir.model.data:0
++msgid ""
++"You cannot have multiple records with the same id for the same module !"
++msgstr ""
+
+ #. module: base
+ #: field:ir.module.module,certificate:0
+ msgid "Quality Certificate"
-msgstr "Kwaliteitscertificaat"
++msgstr ""
+
+ #. module: base
+ #: view:res.lang:0
+ msgid "6. %d, %m ==> 05, 12"
-msgstr "6. %d. %m ==> 05. 12"
++msgstr ""
++
++#. module: base
++#: field:res.config.users,date:0
++#: field:res.users,date:0
++msgid "Last Connection"
++msgstr ""
++
++#. module: base
++#: field:ir.actions.act_window,help:0
++msgid "Action description"
++msgstr ""
+
+ #. module: base
+ #: help:res.partner,customer:0
+ msgid "Check this box if the partner is a customer."
-msgstr "Vink dit vakje aan als de relatie een klant is"
++msgstr ""
+
+ #. module: base
+ #: model:ir.actions.act_window,name:base.res_lang_act_window
+ #: model:ir.model,name:base.model_res_lang
+ #: model:ir.ui.menu,name:base.menu_res_lang_act_window
+ #: view:res.lang:0
+ msgid "Languages"
-msgstr "Talen"
++msgstr ""
+
+ #. module: base
+ #: selection:workflow.activity,join_mode:0
+ #: selection:workflow.activity,split_mode:0
+ msgid "Xor"
-msgstr "Xor"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.ec
+ msgid "Ecuador"
-msgstr "Ecuador"
++msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/module/wizard/wizard_export_lang.py:0
++#: code:addons/base/module/wizard/base_export_language.py:52
+ #, python-format
+ msgid ""
+ "Save this document to a .CSV file and open it with your favourite "
+ "spreadsheet software. The file encoding is UTF-8. You have to translate the "
+ "latest column before reimporting it."
+ msgstr ""
+
+ #. module: base
++#: model:ir.actions.act_window,name:base.action_partner_customer_form
++#: model:ir.actions.act_window,name:base.action_partner_form
++#: model:ir.ui.menu,name:base.menu_partner_form
++#: view:res.partner:0
++msgid "Customers"
++msgstr ""
++
++#. module: base
+ #: model:res.country,name:base.au
+ msgid "Australia"
-msgstr "Australië"
++msgstr ""
+
+ #. module: base
+ #: help:res.partner,lang:0
+ msgid ""
+ "If the selected language is loaded in the system, all documents related to "
+ "this partner will be printed in this language. If not, it will be english."
+ msgstr ""
+
+ #. module: base
-#: rml:ir.module.reference:0
++#: report:ir.module.reference.graph:0
+ msgid "Menu :"
-msgstr "Menu :"
++msgstr ""
+
+ #. module: base
+ #: selection:ir.model.fields,state:0
+ msgid "Base Field"
+ msgstr ""
+
+ #. module: base
-#: field:ir.actions.report.xml,report_sxw_content:0
-#: field:ir.actions.report.xml,report_sxw_content_data:0
-msgid "SXW content"
++#: view:publisher_warranty.contract:0
++msgid "Validate"
++msgstr ""
++
++#. module: base
++#: field:ir.actions.todo,restart:0
++msgid "Restart"
++msgstr ""
++
++#. module: base
++#: field:ir.actions.report.xml,report_sxw_content:0
++#: field:ir.actions.report.xml,report_sxw_content_data:0
++msgid "SXW content"
++msgstr ""
++
++#. module: base
++#: view:ir.actions.wizard:0
++#: field:wizard.ir.model.menu.create.line,wizard_id:0
++msgid "Wizard"
+ msgstr ""
+
+ #. module: base
+ #: view:ir.cron:0
+ msgid "Action to Trigger"
+ msgstr ""
+
+ #. module: base
-#: model:ir.model,name:base.model_res_currency_rate
-msgid "Currency Rate"
-msgstr "Wisselkoers"
++#: code:addons/base/res/res_user.py:136
++#, python-format
++msgid "\"email_from\" needs to be set to send welcome mails to users"
++msgstr ""
+
+ #. module: base
-#: field:ir.report.custom.fields,fc0_operande:0
-#: field:ir.report.custom.fields,fc1_operande:0
-#: field:ir.report.custom.fields,fc2_operande:0
-#: field:ir.report.custom.fields,fc3_operande:0
+ #: selection:ir.translation,type:0
+ msgid "Constraint"
-msgstr "Begrenzing"
++msgstr ""
+
+ #. module: base
+ #: selection:ir.values,key:0
+ #: selection:res.partner.address,type:0
+ msgid "Default"
+ msgstr ""
+
+ #. module: base
++#: view:ir.model.fields:0
+ #: field:ir.model.fields,required:0
+ #: field:res.partner.bank.type.field,required:0
+ msgid "Required"
-msgstr "Verplicht"
++msgstr ""
+
+ #. module: base
-#: field:ir.model.fields,domain:0
-#: field:ir.rule,domain:0
-#: field:res.partner.title,domain:0
-msgid "Domain"
-msgstr "Domein"
++#: view:res.users:0
++msgid "Default Filters"
++msgstr ""
+
+ #. module: base
+ #: field:res.request.history,name:0
+ msgid "Summary"
-msgstr "Samenvatting"
++msgstr ""
++
++#. module: base
++#: field:multi_company.default,expression:0
++msgid "Expression"
++msgstr ""
+
+ #. module: base
+ #: help:ir.actions.server,subject:0
+ msgid ""
+ "Specify the subject. You can use fields from the object, e.g. `Hello [[ "
+ "object.partner_id.name ]]`"
+ msgstr ""
-"Geef het onderwerp. U kunt velden van het object gebruiken, bijv. `Beste [[ "
-"object.partner_id.name ]]`"
+
+ #. module: base
+ #: view:res.company:0
+ msgid "Header/Footer"
-msgstr "Koptekst/Voettekst"
-
-#. module: base
-#: model:res.country,name:base.lb
-msgid "Lebanon"
-msgstr "Libanon"
++msgstr ""
+
+ #. module: base
-#: wizard_field:module.lang.import,init,name:0
-msgid "Language name"
-msgstr "Taalnaam"
++#: help:ir.actions.act_window,help:0
++msgid ""
++"Optional help text for the users with a description of the target view, such "
++"as its usage and purpose."
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.va
+ msgid "Holy See (Vatican City State)"
-msgstr "Vaticaanstad"
++msgstr ""
+
+ #. module: base
-#: wizard_field:base.module.import,init,module_file:0
++#: field:base.module.import,module_file:0
+ msgid "Module .ZIP file"
-msgstr "Module .ZIP bestand"
++msgstr ""
+
+ #. module: base
-#: field:workflow.transition,trigger_model:0
-msgid "Trigger Object"
++#: field:ir.ui.view,xml_id:0
++msgid "XML ID"
++msgstr ""
++
++#. module: base
++#: model:res.partner.category,name:base.res_partner_category_16
++msgid "Telecom sector"
+ msgstr ""
+
+ #. module: base
-#: selection:ir.report.custom,state:0
-msgid "Subscribed"
-msgstr "Geabonneerd"
++#: field:workflow.transition,trigger_model:0
++msgid "Trigger Object"
++msgstr ""
+
+ #. module: base
-#: wizard_view:module.lang.install,init:0
-#: wizard_view:module.upgrade,next:0
-msgid "System Upgrade"
-msgstr "Systeem Upgrade"
++#: view:res.users:0
++msgid "Current Activity"
++msgstr ""
+
+ #. module: base
++#: view:workflow.activity:0
+ #: field:workflow.activity,in_transitions:0
+ msgid "Incoming Transitions"
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.sr
+ msgid "Suriname"
-msgstr "Suriname"
-
-#. module: base
-#: code:addons/osv/orm.py:0
-#, python-format
-msgid "The create method is not implemented on this object !"
-msgstr "De methode aanmaken is niet in dit object geïmplementeerd !"
++msgstr ""
+
+ #. module: base
-#: field:ir.values,key2:0
-#: view:res.partner.event.type:0
-#: field:res.partner.event.type,name:0
-msgid "Event Type"
++#: model:ir.ui.menu,name:base.marketing_menu
++msgid "Marketing"
+ msgstr ""
+
+ #. module: base
+ #: view:res.partner.bank:0
+ #: model:res.partner.bank.type,name:base.bank_normal
+ msgid "Bank account"
-msgstr "Bankrekening"
++msgstr ""
+
+ #. module: base
-#: view:ir.sequence.type:0
-msgid "Sequence Type"
++#: selection:base.language.install,lang:0
++msgid "Spanish (HN) / Español (HN)"
+ msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/module/module.py:0
-#, python-format
-msgid ""
-"You try to upgrade a module that depends on the module: %s.\n"
-"But this module is not available in your system."
++#: view:ir.sequence.type:0
++msgid "Sequence Type"
+ msgstr ""
+
+ #. module: base
-#: view:res.partner.address:0
-msgid "Partner Address"
-msgstr "Relatie Adres"
++#: view:ir.ui.view.custom:0
++msgid "Customized Architecture"
++msgstr ""
+
+ #. module: base
+ #: field:ir.module.module,license:0
+ msgid "License"
-msgstr "Licentie"
++msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/ir/ir_report_custom.py:0
-#, python-format
-msgid "Invalid operation"
-msgstr "Ongeldige bewerking"
++#: field:ir.attachment,url:0
++msgid "Url"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_SAVE_AS"
-msgstr "STOCK_SAVE_AS"
++#: selection:ir.actions.todo,restart:0
++msgid "Always"
++msgstr ""
++
++#. module: base
++#: selection:ir.translation,type:0
++msgid "SQL Constraint"
++msgstr ""
+
+ #. module: base
+ #: field:ir.actions.server,srcmodel_id:0
++#: field:ir.model.fields,model_id:0
+ msgid "Model"
+ msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/module/module.py:0
-#, python-format
++#: view:base.language.install:0
+ msgid ""
-"You try to install a module that depends on the module: %s.\n"
-"But this module is not available in your system."
++"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 ""
+
+ #. module: base
-#: field:ir.actions.act_window.view,view_id:0
-#: field:ir.default,page:0
-#: selection:ir.translation,type:0
-#: field:wizard.ir.model.menu.create.line,view_id:0
-msgid "View"
-msgstr "Weergave"
-
-#. module: base
-#: field:ir.actions.server,write_id:0
-msgid "Write Id"
++#: sql_constraint:ir.config_parameter:0
++msgid "Key must be unique."
+ msgstr ""
+
+ #. module: base
+ #: view:ir.actions.act_window:0
+ msgid "Open a Window"
-msgstr "Open een Venster"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.gq
+ msgid "Equatorial Guinea"
-msgstr "Equatoriaal Guinea"
++msgstr ""
+
+ #. module: base
-#: wizard_view:base.module.import,init:0
++#: view:base.module.import:0
++#: model:ir.actions.act_window,name:base.action_view_base_module_import
+ msgid "Module Import"
-msgstr "Module import"
++msgstr ""
+
+ #. module: base
-#: code:addons/osv/orm.py:0
-#, python-format
-msgid ""
-"Language with code \"%s\" is not defined in your system !\n"
-"Define it through the Administration menu."
++#: field:res.bank,zip:0
++#: field:res.partner.address,zip:0
++#: field:res.partner.bank,zip:0
++msgid "Zip"
+ msgstr ""
+
+ #. module: base
++#: view:ir.module.module:0
+ #: field:ir.module.module,author:0
+ msgid "Author"
-msgstr "Auteur"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_UNDELETE"
-msgstr "STOCK_UNDELETE"
++#: model:res.country,name:base.mk
++msgid "FYROM"
++msgstr ""
+
+ #. module: base
+ #: view:res.lang:0
+ msgid "%c - Appropriate date and time representation."
-msgstr "%c - Passende datum en tijd weergave."
++msgstr ""
++
++#. module: base
++#: code:addons/base/res/res_config.py:422
++#, python-format
++msgid ""
++"Your database is now fully configured.\n"
++"\n"
++"Click 'Continue' and enjoy your OpenERP experience..."
++msgstr ""
+
+ #. module: base
-#: selection:module.lang.install,init,lang:0
-msgid "Finland / Suomi"
++#: selection:base.language.install,lang:0
++msgid "Hebrew / עִבְרִי"
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.bo
+ msgid "Bolivia"
-msgstr "Bolivië"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.gh
+ msgid "Ghana"
-msgstr "Ghana"
++msgstr ""
+
+ #. module: base
+ #: field:res.lang,direction:0
+ msgid "Direction"
-msgstr "Richting"
-
-#. module: base
-#: model:ir.model,name:base.model_wizard_module_update_translations
-msgid "wizard.module.update_translations"
-msgstr "wizard.module.update_translations"
++msgstr ""
+
+ #. module: base
+ #: view:ir.actions.act_window:0
+ #: model:ir.actions.act_window,name:base.action_ui_view
+ #: field:ir.actions.act_window,view_ids:0
+ #: field:ir.actions.act_window,views:0
+ #: field:ir.module.module,views_by_module:0
+ #: model:ir.ui.menu,name:base.menu_action_ui_view
+ #: view:ir.ui.view:0
-#: view:wizard.ir.model.menu.create:0
-#: field:wizard.ir.model.menu.create,view_ids:0
+ msgid "Views"
-msgstr "Weergaven"
++msgstr ""
+
+ #. module: base
+ #: view:res.groups:0
+ #: field:res.groups,rule_groups:0
-#: field:res.users,rules_id:0
+ msgid "Rules"
+ msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/module/module.py:0
++#: code:addons/base/module/module.py:216
+ #, python-format
+ msgid "You try to remove a module that is installed or will be installed"
+ msgstr ""
-"U probeert een module te verwijderen die geïnstalleerd is of nog moet worden "
-"geïnstalleerd."
+
+ #. module: base
-#: help:ir.values,key2:0
-msgid ""
-"The kind of action or button in the client side that will trigger the action."
-msgstr "De soort actie of knop in de client die deze actie zal triggeren."
++#: view:base.module.upgrade:0
++msgid "The selected modules have been updated / installed !"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_PASTE"
-msgstr "STOCK_PASTE"
++#: selection:base.language.install,lang:0
++msgid "Spanish (PR) / Español (PR)"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.gt
+ msgid "Guatemala"
-msgstr "Guatemala"
++msgstr ""
+
+ #. module: base
+ #: model:ir.actions.act_window,name:base.action_workflow_form
++#: model:ir.ui.menu,name:base.menu_low_workflow
+ #: model:ir.ui.menu,name:base.menu_workflow
++#: model:ir.ui.menu,name:base.menu_workflow_root
+ msgid "Workflows"
+ msgstr ""
+
+ #. module: base
-#: model:ir.actions.act_window,name:base.action_config_wizard_form
-#: model:ir.ui.menu,name:base.menu_config_module
-msgid "Configuration Wizard"
-msgstr "Configuratie Assistent"
++#: field:ir.translation,xml_id:0
++msgid "XML Id"
++msgstr ""
++
++#. module: base
++#: model:ir.actions.act_window,name:base.action_config_user_form
++msgid "Create Users"
++msgstr ""
++
++#. module: base
++#: model:ir.model,name:base.model_res_partner_title
++msgid "res.partner.title"
++msgstr ""
++
++#. module: base
++#: view:ir.values:0
++msgid "tree_but_action, client_print_multi"
++msgstr ""
+
+ #. module: base
-#: model:ir.model,name:base.model_res_roles
-msgid "res.roles"
-msgstr "res.roles"
++#: model:res.partner.category,name:base.res_partner_category_retailers0
++msgid "Retailers"
++msgstr ""
+
+ #. module: base
+ #: help:ir.cron,priority:0
+ msgid ""
+ "0=Very Urgent\n"
+ "10=Not urgent"
+ msgstr ""
+
+ #. module: base
-#: view:res.users:0
++#: view:res.config:0
++#: view:res.config.installer:0
+ msgid "Skip"
-msgstr "Overslaan"
-
-#. module: base
-#: model:ir.actions.act_window,name:base.res_request_link-act
-#: model:ir.ui.menu,name:base.menu_res_request_link_act
-msgid "Accepted Links in Requests"
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.ls
+ msgid "Lesotho"
-msgstr "Lesotho"
++msgstr ""
+
+ #. module: base
-#: model:ir.actions.act_window,name:base.grant_menu_access
-#: model:ir.ui.menu,name:base.menu_grant_menu_access
-msgid "Grant Access To Menus"
-msgstr "Geeft Toegang Tot Menu's"
++#: code:addons/base/ir/ir_model.py:114
++#, python-format
++msgid "You can not remove the model '%s' !"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.ke
+ msgid "Kenya"
-msgstr "Kenia"
++msgstr ""
+
+ #. module: base
-#: view:res.config.view:0
-msgid ""
-"Choose the simplified interface if you are testing OpenERP for the first "
-"time. Less used options or fields are automatically hidden. You will be able "
-"to change this, later, through the Administration menu."
++#: view:res.partner.event:0
++msgid "Event"
++msgstr ""
++
++#. module: base
++#: model:ir.ui.menu,name:base.menu_custom_reports
++msgid "Custom Reports"
++msgstr ""
++
++#. module: base
++#: selection:base.language.install,lang:0
++msgid "Abkhazian / аҧсуа"
+ msgstr ""
-"Kies de eenvoudige interface als u OpenERP voor de eerste keer test. Minder "
-"opties gebruikt of velden worden automatisch verborgen. U kunt dit later "
-"wijzigen in het Administratie menu."
+
+ #. module: base
-#: code:addons/osv/orm.py:0
++#: view:base.module.configuration:0
++msgid "System Configuration Done"
++msgstr ""
++
++#. module: base
++#: code:addons/orm.py:929
+ #, python-format
+ msgid "Error occurred while validating the field(s) %s: %s"
+ msgstr ""
+
+ #. module: base
++#: view:ir.property:0
++msgid "Generic"
++msgstr ""
++
++#. module: base
+ #: model:res.country,name:base.sm
+ msgid "San Marino"
-msgstr "San Marino"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.bm
+ msgid "Bermuda"
-msgstr "Bermuda"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.pe
+ msgid "Peru"
-msgstr "Peru"
++msgstr ""
+
+ #. module: base
+ #: selection:ir.model.fields,on_delete:0
+ msgid "Set NULL"
-msgstr "Set NULL"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.bj
+ msgid "Benin"
-msgstr "Benin"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_CONNECT"
-msgstr "STOCK_CONNECT"
++#: code:addons/base/publisher_warranty/publisher_warranty.py:281
++#, python-format
++msgid "That contract is already registered in the system."
++msgstr ""
+
+ #. module: base
-#: selection:ir.model.fields,select_level:0
-msgid "Not Searchable"
-msgstr "Niet Zoekbaar"
++#: help:ir.sequence,suffix:0
++msgid "Suffix value of the record for the sequence"
++msgstr ""
+
+ #. module: base
-#: field:res.partner.event.type,key:0
-msgid "Key"
-msgstr "Sleutel"
++#: selection:base.language.install,lang:0
++msgid "Spanish (PY) / Español (PY)"
++msgstr ""
+
+ #. module: base
-#: field:ir.cron,nextcall:0
-msgid "Next Call Date"
++#: field:ir.config_parameter,key:0
++msgid "Key"
+ msgstr ""
+
+ #. module: base
+ #: field:res.company,rml_header:0
+ msgid "RML Header"
+ msgstr ""
+
+ #. module: base
-#: wizard_field:res.partner.sms_send,init,app_id:0
++#: field:partner.sms.send,app_id:0
+ msgid "API ID"
-msgstr "API ID"
++msgstr ""
++
++#. module: base
++#: code:addons/base/ir/ir_model.py:486
++#, python-format
++msgid ""
++"You can not create this document (%s) ! Be sure your user belongs to one of "
++"these groups: %s."
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.mu
+ msgid "Mauritius"
-msgstr "Mauritius"
++msgstr ""
+
+ #. module: base
-#: wizard_view:module.module.update,init:0
-msgid "Scan for new modules"
-msgstr "Zoeken naar nieuwe modules"
++#: view:ir.model.access:0
++#: view:ir.rule:0
++msgid "Full Access"
++msgstr ""
+
+ #. module: base
++#: view:ir.actions.act_window:0
++#: view:ir.actions.report.xml:0
++#: view:ir.actions.wizard:0
++#: view:ir.model.fields:0
+ #: model:ir.ui.menu,name:base.menu_security
+ msgid "Security"
-msgstr "Beveiliging"
++msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/ir/ir_report_custom.py:0
-#, python-format
-msgid "Using a relation field which uses an unknown object"
++#: model:res.widget,title:base.openerp_favorites_twitter_widget
++msgid "OpenERP Favorites"
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.za
+ msgid "South Africa"
-msgstr "Zuid-Afrika"
-
-#. module: base
-#: model:ir.model,name:base.model_wizard_module_lang_export
-msgid "wizard.module.lang.export"
-msgstr "wizard.module.lang.export"
++msgstr ""
+
+ #. module: base
++#: view:ir.module.module:0
+ #: selection:ir.module.module,state:0
+ #: selection:ir.module.module.dependency,state:0
+ msgid "Installed"
-msgstr "Geïnstalleerd"
++msgstr ""
++
++#. module: base
++#: selection:base.language.install,lang:0
++msgid "Ukrainian / українська"
++msgstr ""
++
++#. module: base
++#: model:ir.actions.act_window,name:base.action_translation
++#: model:ir.ui.menu,name:base.menu_action_translation
++msgid "Translation Terms"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.sn
+ msgid "Senegal"
-msgstr "Senegal"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.hu
+ msgid "Hungary"
-msgstr "Hongarije"
++msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_res_groups
+ msgid "res.groups"
-msgstr "res.groups"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.br
+ msgid "Brazil"
-msgstr "Brazilië"
++msgstr ""
++
++#. module: base
++#: view:res.lang:0
++msgid "%M - Minute [00,59]."
++msgstr ""
++
++#. module: base
++#: selection:ir.module.module,license:0
++msgid "Affero GPL-3"
++msgstr ""
+
+ #. module: base
+ #: field:ir.sequence,number_next:0
+ msgid "Next Number"
-msgstr "Volgende nummer"
++msgstr ""
+
+ #. module: base
-#: view:res.currency:0
-#: field:res.currency,rate_ids:0
-msgid "Rates"
++#: help:workflow.transition,condition:0
++msgid "Expression to be satisfied if we want the transition done."
++msgstr ""
++
++#. module: base
++#: selection:base.language.install,lang:0
++msgid "Spanish (PA) / Español (PA)"
+ msgstr ""
+
+ #. module: base
-#: selection:module.lang.install,init,lang:0
-msgid "Albanian / Shqipëri"
++#: view:res.currency:0
++#: field:res.currency,rate_ids:0
++msgid "Rates"
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.sy
+ msgid "Syria"
-msgstr "Syrië"
++msgstr ""
+
+ #. module: base
+ #: view:res.lang:0
+ msgid "======================================================"
-msgstr "======================================================"
-
-#. module: base
-#: field:ir.report.custom.fields,field_child3:0
-msgid "Field child3"
+ msgstr ""
+
+ #. module: base
-#: field:ir.report.custom.fields,field_child0:0
-msgid "Field child0"
++#: help:ir.actions.server,mobile:0
++msgid ""
++"Provides fields that be used to fetch the mobile number, e.g. you select the "
++"invoice, then `object.invoice_address_id.mobile` is the field which gives "
++"the correct mobile number"
+ msgstr ""
+
+ #. module: base
-#: field:ir.report.custom.fields,field_child1:0
-msgid "Field child1"
++#: view:base.module.upgrade:0
++msgid "System update completed"
+ msgstr ""
+
+ #. module: base
-#: field:ir.model.fields,selection:0
-msgid "Field Selection"
++#: selection:res.request,state:0
++msgid "draft"
+ msgstr ""
+
+ #. module: base
++#: selection:ir.property,type:0
++#: field:res.currency,date:0
+ #: field:res.currency.rate,name:0
+ #: field:res.partner,date:0
+ #: field:res.partner.event,date:0
+ #: field:res.request,date_sent:0
+ msgid "Date"
-msgstr "datum"
++msgstr ""
+
+ #. module: base
+ #: field:ir.actions.report.xml,report_sxw:0
+ msgid "SXW path"
-msgstr "SXW pad"
++msgstr ""
+
+ #. module: base
+ #: view:ir.attachment:0
+ msgid "Data"
-msgstr "Gegevens"
-
-#. module: base
-#: field:ir.cron,user_id:0
-#: field:ir.ui.view.custom,user_id:0
-#: field:ir.values,user_id:0
-#: field:res.partner.event,user_id:0
-#: view:res.users:0
-msgid "User"
-msgstr "Gebruiker"
-
-#. module: base
-#: view:res.users:0
-msgid "Groups are used to defined access rights on each screen and menu."
-msgstr ""
-"Groepen worden gebruikt om toegang tot schermen en menu's te verlenen."
++msgstr ""
+
+ #. module: base
+ #: field:ir.ui.menu,parent_id:0
+ #: field:wizard.ir.model.menu.create,menu_id:0
+ msgid "Parent Menu"
-msgstr "Bovenliggend Menu"
++msgstr ""
+
+ #. module: base
-#: help:ir.actions.act_window.view,multi:0
-#: help:ir.actions.report.custom,multi:0
-#: help:ir.actions.report.xml,multi:0
-msgid ""
-"If set to true, the action will not be displayed on the right toolbar of a "
-"form view."
++#: field:ir.rule,perm_unlink:0
++msgid "Apply For Delete"
++msgstr ""
++
++#. module: base
++#: code:addons/base/ir/ir_model.py:319
++#, python-format
++msgid "Cannot rename column to %s, because that column already exists!"
+ msgstr ""
+
+ #. module: base
+ #: view:ir.attachment:0
+ msgid "Attached To"
+ msgstr ""
+
+ #. module: base
+ #: field:res.lang,decimal_point:0
+ msgid "Decimal Separator"
-msgstr "Decimaal scheidingsteken"
++msgstr ""
++
++#. module: base
++#: model:ir.actions.act_window,help:base.action_res_groups
++msgid ""
++"A group is a set of functional areas that will be assigned to the user in "
++"order to give them access and rights to specific applications and tasks in "
++"the system. You can create custom groups or edit the ones existing by "
++"default in order to customize the view of the menu that users will be able "
++"to see. Whether they can have a read, write, create and delete access right "
++"can be managed from here."
++msgstr ""
+
+ #. module: base
+ #: view:res.partner:0
+ #: view:res.request:0
+ #: field:res.request,history:0
+ msgid "History"
+ msgstr ""
+
+ #. module: base
+ #: field:ir.attachment,create_uid:0
+ msgid "Creator"
-msgstr "Maker"
++msgstr ""
++
++#. module: base
++#: model:res.company,overdue_msg:base.main_company
++msgid ""
++"Please note that the following payments are now due. If your payment "
++" has been sent, kindly forward your payment details. If "
++"payment will be delayed further, please contact us "
++"to discuss. \n"
++"Would your payment have been carried out after this mail was sent, please "
++"consider the present one as void."
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.mx
+ msgid "Mexico"
-msgstr "Mexico"
++msgstr ""
+
+ #. module: base
-#: selection:module.lang.install,init,lang:0
-msgid "Swedish / svenska"
-msgstr "Sweeds / svenska"
++#: model:ir.ui.menu,name:base.menu_base_config_plugins
++msgid "Plugins"
++msgstr ""
+
+ #. module: base
+ #: field:res.company,child_ids:0
+ msgid "Child Companies"
+ msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_res_users
+ msgid "res.users"
-msgstr "res.users"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.ni
+ msgid "Nicaragua"
-msgstr "Nicaragua"
++msgstr ""
+
+ #. module: base
-#: code:addons/osv/orm.py:0
++#: code:addons/orm.py:1046
+ #, python-format
+ msgid "The write method is not implemented on this object !"
+ msgstr ""
+
+ #. module: base
+ #: view:res.partner.event:0
+ msgid "General Description"
-msgstr "Algemene Omschrijving"
++msgstr ""
+
+ #. module: base
-#: selection:res.partner.event,type:0
-msgid "Sale Opportunity"
++#: model:ir.actions.act_window,name:base.action_config_simple_view_form
++#: view:res.config.view:0
++msgid "Configure Your Interface"
+ msgstr ""
+
+ #. module: base
+ #: field:ir.values,meta:0
+ msgid "Meta Datas"
+ msgstr ""
+
+ #. module: base
-#: field:ir.rule,field_id:0
-#: selection:ir.translation,type:0
-msgid "Field"
-msgstr "Veld"
++#: sql_constraint:ir.ui.view_sc:0
++msgid "Shortcut for this menu already exists!"
++msgstr ""
++
++#. module: base
++#: model:res.country,name:base.ve
++msgid "Venezuela"
++msgstr ""
+
+ #. module: base
+ #: view:res.lang:0
+ msgid "9. %j ==> 340"
-msgstr "9. %j ==> 340"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.zm
+ msgid "Zambia"
-msgstr "Zambia"
-
-#. module: base
-#: model:ir.actions.act_window,name:base.ir_action_report_xml
-#: model:ir.ui.menu,name:base.menu_ir_action_report_xml
-msgid "Report Xml"
-msgstr "Rapport Xml"
++msgstr ""
+
+ #. module: base
+ #: help:res.partner,user_id:0
+ msgid ""
+ "The internal user that is in charge of communicating with this partner if "
+ "any."
+ msgstr ""
+
+ #. module: base
++#: field:res.partner,parent_id:0
++msgid "Parent Partner"
++msgstr ""
++
++#. module: base
+ #: view:ir.module.module:0
+ msgid "Cancel Upgrade"
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.ci
+ msgid "Ivory Coast (Cote D'Ivoire)"
-msgstr "Ivoorkust"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.kz
+ msgid "Kazakhstan"
-msgstr "Kazachstan"
++msgstr ""
++
++#. module: base
++#: view:res.lang:0
++msgid "%w - Weekday number [0(Sunday),6]."
++msgstr ""
++
++#. module: base
++#: model:ir.actions.act_window,help:base.action_partner_form
++msgid ""
++"A customer is an entity you do business with, like a company or an "
++"organization. A customer can have several contacts or addresses which are "
++"the people working for this company. You can use the history tab, to follow "
++"all transactions related to a customer: sales order, emails, opportunities, "
++"claims, etc. If you use the email gateway, the Outlook or the Thunderbird "
++"plugin, don't forget to register emails to each contact so that the gateway "
++"will automatically attach incoming emails to the right partner."
++msgstr ""
+
+ #. module: base
+ #: field:ir.actions.report.xml,name:0
+ #: field:ir.actions.todo,name:0
+ #: field:ir.cron,name:0
+ #: field:ir.model.access,name:0
+ #: field:ir.model.fields,name:0
+ #: field:ir.module.category,name:0
+ #: field:ir.module.module,name:0
+ #: field:ir.module.module.dependency,name:0
-#: rml:ir.module.reference:0
-#: field:ir.module.repository,name:0
++#: report:ir.module.reference.graph:0
+ #: field:ir.property,name:0
-#: field:ir.report.custom.fields,name:0
++#: field:ir.rule,name:0
++#: field:ir.sequence,name:0
++#: field:ir.sequence.type,name:0
+ #: field:ir.values,name:0
-#: field:maintenance.contract.module,name:0
++#: field:multi_company.default,name:0
+ #: field:res.bank,name:0
+ #: field:res.config.view,name:0
+ #: field:res.lang,name:0
+ #: field:res.partner,name:0
+ #: field:res.partner.bank.type,name:0
++#: view:res.partner.event:0
+ #: field:res.request.link,name:0
-#: field:res.users,name:0
+ #: field:workflow,name:0
+ #: field:workflow.activity,name:0
+ msgid "Name"
-msgstr "Naam"
++msgstr ""
++
++#. module: base
++#: help:ir.actions.act_window,multi:0
++msgid ""
++"If set to true, the action will not be displayed on the right toolbar of a "
++"form view"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.ms
+ msgid "Montserrat"
+ msgstr ""
+
+ #. module: base
++#: code:addons/base/ir/ir_model.py:205
++#, python-format
++msgid ""
++"The Selection Options expression is not a valid Pythonic expression.Please "
++"provide an expression in the [('key','Label'), ...] format."
++msgstr ""
++
++#. module: base
+ #: model:ir.ui.menu,name:base.menu_translation_app
+ msgid "Application Terms"
+ msgstr ""
+
+ #. module: base
-#: selection:ir.report.custom.fields,operation:0
-msgid "Calculate Average"
-msgstr "Bereken Gemiddelde"
++#: help:res.config.users,context_tz:0
++#: help:res.users,context_tz:0
++msgid ""
++"The user's timezone, used to perform timezone conversions between the server "
++"and the client."
++msgstr ""
+
+ #. module: base
+ #: field:ir.module.module,demo:0
+ msgid "Demo data"
-msgstr "Demo gegevens"
++msgstr ""
+
+ #. module: base
-#: model:ir.actions.act_window,name:base.action_workflow_instance_form
-#: model:ir.ui.menu,name:base.menu_workflow_instance
-msgid "Instances"
-msgstr "Exemplaren"
++#: selection:base.language.install,lang:0
++msgid "English (UK)"
++msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.aq
-msgid "Antarctica"
-msgstr "Antarctica"
++#: selection:base.language.install,lang:0
++msgid "Japanese / 日本語"
++msgstr ""
++
++#. module: base
++#: help:workflow.transition,act_from:0
++msgid ""
++"Source activity. When this activity is over, the condition is tested to "
++"determine if we can start the ACT_TO activity."
++msgstr ""
+
+ #. module: base
+ #: model:res.partner.category,name:base.res_partner_category_3
+ msgid "Starter Partner"
+ msgstr ""
+
+ #. module: base
++#: help:ir.model.fields,relation_field:0
++msgid ""
++"For one2many fields, the field on the target model that implement the "
++"opposite many2one relationship"
++msgstr ""
++
++#. module: base
+ #: model:ir.model,name:base.model_ir_actions_act_window_view
+ msgid "ir.actions.act_window.view"
-msgstr "ir.actions.act_window.view"
++msgstr ""
+
+ #. module: base
-#: rml:ir.module.reference:0
++#: report:ir.module.reference.graph:0
+ msgid "Web"
-msgstr "Web"
-
-#. module: base
-#: code:addons/osv/orm.py:0
-#, python-format
-msgid ""
-"You try to write on an record that doesn't exist ' \\n "
-" '(Document type: %s)."
+ msgstr ""
+
+ #. module: base
-#: field:res.bank,zip:0
-#: field:res.partner.address,zip:0
-#: field:res.partner.bank,zip:0
-msgid "Zip"
-msgstr "Postcode"
-
-#. module: base
-#: field:res.partner.event,planned_revenue:0
-msgid "Planned Revenue"
-msgstr "Geraamde Opbrengst"
++#: selection:base.language.install,lang:0
++msgid "English (CA)"
++msgstr ""
+
+ #. module: base
-#: wizard_view:module.lang.import,init:0
-msgid ""
-"You have to import a .CSV file wich is encoded in UTF-8. Please check that "
-"the first line of your file is one of the following:"
++#: model:ir.model,name:base.model_publisher_warranty_contract
++msgid "publisher_warranty.contract"
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.et
+ msgid "Ethiopia"
-msgstr "Ethiopië"
-
-#. module: base
-#: view:res.lang:0
-msgid "%H - Hour (24-hour clock) as a decimal number [00,23]."
-msgstr "%H - Uur (24-uurs aanduiding) als een decimaal getal [00,23]."
++msgstr ""
+
+ #. module: base
-#: view:res.roles:0
-msgid "Role"
-msgstr "Rol"
++#: help:res.country.state,code:0
++msgid "The state code in three chars.\n"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.sj
+ msgid "Svalbard and Jan Mayen Islands"
-msgstr "Svalbard en Jan Mayen eilanden"
++msgstr ""
+
+ #. module: base
-#: view:ir.rule:0
-msgid "Test"
-msgstr "Test"
++#: model:ir.model,name:base.model_ir_actions_wizard
++#: selection:ir.ui.menu,action:0
++msgid "ir.actions.wizard"
++msgstr ""
+
+ #. module: base
-#: field:ir.report.custom.fields,groupby:0
++#: view:ir.actions.act_window:0
++#: view:ir.actions.report.xml:0
++#: view:ir.actions.server:0
++#: view:ir.filters:0
++#: view:res.request:0
+ msgid "Group By"
-msgstr "Groeperen op"
++msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/ir/ir_model.py:0
-#, python-format
-msgid "'%s' contains too many dots. XML ids should not contain dots ! These are used to refer to other modules data, as in module.reference_id"
++#: view:res.config:0
++#: view:res.config.installer:0
++msgid "title"
+ msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_DIALOG_WARNING"
-msgstr "STOCK_DIALOG_WARNING"
++#: model:ir.model,name:base.model_base_language_install
++msgid "Install Language"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_ZOOM_IN"
-msgstr "STOCK_ZOOM_IN"
++#: view:ir.translation:0
++msgid "Translation"
++msgstr ""
+
+ #. module: base
+ #: selection:res.request,state:0
+ msgid "closed"
+ msgstr ""
+
+ #. module: base
-#: selection:wizard.module.lang.export,state:0
++#: selection:base.language.export,state:0
+ msgid "get"
+ msgstr ""
+
+ #. module: base
+ #: help:ir.model.fields,on_delete:0
+ msgid "On delete property for many2one fields"
+ msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.do
-msgid "Dominican Republic"
-msgstr "Dominicaanse Republiek"
++#: field:ir.actions.server,write_id:0
++msgid "Write Id"
++msgstr ""
+
+ #. module: base
-#: field:ir.actions.act_window,domain:0
-msgid "Domain Value"
++#: model:ir.ui.menu,name:base.menu_product
++msgid "Products"
+ msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_ITALIC"
-msgstr "STOCK_ITALIC"
++#: field:ir.actions.act_window,domain:0
++#: field:ir.filters,domain:0
++msgid "Domain Value"
++msgstr ""
+
+ #. module: base
+ #: view:ir.actions.server:0
+ msgid "SMS Configuration"
-msgstr "SMS instellingen"
++msgstr ""
++
++#. module: base
++#: selection:base.language.install,lang:0
++msgid "Spanish (BO) / Español (BO)"
++msgstr ""
+
+ #. module: base
+ #: model:ir.actions.act_window,name:base.ir_access_act
+ #: model:ir.ui.menu,name:base.menu_ir_access_act
+ msgid "Access Controls List"
-msgstr "Toegangscontrole Lijst"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.um
+ msgid "USA Minor Outlying Islands"
+ msgstr ""
+
+ #. module: base
+ #: field:res.partner.bank,state:0
+ #: field:res.partner.bank.type.field,bank_type_id:0
+ msgid "Bank Type"
+ msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/res/res_user.py:0
++#: code:addons/base/res/res_user.py:58
++#: code:addons/base/res/res_user.py:67
+ #, python-format
+ msgid "The name of the group can not start with \"-\""
-msgstr "De naam van de groep kan niet beginnen met \"-\""
-
-#. module: base
-#: wizard_view:module.upgrade,end:0
-#: wizard_view:module.upgrade,start:0
-msgid "We suggest you to reload the menu tab (Ctrl+t Ctrl+r)."
+ msgstr ""
+
+ #. module: base
+ #: view:ir.ui.view_sc:0
+ #: field:res.partner.title,shortcut:0
+ msgid "Shortcut"
+ msgstr ""
+
+ #. module: base
+ #: field:ir.model.data,date_init:0
+ msgid "Init Date"
+ msgstr ""
+
+ #. module: base
++#: selection:base.language.install,lang:0
++msgid "Gujarati / ગુજરાતી"
++msgstr ""
++
++#. module: base
++#: code:addons/base/module/module.py:257
++#, python-format
++msgid ""
++"Unable to process module \"%s\" because an external dependency is not met: %s"
++msgstr ""
++
++#. module: base
++#: view:publisher_warranty.contract.wizard:0
++msgid "Please enter the serial key provided in your contract document:"
++msgstr ""
++
++#. module: base
++#: view:workflow.activity:0
+ #: field:workflow.activity,flow_start:0
+ msgid "Flow Start"
+ msgstr ""
+
+ #. module: base
-#: view:ir.model:0
-#: view:ir.model.fields:0
-msgid "Security on Groups"
++#: code:addons/__init__.py:834
++#, python-format
++msgid "module base cannot be loaded! (hint: verify addons-path)"
+ msgstr ""
+
+ #. module: base
+ #: view:res.partner.bank:0
+ msgid "Bank Account Owner"
-msgstr "Rekeninghouder"
++msgstr ""
+
+ #. module: base
+ #: model:ir.actions.act_window,name:base.act_values_form
-#: model:ir.ui.menu,name:base.menu_values_form
+ msgid "Client Actions Connections"
+ msgstr ""
+
+ #. module: base
++#: field:ir.attachment,res_name:0
+ #: field:ir.ui.view_sc,resource:0
+ msgid "Resource Name"
+ msgstr ""
+
+ #. module: base
+ #: selection:ir.cron,interval_type:0
+ msgid "Hours"
-msgstr "Uren"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.gp
+ msgid "Guadeloupe (French)"
+ msgstr ""
+
+ #. module: base
-#: field:ir.report.custom.fields,cumulate:0
-msgid "Accumulate"
-msgstr "Verzamelen"
++#: code:addons/base/res/res_lang.py:157
++#: code:addons/base/res/res_lang.py:159
++#: code:addons/base/res/res_lang.py:161
++#, python-format
++msgid "User Error"
++msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/ir/ir_report_custom.py:0
-#, python-format
-msgid "Tree can only be used in tabular reports"
++#: help:workflow.transition,signal:0
++msgid ""
++"When the operation of transition comes from a button pressed in the client "
++"form, signal tests the name of the pressed button. If signal is NULL, no "
++"button is necessary to validate this transition."
++msgstr ""
++
++#. module: base
++#: help:multi_company.default,object_id:0
++msgid "Object affected by this rule"
+ msgstr ""
+
+ #. module: base
-#: rml:ir.module.reference:0
++#: report:ir.module.reference.graph:0
+ msgid "Directory"
+ msgstr ""
+
+ #. module: base
+ #: field:wizard.ir.model.menu.create,name:0
+ msgid "Menu Name"
+ msgstr ""
+
+ #. module: base
-#: field:ir.report.custom,title:0
-msgid "Report Title"
++#: view:ir.module.module:0
++msgid "Author Website"
+ msgstr ""
+
+ #. module: base
-#: field:ir.report.custom.fields,fontcolor:0
-msgid "Font color"
-msgstr "Tekstkleur"
-
-#. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_SORT_DESCENDING"
-msgstr "STOCK_SORT_DESCENDING"
++#: view:ir.attachment:0
++msgid "Month"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.my
+ msgid "Malaysia"
-msgstr "Maleisië"
++msgstr ""
++
++#. module: base
++#: view:base.language.install:0
++#: model:ir.actions.act_window,name:base.action_view_base_language_install
++msgid "Load Official Translation"
++msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_res_request_history
+ msgid "res.request.history"
-msgstr "res.request.history"
++msgstr ""
+
+ #. module: base
+ #: view:ir.actions.server:0
+ msgid "Client Action Configuration"
+ msgstr ""
+
+ #. module: base
-#: model:ir.actions.act_window,name:base.action_partner_address_form
+ #: model:ir.model,name:base.model_res_partner_address
+ #: view:res.partner.address:0
+ msgid "Partner Addresses"
-msgstr "Relatie adressen"
++msgstr ""
+
+ #. module: base
-#: selection:module.lang.install,init,lang:0
-msgid "Indonesian / Bahasa Indonesia"
++#: help:ir.model.fields,translate:0
++msgid ""
++"Whether values for this field can be translated (enables the translation "
++"mechanism for that field)"
+ msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.as
-msgid "American Samoa"
-msgstr "Amerikaans Samoa"
++#: view:res.lang:0
++msgid "%S - Seconds [00,61]."
++msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/module/module.py:0
-#, python-format
-msgid ""
-"Some installed modules depend on the module you plan to Uninstall :\n"
-" %s"
++#: model:res.country,name:base.cv
++msgid "Cape Verde"
++msgstr ""
++
++#. module: base
++#: view:base.module.import:0
++msgid "Select module package to import (.zip file):"
+ msgstr ""
+
+ #. module: base
+ #: model:ir.actions.act_window,name:base.act_res_partner_event
+ #: field:res.partner,events:0
+ #: field:res.partner.event,name:0
++#: model:res.widget,title:base.events_widget
+ msgid "Events"
+ msgstr ""
+
+ #. module: base
-#: model:ir.actions.act_window,name:base.action_res_roles
-#: model:ir.ui.menu,name:base.menu_action_res_roles
-msgid "Roles Structure"
-msgstr ""
-
-#. module: base
+ #: model:ir.model,name:base.model_ir_actions_url
+ #: selection:ir.ui.menu,action:0
+ msgid "ir.actions.url"
-msgstr "ir.actions.url"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_MEDIA_STOP"
-msgstr "STOCK_MEDIA_STOP"
++#: model:res.widget,title:base.currency_converter_widget
++msgid "Currency Converter"
++msgstr ""
+
+ #. module: base
-#: code:addons/osv/orm.py:0
++#: code:addons/orm.py:156
+ #, python-format
+ msgid "Wrong ID for the browse record, got %r, expected an integer."
+ msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_DND_MULTIPLE"
-msgstr "STOCK_DND_MULTIPLE"
-
-#. module: base
+ #: model:ir.actions.act_window,name:base.action_partner_addess_tree
+ #: view:res.partner:0
+ msgid "Partner Contacts"
-msgstr "Contactpersonen"
++msgstr ""
+
+ #. module: base
-#: wizard_field:module.module.update,update,add:0
++#: field:base.module.update,add:0
+ msgid "Number of modules added"
-msgstr "Aantal toegevoegde modules"
++msgstr ""
+
+ #. module: base
-#: field:workflow.transition,role_id:0
-msgid "Role Required"
-msgstr "Rol Vereist"
++#: view:res.currency:0
++msgid "Price Accuracy"
++msgstr ""
+
+ #. module: base
-#: view:ir.module.module:0
-msgid "Created Menus"
-msgstr "Aangemaakte Menu's"
++#: selection:base.language.install,lang:0
++msgid "Latvian / latviešu valoda"
++msgstr ""
+
+ #. module: base
-#: field:workflow.triggers,workitem_id:0
-msgid "Workitem"
++#: view:res.config:0
++#: view:res.config.installer:0
++msgid "vsep"
++msgstr ""
++
++#. module: base
++#: selection:base.language.install,lang:0
++msgid "French / Français"
+ msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_INDENT"
-msgstr "STOCK_INDENT"
++#: code:addons/orm.py:1049
++#, python-format
++msgid "The create method is not implemented on this object !"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_ZOOM_OUT"
-msgstr "STOCK_ZOOM_OUT"
++#: field:workflow.triggers,workitem_id:0
++msgid "Workitem"
++msgstr ""
+
+ #. module: base
-#: model:ir.model,name:base.model_ir_ui_view
-msgid "ir.ui.view"
-msgstr "ir.ui.view"
++#: view:ir.actions.todo:0
++msgid "Set as Todo"
++msgstr ""
++
++#. module: base
++#: field:ir.actions.act_window.view,act_window_id:0
++#: view:ir.actions.actions:0
++#: field:ir.actions.todo,action_id:0
++#: field:ir.ui.menu,action:0
++#: field:ir.values,action_id:0
++#: selection:ir.values,key:0
++#: view:res.users:0
++msgid "Action"
++msgstr ""
+
+ #. module: base
+ #: view:ir.actions.server:0
+ msgid "Email Configuration"
-msgstr "Email Configuratie"
++msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_ir_cron
+ msgid "ir.cron"
-msgstr "ir.cron"
++msgstr ""
+
+ #. module: base
-#: field:res.request,act_to:0
-#: field:res.request.history,act_to:0
-msgid "To"
-msgstr "Aan"
++#: view:ir.rule:0
++msgid "Combination of rules"
++msgstr ""
++
++#. module: base
++#: view:ir.sequence:0
++msgid "Current Year without Century: %(y)s"
++msgstr ""
+
+ #. module: base
+ #: field:ir.actions.server,trigger_obj_id:0
+ msgid "Trigger On"
+ msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.fj
-msgid "Fiji"
-msgstr "Fiji"
++#: sql_constraint:ir.rule:0
++msgid "Rule must have at least one checked access right !"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_CLOSE"
-msgstr "STOCK_CLOSE"
++#: model:res.country,name:base.fj
++msgid "Fiji"
++msgstr ""
+
+ #. module: base
-#: view:res.lang:0
-msgid "%m - Month as a decimal number [01,12]."
-msgstr "%m - Maand als een decimaal getal [01,12]."
++#: field:ir.model.fields,size:0
++msgid "Size"
++msgstr ""
+
+ #. module: base
-#: view:wizard.module.lang.export:0
-msgid "Export Data"
-msgstr "Gegevens exporteren"
++#: model:res.country,name:base.sd
++msgid "Sudan"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.fm
+ msgid "Micronesia"
-msgstr "Micronesië"
++msgstr ""
+
+ #. module: base
+ #: view:res.request.history:0
+ msgid "Request History"
+ msgstr ""
+
+ #. module: base
++#: field:ir.actions.act_window,menus:0
+ #: field:ir.module.module,menus_by_module:0
+ #: view:res.groups:0
+ msgid "Menus"
-msgstr "Menu's"
++msgstr ""
++
++#. module: base
++#: selection:base.language.install,lang:0
++msgid "Serbian (Latin) / srpski"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.il
+ msgid "Israel"
-msgstr "Israël"
++msgstr ""
+
+ #. module: base
+ #: model:ir.actions.wizard,name:base.wizard_server_action_create
+ msgid "Create Action"
+ msgstr ""
+
+ #. module: base
+ #: model:ir.actions.act_window,name:base.action_model_model
+ #: model:ir.model,name:base.model_ir_model
+ #: model:ir.ui.menu,name:base.ir_model_model_menu
+ msgid "Objects"
-msgstr "Objecten"
++msgstr ""
+
+ #. module: base
+ #: field:res.lang,time_format:0
+ msgid "Time Format"
-msgstr "Tijdnotatie"
-
-#. module: base
-#: wizard_view:module.upgrade,next:0
-msgid "Your system will be upgraded."
+ msgstr ""
+
+ #. module: base
+ #: view:ir.module.module:0
+ msgid "Defined Reports"
-msgstr "Gedefinieerde Rapporten"
-
-#. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "terp-tools"
-msgstr "terp-tools"
++msgstr ""
+
+ #. module: base
+ #: view:ir.actions.report.xml:0
+ msgid "Report xml"
-msgstr "XML Rapport"
++msgstr ""
+
+ #. module: base
++#: field:base.language.export,modules:0
+ #: model:ir.actions.act_window,name:base.action_module_open_categ
+ #: model:ir.actions.act_window,name:base.open_module_tree
+ #: view:ir.module.module:0
++#: model:ir.ui.menu,name:base.menu_management
+ #: model:ir.ui.menu,name:base.menu_module_tree
-#: field:wizard.module.lang.export,modules:0
+ msgid "Modules"
-msgstr "Modules"
++msgstr ""
+
+ #. module: base
++#: view:workflow.activity:0
+ #: selection:workflow.activity,kind:0
+ #: field:workflow.activity,subflow_id:0
+ #: field:workflow.workitem,subflow_id:0
+ msgid "Subflow"
+ msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_UNDO"
-msgstr "STOCK_UNDO"
++#: model:ir.model,name:base.model_res_config
++msgid "res.config"
++msgstr ""
+
+ #. module: base
+ #: field:workflow.transition,signal:0
+ msgid "Signal (button Name)"
+ msgstr ""
+
+ #. module: base
+ #: model:ir.actions.act_window,name:base.action_res_bank_form
+ #: model:ir.ui.menu,name:base.menu_action_res_bank_form
+ #: view:res.bank:0
+ #: field:res.partner,bank_ids:0
+ msgid "Banks"
-msgstr "Banken"
-
-#. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "terp-sale"
-msgstr "terp-sale"
-
-#. module: base
-#: view:res.lang:0
-msgid "%d - Day of the month as a decimal number [01,31]."
-msgstr "%d - Dag van de maand als decimaal getal [01,31]."
-
-#. module: base
-#: view:res.lang:0
-msgid "%I - Hour (12-hour clock) as a decimal number [01,12]."
-msgstr "%I - Uur (12-uurs klok) als decimal getal [01,12]."
-
-#. module: base
-#: selection:module.lang.install,init,lang:0
-msgid "Romanian / limba română"
-msgstr "Roemeens / limba română"
-
-#. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_ADD"
-msgstr "STOCK_ADD"
++msgstr ""
+
+ #. module: base
-#: selection:ir.report.custom.fields,fc0_op:0
-#: selection:ir.report.custom.fields,fc1_op:0
-#: selection:ir.report.custom.fields,fc2_op:0
-#: selection:ir.report.custom.fields,fc3_op:0
-#: selection:ir.rule,operator:0
-msgid "in"
++#: view:res.log:0
++msgid "Unread"
+ msgstr ""
+
+ #. module: base
+ #: field:ir.cron,doall:0
+ msgid "Repeat Missed"
-msgstr "Herhaal gemiste"
++msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/module/wizard/wizard_module_import.py:0
-#, python-format
-msgid "Can not create the module file: %s !"
-msgstr "Kan het modulebestand niet aanmaken: %s !"
++#: help:ir.actions.server,state:0
++msgid "Type of the Action that is to be executed"
++msgstr ""
+
+ #. module: base
+ #: field:ir.server.object.lines,server_id:0
+ msgid "Object Mapping"
+ msgstr ""
+
+ #. module: base
+ #: help:res.currency,rate:0
+ #: help:res.currency.rate,rate:0
+ msgid "The rate of the currency to the currency of rate 1"
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.uk
+ msgid "United Kingdom"
-msgstr "Groot-Brittanië"
++msgstr ""
+
+ #. module: base
-#: view:ir.actions.server:0
-msgid "Create / Write"
-msgstr "Aanmaken / Schrijven"
++#: view:res.config:0
++#: view:res.config.users:0
++#: view:res.config.view:0
++msgid "res_config_contents"
++msgstr ""
+
+ #. module: base
+ #: help:res.partner.category,active:0
+ msgid "The active field allows you to hide the category without removing it."
+ msgstr ""
-"Het actieve veld staat toe dat de categorie wordt verborgen zonder ze te "
-"verwijderen."
+
+ #. module: base
-#: rml:ir.module.reference:0
++#: report:ir.module.reference.graph:0
+ msgid "Object:"
-msgstr "Object:"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.bw
+ msgid "Botswana"
-msgstr "Botswana"
-
-#. module: base
-#: view:ir.module.module:0
-msgid "Uninstall (beta)"
+ msgstr ""
+
+ #. module: base
+ #: model:ir.actions.act_window,name:base.action_partner_title_partner
+ #: model:ir.ui.menu,name:base.menu_partner_title_partner
+ #: view:res.partner.title:0
+ msgid "Partner Titles"
-msgstr "Relatietitels"
-
-#. module: base
-#: selection:ir.actions.todo,type:0
-msgid "Service"
-msgstr "Dienst"
++msgstr ""
+
+ #. module: base
+ #: help:ir.actions.act_window,auto_refresh:0
+ msgid "Add an auto-refresh on the view"
-msgstr "Automatisch herladen aan weergave toevoegen"
++msgstr ""
++
++#. module: base
++#: help:res.partner,employee:0
++msgid "Check this box if the partner is an Employee."
++msgstr ""
+
+ #. module: base
-#: wizard_view:module.upgrade,next:0
-#: wizard_field:module.upgrade,next,module_download:0
-msgid "Modules to download"
++#: field:ir.actions.report.xml,report_rml_content:0
++#: field:ir.actions.report.xml,report_rml_content_data:0
++msgid "RML content"
+ msgstr ""
+
+ #. module: base
+ #: model:ir.actions.act_window,name:base.action_workflow_workitem_form
+ #: model:ir.ui.menu,name:base.menu_workflow_workitem
+ msgid "Workitems"
+ msgstr ""
+
+ #. module: base
-#: field:wizard.module.lang.export,advice:0
++#: field:base.language.export,advice:0
+ msgid "Advice"
-msgstr "Advies"
++msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_ir_attachment
+ msgid "ir.attachment"
-msgstr "ir.attachment"
++msgstr ""
++
++#. module: base
++#: code:addons/orm.py:3533
++#, python-format
++msgid ""
++"You cannot perform this operation. New Record Creation is not allowed for "
++"this object as this object is for reporting purpose."
++msgstr ""
++
++#. module: base
++#: view:base.language.import:0
++msgid "- module,type,name,res_id,src,value"
++msgstr ""
+
+ #. module: base
-#: selection:module.lang.install,init,lang:0
++#: selection:base.language.install,lang:0
+ msgid "Lithuanian / Lietuvių kalba"
-msgstr "Litouws / Lietuvių kalba"
++msgstr ""
+
+ #. module: base
+ #: help:ir.actions.server,record_id:0
+ msgid ""
+ "Provide the field name where the record id is stored after the create "
+ "operations. If it is empty, you can not track the new record."
+ msgstr ""
-"Geef de veldnaam waar het record id is opgeslagen na de aanmaak operaties. "
-"Als het leeg is kunt u het nieuwe record niet volgen."
+
+ #. module: base
-#: code:addons/osv/orm.py:0
-#, python-format
-msgid "Couldn't find tag '%s' in parent view !"
-msgstr "'%s' niet gevonden in de bovenliggende weergave !"
++#: help:ir.model.fields,relation:0
++msgid "For relationship fields, the technical name of the target model"
++msgstr ""
++
++#. module: base
++#: selection:base.language.install,lang:0
++msgid "Indonesian / Bahasa Indonesia"
++msgstr ""
+
+ #. module: base
+ #: field:ir.ui.view,inherit_id:0
+ msgid "Inherited View"
+ msgstr ""
+
+ #. module: base
-#: model:ir.model,name:base.model_ir_translation
-msgid "ir.translation"
-msgstr "ir.translation"
++#: view:ir.translation:0
++msgid "Source Term"
++msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.lu
-msgid "Luxembourg"
-msgstr "Luxemburg"
++#: model:ir.ui.menu,name:base.menu_main_pm
++msgid "Project"
++msgstr ""
+
+ #. module: base
-#: model:ir.actions.act_window,name:base.open_module_tree_install
-#: model:ir.ui.menu,name:base.menu_module_tree_install
-msgid "Installed modules"
-msgstr "Geïnstalleerde modules"
++#: field:ir.ui.menu,web_icon_hover_data:0
++msgid "Web Icon Image (hover)"
++msgstr ""
+
+ #. module: base
-#: code:addons/osv/orm.py:0
-#, python-format
-msgid "The name_get method is not implemented on this object !"
-msgstr "De name_get methode is niet geïmplementeerd in dit object !"
++#: view:base.module.import:0
++msgid "Module file successfully imported!"
++msgstr ""
++
++#. module: base
++#: selection:ir.actions.todo,state:0
++msgid "Cancelled"
++msgstr ""
++
++#. module: base
++#: view:res.config.users:0
++msgid "Create User"
++msgstr ""
++
++#. module: base
++#: view:partner.clear.ids:0
++msgid "Want to Clear Ids ? "
++msgstr ""
++
++#. module: base
++#: field:publisher_warranty.contract,name:0
++#: field:publisher_warranty.contract.wizard,name:0
++msgid "Serial Key"
++msgstr ""
++
++#. module: base
++#: selection:res.request,priority:0
++msgid "Low"
++msgstr ""
++
++#. module: base
++#: model:ir.ui.menu,name:base.menu_audit
++msgid "Audit"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.lc
+ msgid "Saint Lucia"
-msgstr "Santa Lucia"
++msgstr ""
+
+ #. module: base
-#: model:ir.model,name:base.model_maintenance_contract
-#: view:maintenance.contract:0
++#: view:publisher_warranty.contract:0
+ msgid "Maintenance Contract"
-msgstr "Onderhoudscontract"
++msgstr ""
+
+ #. module: base
+ #: help:ir.actions.server,trigger_obj_id:0
+ msgid "Select the object from the model on which the workflow will executed."
+ msgstr ""
+
+ #. module: base
-#: field:ir.model,state:0
-#: field:ir.model.fields,state:0
-#: field:ir.model.grid,state:0
-msgid "Manually Created"
-msgstr "Handmatig aangemaakt"
-
-#. module: base
-#: selection:ir.report.custom.fields,operation:0
-msgid "Calculate Count"
-msgstr "Bereken Aantal"
++#: field:res.partner,employee:0
++msgid "Employee"
++msgstr ""
+
+ #. module: base
+ #: field:ir.model.access,perm_create:0
+ msgid "Create Access"
+ msgstr ""
+
+ #. module: base
+ #: field:res.partner.address,state_id:0
+ msgid "Fed. State"
-msgstr "Staat/Provincie"
++msgstr ""
++
++#. module: base
++#: field:ir.actions.server,copy_object:0
++msgid "Copy Of"
++msgstr ""
++
++#. module: base
++#: field:ir.model,osv_memory:0
++msgid "In-memory model"
++msgstr ""
++
++#. module: base
++#: view:partner.clear.ids:0
++msgid "Clear Ids"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.io
+ msgid "British Indian Ocean Territory"
-msgstr "Brits Territorium in de Indische Oceaan"
++msgstr ""
++
++#. module: base
++#: field:res.config.users,view:0
++#: field:res.config.view,view:0
++#: field:res.users,view:0
++msgid "Interface"
++msgstr ""
+
+ #. module: base
+ #: view:ir.actions.server:0
+ msgid "Field Mapping"
+ msgstr ""
+
+ #. module: base
-#: field:maintenance.contract,date_start:0
-msgid "Starting Date"
-msgstr "Begindatum"
++#: view:publisher_warranty.contract:0
++msgid "Refresh Validation Dates"
++msgstr ""
+
+ #. module: base
+ #: view:ir.model:0
+ #: field:ir.model.fields,ttype:0
+ msgid "Field Type"
-msgstr "Veldtype"
++msgstr ""
+
+ #. module: base
+ #: field:res.country.state,code:0
+ msgid "State Code"
-msgstr "Staat/Provinciecode"
++msgstr ""
+
+ #. module: base
+ #: field:ir.model.fields,on_delete:0
+ msgid "On delete"
-msgstr "Bij Verwijderen"
++msgstr ""
+
+ #. module: base
+ #: selection:res.lang,direction:0
+ msgid "Left-to-Right"
-msgstr "Links-naar-Rechts"
++msgstr ""
+
+ #. module: base
++#: view:res.lang:0
+ #: field:res.lang,translatable:0
+ msgid "Translatable"
-msgstr "Vertaalbaar"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.vn
+ msgid "Vietnam"
-msgstr "Vietnam"
++msgstr ""
+
+ #. module: base
++#: field:res.config.users,signature:0
++#: view:res.users:0
+ #: field:res.users,signature:0
+ msgid "Signature"
+ msgstr ""
+
+ #. module: base
-#: code:addons/osv/fields.py:0
++#: code:addons/fields.py:456
++#: code:addons/fields.py:654
++#: code:addons/fields.py:656
++#: code:addons/fields.py:658
++#: code:addons/fields.py:660
++#: code:addons/fields.py:662
++#: code:addons/fields.py:664
+ #, python-format
+ msgid "Not Implemented"
-msgstr "Niet geïmplementeerd"
++msgstr ""
++
++#. module: base
++#: model:ir.model,name:base.model_res_widget_user
++msgid "res.widget.user"
++msgstr ""
+
+ #. module: base
+ #: field:res.partner.category,complete_name:0
+ msgid "Full Name"
-msgstr "Volledige naam"
++msgstr ""
++
++#. module: base
++#: view:base.module.configuration:0
++msgid "_Ok"
++msgstr ""
++
++#. module: base
++#: help:ir.filters,user_id:0
++msgid "False means for every user"
++msgstr ""
++
++#. module: base
++#: code:addons/base/module/module.py:198
++#, python-format
++msgid "The name of the module must be unique !"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.mz
+ msgid "Mozambique"
-msgstr "Mozambique"
++msgstr ""
++
++#. module: base
++#: model:ir.ui.menu,name:base.menu_project_long_term
++msgid "Long Term Planning"
++msgstr ""
+
+ #. module: base
+ #: field:ir.actions.server,message:0
-#: wizard_field:res.partner.spam_send,init,text:0
++#: view:partner.sms.send:0
++#: field:partner.wizard.spam,text:0
++#: field:res.log,name:0
+ msgid "Message"
-msgstr "Bericht"
++msgstr ""
+
+ #. module: base
+ #: field:ir.actions.act_window.view,multi:0
+ msgid "On Multiple Doc."
+ msgstr ""
+
+ #. module: base
++#: view:res.partner:0
++#: field:res.partner,user_id:0
++msgid "Salesman"
++msgstr ""
++
++#. module: base
+ #: field:res.partner,address:0
+ #: view:res.partner.address:0
+ msgid "Contacts"
-msgstr "Contactpersonen"
++msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.fo
-msgid "Faroe Islands"
-msgstr "Faeröereilanden"
++#: code:addons/orm.py:3199
++#, python-format
++msgid ""
++"Unable to delete this document because it is used as a default property"
++msgstr ""
++
++#. module: base
++#: view:res.widget.wizard:0
++msgid "Add"
++msgstr ""
+
+ #. module: base
-#: model:ir.actions.wizard,name:base.wizard_upgrade
-#: model:ir.ui.menu,name:base.menu_wizard_upgrade
++#: view:base.module.upgrade:0
++#: model:ir.actions.act_window,name:base.action_view_base_module_upgrade_window
++#: model:ir.ui.menu,name:base.menu_view_base_module_upgrade
+ msgid "Apply Scheduled Upgrades"
-msgstr "Geplande Upgrades Toepassen"
++msgstr ""
+
+ #. module: base
-#: model:ir.ui.menu,name:base.maintenance
-msgid "Maintenance"
-msgstr "Onderhoud"
++#: view:res.widget:0
++msgid "Widgets"
++msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.mp
-msgid "Northern Mariana Islands"
-msgstr "Noordelijke Marianaeilanden"
++#: model:res.country,name:base.cz
++msgid "Czech Republic"
++msgstr ""
++
++#. module: base
++#: view:res.widget.wizard:0
++msgid "Widget Wizard"
++msgstr ""
++
++#. module: base
++#: model:ir.actions.act_window,help:base.act_ir_actions_todo_form
++msgid ""
++"The configuration wizards are used to help you configure a new instance of "
++"OpenERP. They are launched during the installation of new modules, but you "
++"can choose to restart some wizards manually from this menu."
++msgstr ""
++
++#. module: base
++#: code:addons/base/res/res_user.py:206
++#, python-format
++msgid ""
++"Please use the change password wizard (in User Preferences or User menu) to "
++"change your own password."
++msgstr ""
++
++#. module: base
++#: code:addons/orm.py:1350
++#, python-format
++msgid "Insufficient fields for Calendar View!"
++msgstr ""
++
++#. module: base
++#: selection:ir.property,type:0
++msgid "Integer"
++msgstr ""
++
++#. module: base
++#: help:ir.actions.report.xml,report_rml:0
++msgid ""
++"The path to the main report file (depending on Report Type) or NULL if the "
++"content is in another data field"
++msgstr ""
++
++#. module: base
++#: help:res.config.users,company_id:0
++#: help:res.users,company_id:0
++msgid "The company this user is currently working for."
++msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_wizard_ir_model_menu_create
+ msgid "wizard.ir.model.menu.create"
-msgstr "wizard.ir.model.menu.create"
++msgstr ""
+
+ #. module: base
+ #: view:workflow.transition:0
+ msgid "Transition"
-msgstr "Overgang"
++msgstr ""
+
+ #. module: base
-#: field:ir.actions.todo,active:0
-#: field:ir.cron,active:0
-#: field:ir.module.repository,active:0
-#: field:ir.sequence,active:0
-#: field:res.bank,active:0
-#: field:res.currency,active:0
-#: field:res.lang,active:0
-#: field:res.partner,active:0
-#: field:res.partner.address,active:0
-#: field:res.partner.canal,active:0
-#: field:res.partner.category,active:0
-#: field:res.partner.event.type,active:0
-#: field:res.request,active:0
-#: field:res.users,active:0
-msgid "Active"
-msgstr "Actief"
++#: field:res.groups,menu_access:0
++msgid "Access Menu"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.na
+ msgid "Namibia"
-msgstr "Namibië"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.mn
+ msgid "Mongolia"
-msgstr "Mongolië"
++msgstr ""
+
+ #. module: base
-#: view:res.partner.som:0
-msgid "Partner State of Mind"
++#: view:ir.module.module:0
++msgid "Created Menus"
+ msgstr ""
+
+ #. module: base
+ #: selection:ir.ui.view,type:0
+ msgid "mdx"
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.bi
+ msgid "Burundi"
-msgstr "Burundi"
++msgstr ""
++
++#. module: base
++#: view:base.language.install:0
++#: view:base.module.import:0
++#: view:base.module.update:0
++#: view:publisher_warranty.contract.wizard:0
++#: view:res.request:0
++#: wizard_button:server.action.create,init,end:0
++#: wizard_button:server.action.create,step_1,end:0
++msgid "Close"
++msgstr ""
++
++#. module: base
++#: selection:base.language.install,lang:0
++msgid "Spanish (MX) / Español (MX)"
++msgstr ""
++
++#. module: base
++#: view:res.log:0
++msgid "My Logs"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.bt
+ msgid "Bhutan"
-msgstr "Bhutan"
++msgstr ""
++
++#. module: base
++#: help:ir.sequence,number_next:0
++msgid "Next number of this sequence"
++msgstr ""
+
+ #. module: base
+ #: model:res.partner.category,name:base.res_partner_category_11
+ msgid "Textile Suppliers"
-msgstr "Textiel leveranciers"
++msgstr ""
+
+ #. module: base
+ #: selection:ir.actions.url,target:0
+ msgid "This Window"
-msgstr "Dit Venster"
++msgstr ""
++
++#. module: base
++#: view:publisher_warranty.contract:0
++msgid "Publisher Warranty Contracts"
++msgstr ""
+
+ #. module: base
-#: field:wizard.module.lang.export,format:0
++#: help:res.log,name:0
++msgid "The logging message."
++msgstr ""
++
++#. module: base
++#: field:base.language.export,format:0
+ msgid "File Format"
-msgstr "Bestandsformaat"
++msgstr ""
++
++#. module: base
++#: field:res.lang,iso_code:0
++msgid "ISO code"
++msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_res_config_view
+ msgid "res.config.view"
-msgstr "res.config.view"
++msgstr ""
++
++#. module: base
++#: view:res.log:0
++#: field:res.log,read:0
++msgid "Read"
++msgstr ""
++
++#. module: base
++#: sql_constraint:res.country:0
++msgid "The name of the country must be unique !"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_DIALOG_AUTHENTICATION"
-msgstr "STOCK_DIALOG_AUTHENTICATION"
++#: model:ir.actions.act_window,help:base.action_country_state
++msgid ""
++"If you are working on the American market, you can manage the different "
++"federal states you are working on from here. Each state is attached to one "
++"country."
++msgstr ""
+
+ #. module: base
+ #: view:workflow.workitem:0
+ msgid "Workflow Workitems"
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.vc
+ msgid "Saint Vincent & Grenadines"
-msgstr "Saint Vincent & Grenadines"
++msgstr ""
+
+ #. module: base
-#: field:ir.model.config,password:0
-#: field:maintenance.contract,password:0
-#: field:maintenance.contract.wizard,password:0
-#: wizard_field:res.partner.sms_send,init,password:0
++#: field:partner.sms.send,password:0
++#: field:res.config.users,password:0
+ #: field:res.users,password:0
+ msgid "Password"
-msgstr "Wachtwoord"
++msgstr ""
+
+ #. module: base
+ #: model:ir.actions.act_window,name:base.action_model_fields
+ #: view:ir.model:0
+ #: field:ir.model,field_id:0
+ #: model:ir.model,name:base.model_ir_model_fields
+ #: view:ir.model.fields:0
-#: field:ir.model.grid,field_id:0
-#: field:ir.property,fields_id:0
-#: field:ir.report.custom,fields_child0:0
+ #: model:ir.ui.menu,name:base.ir_model_model_fields
+ msgid "Fields"
-msgstr "Velden"
++msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.mk
-msgid "Macedonia"
-msgstr "Macedonië"
++#: model:ir.actions.act_window,name:base.action_partner_employee_form
++msgid "Employees"
++msgstr ""
++
++#. module: base
++#: help:res.log,read:0
++msgid ""
++"If this log item has been read, get() should not send it to the client"
++msgstr ""
+
+ #. module: base
+ #: field:res.company,rml_header2:0
++#: field:res.company,rml_header3:0
+ msgid "RML Internal Header"
+ msgstr ""
+
+ #. module: base
-#: selection:ir.report.custom,print_format:0
-msgid "a4"
-msgstr "a4"
++#: field:ir.actions.act_window,search_view_id:0
++msgid "Search View Ref."
++msgstr ""
++
++#. module: base
++#: field:ir.module.module,installed_version:0
++msgid "Latest version"
++msgstr ""
++
++#. module: base
++#: model:ir.actions.act_window,help:base.res_partner_canal-act
++msgid ""
++"Track from where is coming your leads and opportunities by creating specific "
++"channels that will be maintained at the creation of a document in the "
++"system. Some examples of channels can be: Website, Phone Call, Reseller, etc."
++msgstr ""
+
+ #. module: base
+ #: model:res.partner.bank.type.field,name:base.bank_normal_field
+ msgid "acc_number"
-msgstr "acc_number"
++msgstr ""
+
+ #. module: base
++#: model:ir.actions.act_window,name:base.action_partner_address_form
+ #: model:ir.ui.menu,name:base.menu_partner_address_form
+ msgid "Addresses"
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.mm
+ msgid "Myanmar"
-msgstr "Myanmar (Birma)"
++msgstr ""
+
+ #. module: base
-#: selection:module.lang.install,init,lang:0
++#: selection:base.language.install,lang:0
+ msgid "Chinese (CN) / 简体中文"
-msgstr "Chinees (CN) / 简体中文"
-
-#. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_MEDIA_NEXT"
-msgstr "STOCK_MEDIA_NEXT"
++msgstr ""
+
+ #. module: base
+ #: field:res.bank,street:0
+ #: field:res.partner.address,street:0
+ #: field:res.partner.bank,street:0
+ msgid "Street"
-msgstr "Straat"
++msgstr ""
+
+ #. module: base
-#: wizard_view:module.upgrade,next:0
-msgid "Note that this operation my take a few minutes."
-msgstr "Deze vewerking kan een paar minuten duren."
++#: model:res.country,name:base.yu
++msgid "Yugoslavia"
++msgstr ""
+
+ #. module: base
+ #: field:ir.model.data,name:0
+ msgid "XML Identifier"
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.ca
+ msgid "Canada"
-msgstr "Canada"
-
-#. module: base
-#: field:ir.actions.report.xml,report_name:0
-msgid "Internal Name"
-msgstr "Interne Naam"
++msgstr ""
+
+ #. module: base
+ #: selection:ir.module.module.dependency,state:0
+ msgid "Unknown"
-msgstr "Onbekend"
++msgstr ""
+
+ #. module: base
+ #: model:ir.actions.act_window,name:base.action_res_users_my
+ msgid "Change My Preferences"
-msgstr "Mijn Voorkeuren Wijzigen"
++msgstr ""
+
+ #. module: base
-#: constraint:ir.actions.act_window:0
++#: code:addons/base/ir/ir_actions.py:164
++#, python-format
+ msgid "Invalid model name in the action definition."
+ msgstr ""
+
+ #. module: base
-#: wizard_field:res.partner.sms_send,init,text:0
++#: field:partner.sms.send,text:0
+ msgid "SMS Message"
-msgstr "SMS Bericht"
-
-#. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_EDIT"
-msgstr "STOCK_EDIT"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.cm
+ msgid "Cameroon"
-msgstr "Kameroen"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.bf
+ msgid "Burkina Faso"
-msgstr "Burkina Faso"
-
-#. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_MEDIA_FORWARD"
-msgstr "STOCK_MEDIA_FORWARD"
++msgstr ""
+
+ #. module: base
+ #: selection:ir.actions.todo,state:0
+ msgid "Skipped"
-msgstr "Overgeslagen"
++msgstr ""
+
+ #. module: base
+ #: selection:ir.model.fields,state:0
+ msgid "Custom Field"
-msgstr "Aangepast Veld"
++msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.cc
-msgid "Cocos (Keeling) Islands"
-msgstr "Kokoseilanden (Keeling)"
++#: field:ir.module.module,web:0
++msgid "Has a web component"
++msgstr ""
+
+ #. module: base
-#: field:workflow.instance,uid:0
-msgid "User ID"
-msgstr "Gebruikers ID"
++#: model:res.country,name:base.cc
++msgid "Cocos (Keeling) Islands"
++msgstr ""
+
+ #. module: base
-#: view:ir.actions.server:0
-msgid ""
-"Access all the fields related to the current object using expression in "
-"double brackets, i.e.[[ object.partner_id.name ]]"
++#: selection:base.language.install,state:0
++#: selection:base.module.import,state:0
++#: selection:base.module.update,state:0
++msgid "init"
+ msgstr ""
-"Toegang tot alle velden gerelateerd aan het huidige object door gebruik te "
-"maken van de expressie binnen dubbele blokhaken. Bijv. [[ "
-"object.partner_id.name ]]"
+
+ #. module: base
+ #: view:res.lang:0
+ msgid "11. %U or %W ==> 48 (49th week)"
-msgstr "11. %U or %W ==> 48 (49e week)"
++msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_res_partner_bank_type_field
+ msgid "Bank type fields"
+ msgstr ""
+
+ #. module: base
-#: wizard_view:module.lang.import,init:0
-msgid "type,name,res_id,src,value"
-msgstr "type,name,res_id,src,value"
++#: selection:base.language.install,lang:0
++msgid "Dutch / Nederlands"
++msgstr ""
+
+ #. module: base
-#: selection:module.lang.install,init,lang:0
-msgid "Dutch / Nederlands"
-msgstr "Dutch / Nederlands"
++#: code:addons/base/res/res_config.py:384
++#, python-format
++msgid ""
++"\n"
++"\n"
++"This addon is already installed on your system"
++msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.to
-msgid "Tonga"
-msgstr "Tonga"
++#: help:ir.cron,interval_number:0
++msgid "Repeat every x."
++msgstr ""
+
+ #. module: base
+ #: wizard_view:server.action.create,step_1:0
+ #: wizard_field:server.action.create,step_1,report:0
+ msgid "Select Report"
-msgstr "Selecteer Rapport"
-
-#. module: base
-#: field:ir.report.custom.fields,fc1_condition:0
-#: field:ir.report.custom.fields,fc2_condition:0
-#: field:ir.report.custom.fields,fc3_condition:0
-msgid "condition"
+ msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_SAVE"
-msgstr "STOCK_SAVE"
++#: report:ir.module.reference.graph:0
++msgid "1cm 28cm 20cm 28cm"
++msgstr ""
+
+ #. module: base
-#: rml:ir.module.reference:0
-msgid "1cm 28cm 20cm 28cm"
-msgstr "1cm 28cm 20cm 28cm"
++#: field:ir.module.module,maintainer:0
++msgid "Maintainer"
++msgstr ""
+
+ #. module: base
+ #: field:ir.sequence,suffix:0
+ msgid "Suffix"
-msgstr "Achtervoegsel"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.mo
+ msgid "Macau"
-msgstr "Macau"
++msgstr ""
+
+ #. module: base
+ #: model:ir.actions.report.xml,name:base.res_partner_address_report
+ msgid "Labels"
-msgstr "Etiketten"
++msgstr ""
+
+ #. module: base
-#: wizard_field:res.partner.spam_send,init,from:0
++#: field:partner.wizard.spam,email_from:0
+ msgid "Sender's email"
-msgstr "E-mailadres Afzender"
++msgstr ""
+
+ #. module: base
+ #: field:ir.default,field_name:0
+ msgid "Object Field"
-msgstr "Objectveld"
++msgstr ""
+
+ #. module: base
-#: code:addons/osv/orm.py:0
-#, python-format
-msgid "Records were modified in the meanwhile"
++#: selection:base.language.install,lang:0
++msgid "Spanish (PE) / Español (PE)"
+ msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_NEW"
-msgstr "STOCK_NEW"
++#: selection:base.language.install,lang:0
++msgid "French (CH) / Français (CH)"
++msgstr ""
+
+ #. module: base
-#: view:ir.report.custom.fields:0
-msgid "Report Fields"
-msgstr "Rapport Velden"
++#: help:res.config.users,action_id:0
++#: help:res.users,action_id:0
++msgid ""
++"If specified, this action will be opened at logon for this user, in addition "
++"to the standard menu."
++msgstr ""
+
+ #. module: base
-#: view:res.partner:0
-msgid "General"
-msgstr "Algemeen"
++#: view:ir.values:0
++msgid "Client Actions"
++msgstr ""
+
+ #. module: base
-#: code:addons/osv/orm.py:0
++#: code:addons/orm.py:1806
+ #, python-format
+ msgid "The exists method is not implemented on this object !"
+ msgstr ""
+
+ #. module: base
-#: field:workflow.transition,act_to:0
-msgid "Destination Activity"
-msgstr ""
-
-#. module: base
-#: code:addons/osv/orm.py:0
++#: code:addons/base/module/module.py:336
+ #, python-format
-msgid "The name_search method is not implemented on this object !"
-msgstr "De name_search methode is niet in geïmplementeerd dit object !"
++msgid ""
++"You try to upgrade a module that depends on the module: %s.\n"
++"But this module is not available in your system."
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "terp-mrp"
-msgstr "terp-mrp"
++#: field:workflow.transition,act_to:0
++msgid "Destination Activity"
++msgstr ""
+
+ #. module: base
+ #: view:ir.values:0
+ msgid "Connect Events to Actions"
+ msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_ABOUT"
-msgstr "STOCK_ABOUT"
++#: model:ir.model,name:base.model_base_update_translations
++msgid "base.update.translations"
++msgstr ""
+
+ #. module: base
+ #: field:ir.module.category,parent_id:0
+ #: field:res.partner.category,parent_id:0
+ msgid "Parent Category"
-msgstr "Bovenliggende Categorie"
++msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.fi
-msgid "Finland"
-msgstr "Finland"
++#: selection:ir.property,type:0
++msgid "Integer Big"
++msgstr ""
+
+ #. module: base
+ #: selection:res.partner.address,type:0
+ #: selection:res.partner.title,domain:0
++#: view:res.users:0
+ msgid "Contact"
-msgstr "Contactpersoon"
++msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_ir_ui_menu
+ msgid "ir.ui.menu"
-msgstr "ir.ui.menu"
++msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.tw
-msgid "Taiwan"
-msgstr "Taiwan"
++#: model:res.country,name:base.us
++msgid "United States"
++msgstr ""
+
+ #. module: base
+ #: view:ir.module.module:0
+ msgid "Cancel Uninstall"
+ msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.cy
-msgid "Cyprus"
-msgstr "Cyprus"
++#: view:res.bank:0
++#: view:res.partner:0
++#: view:res.partner.address:0
++msgid "Communication"
++msgstr ""
+
+ #. module: base
-#: model:ir.model,name:base.model_ir_server_object_lines
-msgid "ir.server.object.lines"
-msgstr "ir.server.object.lines"
++#: view:ir.actions.report.xml:0
++msgid "RML Report"
++msgstr ""
+
+ #. module: base
-#: field:ir.model.fields,size:0
-msgid "Size"
-msgstr "Grootte"
++#: model:ir.model,name:base.model_ir_server_object_lines
++msgid "ir.server.object.lines"
++msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/module/module.py:0
++#: code:addons/base/module/module.py:531
+ #, python-format
+ msgid "Module %s: Invalid Quality Certificate"
-msgstr "Module %s: Ongeldig Kwaliteitscertificaat"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.kw
+ msgid "Kuwait"
-msgstr "Koeweit"
++msgstr ""
+
+ #. module: base
+ #: field:workflow.workitem,inst_id:0
+ msgid "Instance"
-msgstr "Instantie"
++msgstr ""
+
+ #. module: base
+ #: help:ir.actions.report.xml,attachment:0
+ msgid ""
+ "This is the filename of the attachment used to store the printing result. "
+ "Keep empty to not save the printed reports. You can use a python expression "
+ "with the object and time variables."
+ msgstr ""
-"Dit is de bestandsnaam van de bijlage die gebruikt wordt voor opslag van het "
-"afdrukresultaat. Laat leeg om het afgedrukte rapport niet op te slaan. U "
-"kunt een python expressie gebruiken met het object en tijd variabelen"
++
++#. module: base
++#: selection:ir.property,type:0
++msgid "Many2One"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.ng
+ msgid "Nigeria"
-msgstr "Nigeria"
++msgstr ""
+
+ #. module: base
-#: model:ir.model,name:base.model_res_partner_event
-msgid "res.partner.event"
-msgstr "res.partner.event"
++#: code:addons/base/ir/ir_model.py:250
++#, python-format
++msgid "For selection fields, the Selection Options must be given!"
++msgstr ""
+
+ #. module: base
-#: code:addons/osv/orm.py:0
-#, python-format
-msgid "Insertion Failed!"
++#: model:ir.actions.act_window,name:base.action_partner_sms_send
++msgid "SMS Send"
++msgstr ""
++
++#. module: base
++#: field:res.company,user_ids:0
++msgid "Accepted Users"
+ msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_UNDERLINE"
-msgstr "STOCK_UNDERLINE"
++#: field:ir.ui.menu,web_icon_data:0
++msgid "Web Icon Image"
++msgstr ""
+
+ #. module: base
+ #: view:ir.values:0
+ msgid "Values for Event Type"
+ msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.zr
-msgid "Zaire"
-msgstr "Zaïre"
-
-#. module: base
+ #: selection:ir.model.fields,select_level:0
+ msgid "Always Searchable"
-msgstr "Altijd doorzoekbaar"
-
-#. module: base
-#: model:res.country,name:base.sd
-msgid "Sudan"
-msgstr "Soedan"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.hk
+ msgid "Hong Kong"
-msgstr "Hong Kong"
++msgstr ""
+
+ #. module: base
+ #: help:ir.actions.server,name:0
+ msgid "Easy to Refer action by name e.g. One Sales Order -> Many Invoices"
+ msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_ZOOM_100"
-msgstr "STOCK_ZOOM_100"
-
-#. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_BOLD"
-msgstr "STOCK_BOLD"
++#: model:ir.actions.act_window,help:base.action_partner_address_form
++msgid ""
++"Customers (also called Partners in other areas of the system) helps you "
++"manage your address book of companies whether they are prospects, customers "
++"and/or suppliers. The partner form allows you to track and record all the "
++"necessary information to interact with your partners from the company "
++"address to their contacts as well as pricelists, and much more. If you "
++"installed the CRM, with the history tab, you can track all the interactions "
++"with a partner such as opportunities, emails, or sales orders issued."
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.ph
+ msgid "Philippines"
-msgstr "Filippijnen"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.ma
+ msgid "Morocco"
-msgstr "Marokko"
-
-#. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "terp-graph"
-msgstr "terp-graph"
++msgstr ""
+
+ #. module: base
+ #: view:res.lang:0
+ msgid "2. %a ,%A ==> Fri, Friday"
-msgstr "2. %a ,%A ==> Vr, Vrijdag"
++msgstr ""
+
+ #. module: base
-#: wizard_view:module.lang.install,start:0
-msgid ""
-"The selected language has been successfully installed. You must change the "
-"preferences of the user and open a new menu to view changes."
++#: field:res.widget,content:0
++msgid "Content"
+ msgstr ""
-"De geselecteerde taal is succesvol geïnstalleerd. Wijzig de voorkeur van de "
-"betreffende gebruiker en open een nieuw menu om de wijzigingen te zien."
+
+ #. module: base
-#: model:ir.model,name:base.model_ir_sequence
-msgid "ir.sequence"
-msgstr "ir.sequence"
++#: help:ir.rule,global:0
++msgid "If no group is specified the rule is global and applied to everyone"
++msgstr ""
+
+ #. module: base
-#: model:ir.model,name:base.model_res_partner_event_type
-#: model:ir.ui.menu,name:base.next_id_14
-#: view:res.partner.event:0
-msgid "Partner Events"
++#: model:res.country,name:base.td
++msgid "Chad"
+ msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_workflow_transition
+ msgid "workflow.transition"
-msgstr "workflow.transition"
++msgstr ""
+
+ #. module: base
+ #: view:res.lang:0
+ msgid "%a - Abbreviated weekday name."
-msgstr "%a - Afkorting naam weekdag"
++msgstr ""
+
+ #. module: base
-#: rml:ir.module.reference:0
++#: report:ir.module.reference.graph:0
+ msgid "Introspection report on objects"
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.pf
+ msgid "Polynesia (French)"
-msgstr "Frans Polynesië"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.dm
+ msgid "Dominica"
-msgstr "Dominica"
++msgstr ""
+
+ #. module: base
-#: model:ir.actions.wizard,name:base.res_partner_send_sms_wizard
-#: wizard_button:res.partner.sms_send,init,send:0
-msgid "Send SMS"
-msgstr "SMS verzenden"
++#: sql_constraint:publisher_warranty.contract:0
++msgid ""
++"Your publisher warranty contract is already subscribed in the system !"
++msgstr ""
++
++#. module: base
++#: help:ir.cron,nextcall:0
++msgid "Next planned execution date for this scheduler"
++msgstr ""
++
++#. module: base
++#: help:res.config.users,view:0
++#: help:res.users,view:0
++msgid "Choose between the simplified interface and the extended one"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.np
+ msgid "Nepal"
-msgstr "Nepal"
++msgstr ""
+
+ #. module: base
-#: field:res.partner.event,event_ical_id:0
-msgid "iCal id"
-msgstr "iCal id"
++#: code:addons/orm.py:2307
++#, python-format
++msgid ""
++"Invalid value for reference field \"%s\" (last part must be a non-zero "
++"integer): \"%s\""
++msgstr ""
+
+ #. module: base
-#: field:ir.actions.act_window,view_type:0
-#: field:ir.actions.act_window.view,view_mode:0
-#: field:ir.ui.view,type:0
-#: field:wizard.ir.model.menu.create.line,view_type:0
-msgid "View Type"
-msgstr "Weergavetype"
++#: help:ir.cron,args:0
++msgid "Arguments to be passed to the method. e.g. (uid,)"
++msgstr ""
+
+ #. module: base
-#: wizard_view:res.partner.sms_send,init:0
-msgid "Bulk SMS send"
-msgstr "Bulk SMS verzenden"
++#: help:ir.ui.menu,groups_id:0
++msgid ""
++"If you have groups, the visibility of this menu will be based on these "
++"groups. If this field is empty, OpenERP will compute visibility based on the "
++"related object's read access."
++msgstr ""
+
+ #. module: base
-#: model:ir.ui.menu,name:base.next_id_2
-msgid "User Interface"
-msgstr "Gebruikersinterface"
++#: model:ir.actions.act_window,name:base.action_ui_view_custom
++#: model:ir.ui.menu,name:base.menu_action_ui_view_custom
++#: view:ir.ui.view.custom:0
++msgid "Customized Views"
++msgstr ""
+
+ #. module: base
-#: selection:ir.report.custom,type:0
-msgid "Pie Chart"
++#: view:partner.sms.send:0
++msgid "Bulk SMS send"
+ msgstr ""
+
+ #. module: base
+ #: view:ir.sequence:0
+ msgid "Seconde: %(sec)s"
-msgstr "Seconden: %(sec)s"
++msgstr ""
++
++#. module: base
++#: model:ir.ui.menu,name:base.menu_view_base_module_update
++msgid "Update Modules List"
++msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/module/module.py:0
++#: code:addons/base/module/module.py:255
+ #, python-format
+ msgid ""
-"Can not create the module file:\n"
-" %s"
++"Unable to upgrade module \"%s\" because an external dependency is not met: %s"
+ msgstr ""
-"Kan het module bestand niet aanmaken:\n"
-" %s"
+
+ #. module: base
-#: model:ir.actions.wizard,name:base.wizard_update
-#: model:ir.ui.menu,name:base.menu_module_update
-msgid "Update Modules List"
++#: code:addons/base/res/res_user.py:257
++#, python-format
++msgid ""
++"Please keep in mind that documents currently displayed may not be relevant "
++"after switching to another company. If you have unsaved changes, please make "
++"sure to save and close all forms before switching to a different company. "
++"(You can click on Cancel in the User Preferences now)"
+ msgstr ""
+
+ #. module: base
+ #: view:ir.actions.configuration.wizard:0
+ msgid "Continue"
-msgstr "Doorgaan"
++msgstr ""
+
+ #. module: base
-#: code:addons/osv/orm.py:0
-#, python-format
-msgid "Object %s does not exists"
++#: selection:base.language.install,lang:0
++msgid "Thai / ภาษาไทย"
+ msgstr ""
+
+ #. module: base
-#: model:ir.actions.act_window,name:base.ir_property_form
-#: model:ir.ui.menu,name:base.menu_ir_property_form
-msgid "Default Properties"
-msgstr "Standaard eigenschappen"
++#: code:addons/orm.py:158
++#, python-format
++msgid "Object %s does not exists"
++msgstr ""
+
+ #. module: base
-#: selection:module.lang.install,init,lang:0
++#: selection:base.language.install,lang:0
+ msgid "Slovenian / slovenščina"
-msgstr "Sloveens / slovenščina"
++msgstr ""
+
+ #. module: base
+ #: field:ir.actions.report.xml,attachment_use:0
+ msgid "Reload from Attachment"
-msgstr "Opnieuw laden van bijlage"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.bv
+ msgid "Bouvet Island"
-msgstr "Bouvet eiland"
-
-#. module: base
-#: field:ir.report.custom,print_orientation:0
-msgid "Print orientation"
-msgstr "Afdrukrichting"
-
-#. module: base
-#: model:ir.actions.act_window,name:base.action_wizard_lang_export
-#: model:ir.ui.menu,name:base.menu_wizard_lang_export
-msgid "Export a Translation File"
-msgstr "Vertaalbestand exporteren"
++msgstr ""
+
+ #. module: base
+ #: field:ir.attachment,name:0
+ msgid "Attachment Name"
-msgstr "Bijlagenaam"
++msgstr ""
+
+ #. module: base
-#: wizard_field:module.lang.import,init,data:0
-#: field:wizard.module.lang.export,data:0
++#: field:base.language.export,data:0
++#: field:base.language.import,data:0
+ msgid "File"
-msgstr "Bestand"
++msgstr ""
+
+ #. module: base
-#: view:res.users:0
++#: view:res.config.users:0
+ msgid "Add User"
-msgstr "Voeg een gebruiker toe"
++msgstr ""
+
+ #. module: base
-#: model:ir.model,name:base.model_ir_actions_configuration_wizard
-msgid "ir.actions.configuration.wizard"
-msgstr "ir.actions.configuration.wizard"
++#: model:ir.actions.act_window,name:base.action_view_base_module_upgrade_install
++msgid "Module Upgrade Install"
++msgstr ""
+
+ #. module: base
-#: view:res.lang:0
-msgid "%b - Abbreviated month name."
-msgstr "%b - Afgekortte maandnaam"
++#: model:ir.model,name:base.model_ir_actions_configuration_wizard
++msgid "ir.actions.configuration.wizard"
++msgstr ""
+
+ #. module: base
-#: field:ir.ui.view_sc,user_id:0
-msgid "User Ref."
-msgstr "Gebruikers Ref."
++#: view:res.lang:0
++msgid "%b - Abbreviated month name."
++msgstr ""
+
+ #. module: base
+ #: field:res.partner,supplier:0
++#: view:res.partner.address:0
++#: field:res.partner.address,is_supplier_add:0
+ #: model:res.partner.category,name:base.res_partner_category_8
+ msgid "Supplier"
-msgstr "Leverancier"
++msgstr ""
+
+ #. module: base
+ #: view:ir.actions.server:0
+ #: selection:ir.actions.server,state:0
+ msgid "Multi Actions"
+ msgstr ""
+
+ #. module: base
-#: view:maintenance.contract.wizard:0
++#: view:base.language.export:0
++#: view:base.language.import:0
++#: view:wizard.ir.model.menu.create:0
+ msgid "_Close"
+ msgstr ""
+
+ #. module: base
-#: selection:maintenance.contract,kind:0
-msgid "Full"
-msgstr "Volledig"
++#: field:multi_company.default,company_dest_id:0
++msgid "Default Company"
++msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.cv
-msgid "Cape Verde"
-msgstr "Kaapverdië"
++#: selection:base.language.install,lang:0
++msgid "Spanish (EC) / Español (EC)"
++msgstr ""
+
+ #. module: base
-#: selection:ir.actions.report.xml,report_type:0
-msgid "html"
-msgstr "html"
++#: help:ir.ui.view,xml_id:0
++msgid "ID of the view defined in xml file"
++msgstr ""
+
+ #. module: base
-#: field:res.partner,vat:0
-msgid "VAT"
-msgstr "BTW"
++#: model:ir.model,name:base.model_base_module_import
++#: model:ir.ui.menu,name:base.menu_view_base_module_import
++msgid "Import Module"
++msgstr ""
++
++#. module: base
++#: model:res.country,name:base.as
++msgid "American Samoa"
++msgstr ""
++
++#. module: base
++#: help:ir.actions.act_window,res_model:0
++msgid "Model name of the object to open in the view window"
++msgstr ""
++
++#. module: base
++#: field:res.log,secondary:0
++msgid "Secondary Log"
++msgstr ""
++
++#. module: base
++#: field:ir.model.fields,selectable:0
++msgid "Selectable"
++msgstr ""
+
+ #. module: base
+ #: view:res.request.link:0
+ msgid "Request Link"
+ msgstr ""
+
+ #. module: base
++#: view:ir.attachment:0
++#: selection:ir.attachment,type:0
+ #: field:ir.module.module,url:0
-#: field:ir.module.repository,url:0
+ msgid "URL"
-msgstr "URL"
++msgstr ""
+
+ #. module: base
+ #: help:res.country,name:0
+ msgid "The full name of the country."
-msgstr "De volledige naam van het land."
++msgstr ""
+
+ #. module: base
+ #: selection:ir.actions.server,state:0
+ msgid "Iteration"
+ msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "terp-stock"
-msgstr "terp-stock"
-
-#. module: base
-#: code:addons/addons/base/ir/ir_actions.py:0
-#, python-format
-msgid "Please specify the Partner Email address !"
-msgstr ""
-
-#. module: base
-#: code:addons/osv/orm.py:0
++#: code:addons/orm.py:3448
++#: code:addons/orm.py:3532
+ #, python-format
+ msgid "UserError"
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.ae
+ msgid "United Arab Emirates"
-msgstr "Verenigde Arabische Emiraten"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_MEDIA_RECORD"
-msgstr "STOCK_MEDIA_RECORD"
++#: model:ir.ui.menu,name:base.menu_crm_case_job_req_main
++msgid "Recruitment"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.re
+ msgid "Reunion (French)"
-msgstr "Reunion (Frans)"
++msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.cz
-msgid "Czech Republic"
-msgstr "Tsjechië"
++#: code:addons/base/ir/ir_model.py:321
++#, python-format
++msgid ""
++"New column name must still start with x_ , because it is a custom field!"
++msgstr ""
++
++#. module: base
++#: view:ir.model.access:0
++#: view:ir.rule:0
++#: field:ir.rule,global:0
++msgid "Global"
++msgstr ""
++
++#. module: base
++#: model:res.country,name:base.mp
++msgid "Northern Mariana Islands"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.sb
+ msgid "Solomon Islands"
-msgstr "Salomoneilanden"
++msgstr ""
++
++#. module: base
++#: code:addons/base/ir/ir_model.py:490
++#: code:addons/orm.py:1897
++#: code:addons/orm.py:2972
++#: code:addons/orm.py:3165
++#: code:addons/orm.py:3365
++#: code:addons/orm.py:3817
++#, python-format
++msgid "AccessError"
++msgstr ""
++
++#. module: base
++#: view:res.request:0
++msgid "Waiting"
++msgstr ""
++
++#. module: base
++#: code:addons/__init__.py:834
++#, python-format
++msgid "Could not load base module"
++msgstr ""
+
+ #. module: base
+ #: view:res.lang:0
+ msgid "8. %I:%M:%S %p ==> 06:25:20 PM"
-msgstr "8. %I:%M:%S %p ==> 06:25:20 PM"
++msgstr ""
+
+ #. module: base
-#: code:addons/osv/orm.py:0
++#: code:addons/orm.py:1803
+ #, python-format
+ msgid "The copy method is not implemented on this object !"
+ msgstr ""
+
+ #. module: base
++#: field:res.log,create_date:0
++msgid "Creation Date"
++msgstr ""
++
++#. module: base
+ #: view:ir.translation:0
+ #: model:ir.ui.menu,name:base.menu_translation
+ msgid "Translations"
-msgstr "Vertalingen"
++msgstr ""
+
+ #. module: base
+ #: field:ir.sequence,padding:0
+ msgid "Number padding"
+ msgstr ""
+
+ #. module: base
++#: view:ir.actions.report.xml:0
++msgid "Report"
++msgstr ""
++
++#. module: base
+ #: model:res.country,name:base.ua
+ msgid "Ukraine"
-msgstr "Oekraïne"
++msgstr ""
++
++#. module: base
++#: model:res.country,name:base.to
++msgid "Tonga"
++msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_ir_module_category
+ #: view:ir.module.category:0
+ msgid "Module Category"
-msgstr "Module Categorie"
++msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.us
-msgid "United States"
-msgstr "Verenigde Staten"
++#: view:partner.wizard.ean.check:0
++msgid "Ignore"
++msgstr ""
+
+ #. module: base
-#: rml:ir.module.reference:0
++#: report:ir.module.reference.graph:0
+ msgid "Reference Guide"
+ msgstr ""
+
+ #. module: base
++#: view:ir.ui.view:0
++msgid "Architecture"
++msgstr ""
++
++#. module: base
+ #: model:res.country,name:base.ml
+ msgid "Mali"
-msgstr "Mali"
++msgstr ""
++
++#. module: base
++#: help:res.config.users,email:0
++#: help:res.users,email:0
++msgid ""
++"If an email is provided, the user will be sent a message welcoming him.\n"
++"\n"
++"Warning: if \"email_from\" and \"smtp_server\" aren't configured, it won't "
++"be possible to email new users."
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_UNINDENT"
-msgstr "STOCK_UNINDENT"
++#: selection:base.language.install,lang:0
++msgid "Flemish (BE) / Vlaams (BE)"
++msgstr ""
+
+ #. module: base
+ #: field:ir.cron,interval_number:0
+ msgid "Interval Number"
+ msgstr ""
+
+ #. module: base
-#: selection:maintenance.contract,kind:0
-msgid "Partial"
-msgstr "Gedeeltelijk"
-
-#. module: base
+ #: model:res.country,name:base.tk
+ msgid "Tokelau"
-msgstr "Tokelau"
++msgstr ""
+
+ #. module: base
+ #: field:ir.actions.report.xml,report_xsl:0
+ msgid "XSL path"
-msgstr "XSL pad"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.bn
+ msgid "Brunei Darussalam"
-msgstr "Brunei Darussalam"
-
-#. module: base
-#: model:ir.actions.act_window,name:base.action_partner_function_form
-#: model:ir.ui.menu,name:base.menu_partner_function_form
-#: view:res.partner.function:0
-msgid "Partner Functions"
-msgstr "Relatie Functies"
++msgstr ""
+
+ #. module: base
-#: view:res.lang:0
-msgid "%Y - Year with century as a decimal number."
-msgstr "%Y - Jaartal met eeuw als decimaal getal."
++#: view:ir.actions.act_window:0
++#: field:ir.actions.act_window,view_type:0
++#: field:ir.actions.act_window.view,view_mode:0
++#: field:ir.ui.view,type:0
++#: field:wizard.ir.model.menu.create.line,view_type:0
++msgid "View Type"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_DIALOG_INFO"
-msgstr "STOCK_DIALOG_INFO"
++#: model:ir.ui.menu,name:base.next_id_2
++msgid "User Interface"
++msgstr ""
+
+ #. module: base
+ #: field:ir.attachment,create_date:0
+ msgid "Date Created"
-msgstr "Aanmaakdatum"
-
-#. module: base
-#: model:res.country,name:base.fk
-msgid "Falkland Islands"
-msgstr "Falkland Eilanden"
++msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_ir_actions_todo
+ msgid "ir.actions.todo"
-msgstr "ir.actions.todo"
++msgstr ""
+
+ #. module: base
-#: view:wizard.module.lang.export:0
-msgid "Get file"
-msgstr "Bestand ophalen"
++#: code:addons/base/res/res_config.py:94
++#, python-format
++msgid "Couldn't find previous ir.actions.todo"
++msgstr ""
+
+ #. module: base
-#: wizard_view:module.module.update,init:0
-msgid ""
-"This function will check for new modules in the 'addons' path and on module "
-"repositories:"
++#: view:ir.actions.act_window:0
++msgid "General Settings"
+ msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_GO_BACK"
-msgstr "STOCK_GO_BACK"
++#: model:ir.ui.menu,name:base.menu_administration_shortcut
++msgid "Custom Shortcuts"
++msgstr ""
+
+ #. module: base
-#: code:addons/osv/orm.py:0
-#, python-format
-msgid "AccessError"
++#: selection:base.language.install,lang:0
++msgid "Vietnamese / Tiếng Việt"
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.dz
+ msgid "Algeria"
-msgstr "Algerije"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.be
+ msgid "Belgium"
-msgstr "België"
++msgstr ""
+
+ #. module: base
-#: code:addons/osv/orm.py:0
-#, python-format
-msgid "You cannot perform this operation."
-msgstr "U kunt deze operatie niet uitvoeren."
++#: model:ir.model,name:base.model_osv_memory_autovacuum
++msgid "osv_memory.autovacuum"
++msgstr ""
+
+ #. module: base
++#: field:base.language.export,lang:0
++#: field:base.language.install,lang:0
++#: field:base.update.translations,lang:0
+ #: field:ir.translation,lang:0
-#: wizard_field:module.lang.install,init,lang:0
++#: field:res.config.users,context_lang:0
+ #: field:res.partner,lang:0
+ #: field:res.users,context_lang:0
-#: field:wizard.module.lang.export,lang:0
-#: field:wizard.module.update_translations,lang:0
+ msgid "Language"
-msgstr "Taal"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.gm
+ msgid "Gambia"
-msgstr "Gambia"
++msgstr ""
+
+ #. module: base
+ #: model:ir.actions.act_window,name:base.action_res_company_form
++#: model:ir.model,name:base.model_res_company
+ #: model:ir.ui.menu,name:base.menu_action_res_company_form
++#: model:ir.ui.menu,name:base.menu_res_company_global
+ #: view:res.company:0
++#: field:res.config.users,company_ids:0
++#: view:res.users:0
++#: field:res.users,company_ids:0
+ msgid "Companies"
-msgstr "Bedrijven"
++msgstr ""
+
+ #. module: base
-#: code:addons/osv/fields.py:0
++#: view:res.lang:0
++msgid "%H - Hour (24-hour clock) [00,23]."
++msgstr ""
++
++#. module: base
++#: model:ir.model,name:base.model_res_widget
++msgid "res.widget"
++msgstr ""
++
++#. module: base
++#: code:addons/base/ir/ir_model.py:258
++#, python-format
++msgid "Model %s does not exist!"
++msgstr ""
++
++#. module: base
++#: code:addons/base/res/res_lang.py:159
++#, python-format
++msgid "You cannot delete the language which is User's Preferred Language !"
++msgstr ""
++
++#. module: base
++#: code:addons/fields.py:103
+ #, python-format
+ msgid "Not implemented get_memory method !"
-msgstr "Niet geïmplementeerde get_memory methode !"
++msgstr ""
+
+ #. module: base
+ #: view:ir.actions.server:0
+ #: field:ir.actions.server,code:0
+ #: selection:ir.actions.server,state:0
+ msgid "Python Code"
-msgstr "Python Code"
++msgstr ""
+
+ #. module: base
-#: help:ir.actions.server,state:0
-msgid "Type of the Action that is to be executed"
-msgstr "Soort Actie die moet worden uitgevoerd"
++#: code:addons/base/module/wizard/base_module_import.py:67
++#, python-format
++msgid "Can not create the module file: %s !"
++msgstr ""
+
+ #. module: base
+ #: model:ir.module.module,description:base.module_meta_information
+ msgid "The kernel of OpenERP, needed for all installation."
-msgstr "De basis van OpenERP, noodzakelijk in alle installaties."
++msgstr ""
+
+ #. module: base
-#: model:ir.actions.act_window,name:base.action_partner_customer_form
-#: model:ir.ui.menu,name:base.menu_partner_customer_form
-msgid "Customers Partners"
-msgstr "Klanten"
++#: view:base.language.install:0
++#: view:base.module.import:0
++#: view:base.module.update:0
++#: view:base.module.upgrade:0
++#: view:base.update.translations:0
++#: view:partner.clear.ids:0
++#: view:partner.sms.send:0
++#: view:partner.wizard.spam:0
++#: view:publisher_warranty.contract.wizard:0
++#: view:res.widget.wizard:0
++msgid "Cancel"
++msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/ir/ir_actions.py:0
-#, python-format
-msgid "Please specify server option --smtp-from !"
-msgstr "Geef aub server optie --smtp-from !"
++#: selection:base.language.export,format:0
++msgid "PO File"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.nt
+ msgid "Neutral Zone"
-msgstr "Neutrale Zone"
++msgstr ""
++
++#. module: base
++#: selection:base.language.install,lang:0
++msgid "Hindi / हिंदी"
++msgstr ""
++
++#. module: base
++#: view:ir.model:0
++msgid "Custom"
++msgstr ""
++
++#. module: base
++#: view:res.request:0
++msgid "Current"
++msgstr ""
+
+ #. module: base
+ #: model:res.partner.category,name:base.res_partner_category_9
+ msgid "Components Supplier"
+ msgstr ""
+
+ #. module: base
+ #: model:ir.actions.act_window,name:base.action_res_users
-#: field:ir.actions.todo,users_id:0
+ #: field:ir.default,uid:0
+ #: model:ir.ui.menu,name:base.menu_action_res_users
+ #: model:ir.ui.menu,name:base.menu_users
+ #: view:res.groups:0
+ #: field:res.groups,users:0
-#: field:res.roles,users:0
+ #: view:res.users:0
+ msgid "Users"
-msgstr "Gebruikers"
++msgstr ""
+
+ #. module: base
+ #: field:ir.module.module,published_version:0
+ msgid "Published Version"
-msgstr "Gepubliceerde Versie"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.is
+ msgid "Iceland"
-msgstr "IJsland"
++msgstr ""
+
+ #. module: base
-#: view:res.users:0
-msgid "Roles are used to defined available actions, provided by workflows."
++#: model:ir.actions.act_window,name:base.ir_action_window
++#: model:ir.ui.menu,name:base.menu_ir_action_window
++msgid "Window Actions"
++msgstr ""
++
++#. module: base
++#: view:res.lang:0
++msgid "%I - Hour (12-hour clock) [01,12]."
++msgstr ""
++
++#. module: base
++#: selection:publisher_warranty.contract.wizard,state:0
++msgid "Finished"
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.de
+ msgid "Germany"
-msgstr "Duitsland"
++msgstr ""
+
+ #. module: base
+ #: view:ir.sequence:0
+ msgid "Week of the year: %(woy)s"
-msgstr "Week van het jaar: %(woy)s"
++msgstr ""
+
+ #. module: base
+ #: model:res.partner.category,name:base.res_partner_category_14
+ msgid "Bad customers"
-msgstr "Slechte klanten"
-
-#. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_HARDDISK"
-msgstr "STOCK_HARDDISK"
++msgstr ""
+
+ #. module: base
-#: rml:ir.module.reference:0
++#: report:ir.module.reference.graph:0
+ msgid "Reports :"
-msgstr "Rapporten :"
-
-#. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_APPLY"
-msgstr "STOCK_APPLY"
-
-#. module: base
-#: model:ir.actions.act_window,name:base.action_maintenance_contract_form
-#: model:ir.ui.menu,name:base.menu_maintenance_contract
-msgid "Your Maintenance Contracts"
-msgstr "Uw Onderhoudscontracten"
-
-#. module: base
-#: view:res.users:0
-msgid ""
-"Please note that you will have to logout and relog if you change your "
-"password."
-msgstr "U moet uitloggen en weer inloggen indien u uw wachtwoord wijzigt."
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.gy
+ msgid "Guyana"
-msgstr "Guyana"
-
-#. module: base
-#: selection:ir.module.module,license:0
-msgid "GPL-3"
-msgstr "GPL-3"
++msgstr ""
+
+ #. module: base
-#: selection:ir.module.module,license:0
-msgid "GPL-2"
-msgstr "GPL-2"
++#: help:ir.actions.act_window,view_type:0
++msgid ""
++"View type: set to 'tree' for a hierarchical tree view, or 'form' for other "
++"views"
++msgstr ""
+
+ #. module: base
-#: selection:module.lang.install,init,lang:0
-msgid "Portugese (BR) / português (BR)"
-msgstr "Portugees (BR) / português (BR)"
++#: code:addons/base/res/res_config.py:421
++#, python-format
++msgid "Click 'Continue' to configure the next addon..."
++msgstr ""
+
+ #. module: base
+ #: field:ir.actions.server,record_id:0
+ msgid "Create Id"
-msgstr "Aanmaak ID"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.hn
+ msgid "Honduras"
-msgstr "Honduras"
++msgstr ""
++
++#. module: base
++#: help:res.config.users,menu_tips:0
++#: help:res.users,menu_tips:0
++msgid ""
++"Check out this box if you want to always display tips on each menu action"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.eg
+ msgid "Egypt"
-msgstr "Egypte"
++msgstr ""
++
++#. module: base
++#: field:ir.rule,perm_read:0
++msgid "Apply For Read"
++msgstr ""
+
+ #. module: base
+ #: help:ir.actions.server,model_id:0
+ msgid ""
+ "Select the object on which the action will work (read, write, create)."
+ msgstr ""
+
+ #. module: base
-#: view:ir.model:0
-msgid "Fields Description"
-msgstr "Omschrijving Velden"
++#: code:addons/base/ir/ir_actions.py:629
++#, python-format
++msgid "Please specify server option --email-from !"
++msgstr ""
+
+ #. module: base
-#: code:addons/tools/translate.py:0
-#, python-format
-msgid "Bad file format"
-msgstr "Fout bestandsformaat"
++#: field:base.language.import,name:0
++msgid "Language Name"
++msgstr ""
++
++#. module: base
++#: selection:ir.property,type:0
++msgid "Boolean"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_CDROM"
-msgstr "STOCK_CDROM"
++#: view:ir.model:0
++msgid "Fields Description"
++msgstr ""
+
+ #. module: base
++#: view:ir.attachment:0
++#: view:ir.cron:0
++#: view:ir.model.access:0
++#: view:ir.model.data:0
++#: view:ir.model.fields:0
++#: view:ir.module.module:0
++#: view:ir.rule:0
++#: view:ir.ui.view:0
++#: view:ir.values:0
++#: view:res.partner:0
++#: view:res.partner.address:0
++#: view:workflow.activity:0
++msgid "Group By..."
++msgstr ""
++
++#. module: base
++#: view:ir.model.fields:0
+ #: field:ir.model.fields,readonly:0
+ #: field:res.partner.bank.type.field,readonly:0
+ msgid "Readonly"
-msgstr "Alleen Lezen"
-
-#. module: base
-#: field:res.partner.event,type:0
-msgid "Type of Event"
+ msgstr ""
+
+ #. module: base
-#: model:ir.actions.act_window,name:base.ir_sequence_type
-#: model:ir.ui.menu,name:base.menu_ir_sequence_type
-msgid "Sequence Types"
++#: field:ir.actions.act_window.view,view_id:0
++#: field:ir.default,page:0
++#: selection:ir.translation,type:0
++#: field:wizard.ir.model.menu.create.line,view_id:0
++msgid "View"
+ msgstr ""
+
+ #. module: base
+ #: selection:ir.module.module,state:0
+ #: selection:ir.module.module.dependency,state:0
+ msgid "To be installed"
-msgstr "Te installeren"
++msgstr ""
+
+ #. module: base
++#: help:ir.actions.act_window,display_menu_tip:0
++msgid ""
++"It gives the status if the tip has to be displayed or not when a user "
++"executes an action"
++msgstr ""
++
++#. module: base
++#: view:ir.model:0
+ #: model:ir.module.module,shortdesc:base.module_meta_information
++#: field:res.currency,base:0
+ msgid "Base"
+ msgstr ""
+
+ #. module: base
++#: selection:base.language.install,lang:0
++msgid "Telugu / తెలుగు"
++msgstr ""
++
++#. module: base
+ #: model:res.country,name:base.lr
+ msgid "Liberia"
-msgstr "Liberië"
++msgstr ""
+
+ #. module: base
+ #: view:ir.attachment:0
+ #: view:ir.model:0
+ #: view:res.groups:0
+ #: view:res.partner:0
+ #: field:res.partner,comment:0
-#: field:res.partner.function,ref:0
++#: model:res.widget,title:base.note_widget
+ msgid "Notes"
-msgstr "Notities"
++msgstr ""
+
+ #. module: base
-#: field:ir.property,value:0
++#: field:ir.config_parameter,value:0
++#: field:ir.property,value_binary:0
++#: field:ir.property,value_datetime:0
++#: field:ir.property,value_float:0
++#: field:ir.property,value_integer:0
++#: field:ir.property,value_reference:0
++#: field:ir.property,value_text:0
+ #: selection:ir.server.object.lines,type:0
+ #: field:ir.server.object.lines,value:0
++#: view:ir.values:0
+ #: field:ir.values,value:0
+ #: field:ir.values,value_unpickle:0
+ msgid "Value"
-msgstr "Waarde"
-
-#. module: base
-#: view:wizard.module.update_translations:0
-msgid "Update Translations"
-msgstr "Vertalingen bijwerken"
++msgstr ""
+
+ #. module: base
++#: field:ir.sequence,code:0
++#: field:ir.sequence.type,code:0
+ #: selection:ir.translation,type:0
+ #: field:res.bank,code:0
-#: field:res.currency,code:0
-#: field:res.lang,code:0
-#: field:res.partner,ref:0
+ #: field:res.partner.bank.type,code:0
-#: field:res.partner.function,code:0
+ msgid "Code"
-msgstr "Code"
++msgstr ""
++
++#. module: base
++#: model:ir.model,name:base.model_res_config_installer
++msgid "res.config.installer"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.mc
+ msgid "Monaco"
-msgstr "Monaco"
++msgstr ""
+
+ #. module: base
+ #: selection:ir.cron,interval_type:0
+ msgid "Minutes"
-msgstr "Minuten"
-
-#. module: base
-#: wizard_view:module.upgrade,end:0
-#: wizard_view:module.upgrade,start:0
-msgid "The modules have been upgraded / installed !"
-msgstr "De modules zijn bewerkt / geïnstalleerd !"
++msgstr ""
+
+ #. module: base
+ #: selection:ir.translation,type:0
-#: view:wizard.module.lang.export:0
+ msgid "Help"
-msgstr "Help"
++msgstr ""
+
+ #. module: base
-#: code:addons/tools/amount_to_text_en.py:0
-#, python-format
-msgid "Number too large '%d', can not translate it"
-msgstr "Getal te groot '%d', kan niet worden omgezet."
++#: help:res.config.users,menu_id:0
++#: help:res.users,menu_id:0
++msgid ""
++"If specified, the action will replace the standard menu for this user."
++msgstr ""
++
++#. module: base
++#: selection:ir.actions.server,state:0
++msgid "Write Object"
++msgstr ""
++
++#. module: base
++#: model:ir.ui.menu,name:base.menu_fundrising
++msgid "Fund Raising"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "terp-hr"
-msgstr "terp-hr"
++#: model:ir.actions.act_window,name:base.ir_sequence_type
++#: model:ir.ui.menu,name:base.menu_ir_sequence_type
++msgid "Sequence Codes"
++msgstr ""
++
++#. module: base
++#: selection:base.language.install,lang:0
++msgid "Spanish (CO) / Español (CO)"
++msgstr ""
++
++#. module: base
++#: view:base.module.configuration:0
++msgid ""
++"All pending configuration wizards have been executed. You may restart "
++"individual wizards via the list of configuration wizards."
++msgstr ""
+
+ #. module: base
+ #: wizard_button:server.action.create,step_1,create:0
+ msgid "Create"
-msgstr "Aanmaken"
++msgstr ""
++
++#. module: base
++#: view:ir.sequence:0
++msgid "Current Year with Century: %(year)s"
++msgstr ""
+
+ #. module: base
+ #: field:ir.exports,export_fields:0
+ msgid "Export ID"
-msgstr "Export ID"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.fr
+ msgid "France"
-msgstr "Frankrijk"
++msgstr ""
++
++#. module: base
++#: model:ir.model,name:base.model_res_log
++msgid "res.log"
++msgstr ""
+
+ #. module: base
++#: help:ir.translation,module:0
++#: help:ir.translation,xml_id:0
++msgid "Maps to the ir_model_data for which this translation is provided."
++msgstr ""
++
++#. module: base
++#: view:workflow.activity:0
+ #: field:workflow.activity,flow_stop:0
+ msgid "Flow Stop"
+ msgstr ""
+
+ #. module: base
+ #: selection:ir.cron,interval_type:0
+ msgid "Weeks"
-msgstr "Weken"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.af
+ msgid "Afghanistan, Islamic State of"
-msgstr "Afghanistan"
++msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/module/wizard/wizard_module_import.py:0
++#: code:addons/base/module/wizard/base_module_import.py:67
+ #, python-format
+ msgid "Error !"
-msgstr "Fout !"
++msgstr ""
+
+ #. module: base
+ #: model:res.partner.bank.type.field,name:base.bank_normal_field_contry
+ msgid "country_id"
+ msgstr ""
+
+ #. module: base
+ #: field:ir.cron,interval_type:0
+ msgid "Interval Unit"
+ msgstr ""
+
+ #. module: base
-#: field:maintenance.contract,kind:0
++#: field:publisher_warranty.contract,kind:0
+ #: field:workflow.activity,kind:0
+ msgid "Kind"
-msgstr "Soort"
++msgstr ""
+
+ #. module: base
-#: code:addons/osv/orm.py:0
++#: code:addons/orm.py:3775
+ #, python-format
+ msgid "This method does not exist anymore"
-msgstr "Deze methode bestaat niet meer"
-
-#. module: base
-#: selection:ir.actions.todo,start_on:0
-msgid "Manual"
+ msgstr ""
+
+ #. module: base
+ #: field:res.bank,fax:0
+ #: field:res.partner.address,fax:0
+ msgid "Fax"
-msgstr "Fax"
++msgstr ""
+
+ #. module: base
+ #: field:res.lang,thousands_sep:0
+ msgid "Thousands Separator"
-msgstr "Scheidingsteken voor duizendtallen"
++msgstr ""
+
+ #. module: base
+ #: field:res.request,create_date:0
+ msgid "Created Date"
-msgstr "Aanmaakdatum"
-
-#. module: base
-#: selection:ir.report.custom,type:0
-msgid "Line Plot"
+ msgstr ""
+
+ #. module: base
-#: field:ir.default,value:0
-msgid "Default Value"
-msgstr "Standaardwaarde"
-
-#. module: base
+ #: help:ir.actions.server,loop_action:0
+ msgid ""
+ "Select the action that will be executed. Loop action will not be avaliable "
+ "inside loop."
+ msgstr ""
+
+ #. module: base
-#: selection:module.lang.install,init,lang:0
++#: selection:base.language.install,lang:0
+ msgid "Chinese (TW) / 正體字"
-msgstr "Chinees (TW) / 正體字"
-
-#. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_GO_UP"
-msgstr "STOCK_GO_UP"
++msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_res_request
+ msgid "res.request"
-msgstr "res.request"
++msgstr ""
+
+ #. module: base
-#: selection:ir.actions.report.xml,report_type:0
-msgid "pdf"
-msgstr "pdf"
++#: view:ir.model:0
++msgid "In Memory"
++msgstr ""
+
+ #. module: base
-#: field:ir.default,company_id:0
-#: field:ir.property,company_id:0
-#: field:ir.values,company_id:0
-#: view:res.company:0
-#: field:res.users,company_id:0
-msgid "Company"
-msgstr "Bedrijf"
++#: view:ir.actions.todo:0
++msgid "Todo"
++msgstr ""
+
+ #. module: base
+ #: field:ir.attachment,datas:0
+ msgid "File Content"
-msgstr "Bestandsinhoud"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.pa
+ msgid "Panama"
-msgstr "Panama"
++msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.gi
-msgid "Gibraltar"
-msgstr "Gibraltar"
++#: model:res.partner.title,name:base.res_partner_title_ltd
++msgid "Ltd"
++msgstr ""
+
+ #. module: base
-#: selection:wizard.module.lang.export,format:0
-msgid "PO File"
-msgstr "PO Bestand"
++#: help:workflow.transition,group_id:0
++msgid ""
++"The group that a user must have to be authorized to validate this transition."
++msgstr ""
+
+ #. module: base
-#: view:ir.attachment:0
-msgid "Preview"
-msgstr "Voorbeeldweergave"
++#: constraint:res.config.users:0
++#: constraint:res.users:0
++msgid "The chosen company is not in the allowed companies for this user"
++msgstr ""
+
+ #. module: base
-#: view:ir.actions.configuration.wizard:0
-msgid "Skip Step"
-msgstr "Stap Overslaan"
++#: model:res.country,name:base.gi
++msgid "Gibraltar"
++msgstr ""
++
++#. module: base
++#: field:ir.actions.report.xml,report_name:0
++msgid "Service Name"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.pn
+ msgid "Pitcairn Island"
-msgstr "Pitcairn eiland"
++msgstr ""
+
+ #. module: base
-#: model:ir.actions.act_window,name:base.res_partner_event_type-act
-#: model:ir.ui.menu,name:base.menu_res_partner_event_type-act
-msgid "Active Partner Events"
++#: view:base.module.upgrade:0
++msgid ""
++"We suggest to reload the menu tab to see the new menus (Ctrl+T then Ctrl+R)."
+ msgstr ""
+
+ #. module: base
+ #: model:ir.actions.act_window,name:base.action_rule
+ #: model:ir.ui.menu,name:base.menu_action_rule
+ msgid "Record Rules"
+ msgstr ""
+
+ #. module: base
-#: view:ir.sequence:0
-msgid "Day of the year: %(doy)s"
-msgstr "Dag van het jaar: %(doy)s"
++#: field:res.config.users,name:0
++#: field:res.users,name:0
++msgid "User Name"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_SPELL_CHECK"
-msgstr "STOCK_SPELL_CHECK"
++#: view:ir.sequence:0
++msgid "Day of the year: %(doy)s"
++msgstr ""
+
+ #. module: base
+ #: view:ir.model:0
+ #: view:ir.model.fields:0
-#: view:ir.property:0
-#: model:ir.ui.menu,name:base.next_id_15
++#: view:workflow.activity:0
+ msgid "Properties"
-msgstr "Eigenschappen"
++msgstr ""
++
++#. module: base
++#: help:ir.sequence,padding:0
++msgid ""
++"OpenERP will automatically adds some '0' on the left of the 'Next Number' to "
++"get the required padding size."
++msgstr ""
+
+ #. module: base
+ #: view:res.lang:0
+ msgid "%A - Full weekday name."
-msgstr "%A - Volledige naam van de dag."
++msgstr ""
+
+ #. module: base
+ #: selection:ir.cron,interval_type:0
+ msgid "Months"
-msgstr "Maanden"
++msgstr ""
+
+ #. module: base
-#: selection:ir.translation,type:0
-msgid "Selection"
-msgstr "Selectie"
++#: field:ir.actions.act_window,search_view:0
++msgid "Search View"
++msgstr ""
+
+ #. module: base
-#: field:ir.rule,domain_force:0
-msgid "Force Domain"
-msgstr "Domein forceren"
++#: sql_constraint:res.lang:0
++msgid "The code of the language must be unique !"
++msgstr ""
+
+ #. module: base
+ #: model:ir.actions.act_window,name:base.action_attachment
++#: view:ir.actions.report.xml:0
+ #: view:ir.attachment:0
+ #: model:ir.ui.menu,name:base.menu_action_attachment
+ msgid "Attachments"
-msgstr "Bijlagen"
-
-#. module: base
-#: view:maintenance.contract.wizard:0
-msgid "_Validate"
+ msgstr ""
+
+ #. module: base
-#: model:ir.model,name:base.model_maintenance_contract_wizard
-msgid "maintenance.contract.wizard"
-msgstr "maintenance.contract.wizard"
++#: model:ir.ui.menu,name:base.menu_base_partner
++#: model:ir.ui.menu,name:base.menu_sale_config_sales
++#: model:ir.ui.menu,name:base.menu_sales
++msgid "Sales"
++msgstr ""
+
+ #. module: base
+ #: field:ir.actions.server,child_ids:0
+ msgid "Other Actions"
+ msgstr ""
+
+ #. module: base
+ #: selection:ir.actions.todo,state:0
++#: view:res.config.users:0
+ msgid "Done"
-msgstr "Voltooid"
-
-#. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_GOTO_FIRST"
-msgstr "STOCK_GOTO_FIRST"
++msgstr ""
+
+ #. module: base
+ #: model:res.partner.title,name:base.res_partner_title_miss
+ msgid "Miss"
-msgstr "Mej."
++msgstr ""
+
+ #. module: base
++#: view:ir.model.access:0
+ #: field:ir.model.access,perm_write:0
++#: view:ir.rule:0
+ msgid "Write Access"
+ msgstr ""
+
+ #. module: base
++#: view:res.lang:0
++msgid "%m - Month number [01,12]."
++msgstr ""
++
++#. module: base
+ #: field:res.bank,city:0
+ #: field:res.partner,city:0
+ #: field:res.partner.address,city:0
+ #: field:res.partner.bank,city:0
+ msgid "City"
-msgstr "Plaats"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.qa
+ msgid "Qatar"
-msgstr "Qatar"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.it
+ msgid "Italy"
-msgstr "Italië"
-
-#. module: base
-#: selection:ir.rule,operator:0
-msgid "<>"
-msgstr "<>"
++msgstr ""
+
+ #. module: base
-#: selection:ir.rule,operator:0
-msgid "<="
-msgstr "<="
++#: view:ir.actions.todo:0
++#: selection:ir.actions.todo,state:0
++msgid "To Do"
++msgstr ""
+
+ #. module: base
-#: selection:module.lang.install,init,lang:0
++#: selection:base.language.install,lang:0
+ msgid "Estonian / Eesti keel"
-msgstr "Estlands / Eesti keel"
++msgstr ""
+
+ #. module: base
-#: selection:module.lang.install,init,lang:0
-msgid "Portugese / português"
-msgstr "Portugees / português"
++#: field:res.config.users,email:0
++#: field:res.partner,email:0
++#: field:res.users,email:0
++msgid "E-mail"
++msgstr ""
+
+ #. module: base
+ #: selection:ir.module.module,license:0
+ msgid "GPL-3 or later version"
-msgstr "GPL-3 of latere versie"
++msgstr ""
+
+ #. module: base
+ #: field:workflow.activity,action:0
+ msgid "Python Action"
+ msgstr ""
+
+ #. module: base
-#: code:addons/osv/orm.py:0
-#, python-format
-msgid "Unknown position in inherited view %s !"
-msgstr "Onbekende positie in geërfde weergave %s !"
++#: selection:base.language.install,lang:0
++msgid "English (US)"
++msgstr ""
++
++#. module: base
++#: model:ir.actions.act_window,name:base.action_model_data
++#: view:ir.model.data:0
++#: model:ir.ui.menu,name:base.ir_model_data_menu
++msgid "Object Identifiers"
++msgstr ""
++
++#. module: base
++#: model:ir.actions.act_window,help:base.action_partner_title_partner
++msgid ""
++"Manage the partner titles you want to have available in your system. The "
++"partner titles is the legal status of the company: Private Limited, SA, etc."
++msgstr ""
+
+ #. module: base
-#: field:res.partner.event,probability:0
-msgid "Probability (0.50)"
++#: view:base.language.export:0
++msgid "To browse official translations, you can start with these links:"
+ msgstr ""
+
+ #. module: base
-#: field:ir.report.custom,repeat_header:0
-msgid "Repeat Header"
++#: code:addons/base/ir/ir_model.py:484
++#, python-format
++msgid ""
++"You can not read this document (%s) ! Be sure your user belongs to one of "
++"these groups: %s."
+ msgstr ""
+
+ #. module: base
++#: view:res.bank:0
++#: field:res.config.users,address_id:0
++#: view:res.partner.address:0
++#: view:res.users:0
+ #: field:res.users,address_id:0
+ msgid "Address"
-msgstr "Adres"
++msgstr ""
+
+ #. module: base
+ #: field:ir.module.module,latest_version:0
+ msgid "Installed version"
-msgstr "Geïnstalleerde versie"
++msgstr ""
+
+ #. module: base
-#: model:ir.ui.menu,name:base.menu_workflow_root
-msgid "Workflow Definitions"
++#: selection:base.language.install,lang:0
++msgid "Mongolian / монгол"
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.mr
+ msgid "Mauritania"
-msgstr "Mauretanië"
++msgstr ""
++
++#. module: base
++#: model:ir.model,name:base.model_ir_translation
++msgid "ir.translation"
++msgstr ""
++
++#. module: base
++#: view:base.module.update:0
++msgid "Module update result"
++msgstr ""
+
+ #. module: base
+ #: view:workflow.activity:0
+ #: field:workflow.workitem,act_id:0
+ msgid "Activity"
+ msgstr ""
+
+ #. module: base
++#: view:res.partner:0
++#: view:res.partner.address:0
++msgid "Postal Address"
++msgstr ""
++
++#. module: base
+ #: field:res.company,parent_id:0
+ msgid "Parent Company"
+ msgstr ""
+
+ #. module: base
++#: selection:base.language.install,lang:0
++msgid "Spanish (CR) / Español (CR)"
++msgstr ""
++
++#. module: base
+ #: field:res.currency.rate,rate:0
+ msgid "Rate"
-msgstr "Wisselkoers"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.cg
+ msgid "Congo"
-msgstr "Congo"
++msgstr ""
+
+ #. module: base
+ #: view:res.lang:0
+ msgid "Examples"
-msgstr "Voorbeelden"
-
-#. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_MEDIA_PAUSE"
-msgstr "STOCK_MEDIA_PAUSE"
-
-#. module: base
-#: help:res.country.state,code:0
-msgid "The state code in three chars.\n"
-msgstr "De provinciecode in drie karakters.\n"
++msgstr ""
+
+ #. module: base
-#: model:ir.model,name:base.model_res_country_state
-msgid "Country state"
-msgstr "Staat/Provincie"
++#: field:ir.default,value:0
++msgid "Default Value"
++msgstr ""
+
+ #. module: base
-#: model:ir.actions.act_window,name:base.ir_property_form_all
-#: model:ir.ui.menu,name:base.menu_ir_property_form_all
-msgid "All Properties"
-msgstr "Alle Eigenschappen"
++#: model:ir.ui.menu,name:base.menu_tools
++msgid "Tools"
++msgstr ""
+
+ #. module: base
-#: model:ir.actions.act_window,name:base.ir_action_window
-#: model:ir.ui.menu,name:base.menu_ir_action_window
-msgid "Window Actions"
-msgstr "Venster Acties"
++#: model:res.country,name:base.kn
++msgid "Saint Kitts & Nevis Anguilla"
++msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.ch
-msgid "Switzerland"
-msgstr "Zwitserland"
++#: code:addons/base/res/res_currency.py:100
++#, python-format
++msgid ""
++"No rate found \n"
++"for the currency: %s \n"
++"at the date: %s"
++msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.kn
-msgid "Saint Kitts & Nevis Anguilla"
-msgstr "Saint Kitts & Nevis Anguilla"
++#: model:ir.actions.act_window,help:base.action_ui_view_custom
++msgid ""
++"Customized views are used when users reorganize the content of their "
++"dashboard views (via web client)"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_HOME"
-msgstr "STOCK_HOME"
++#: field:ir.model,name:0
++#: field:ir.model.fields,model:0
++#: field:ir.values,model:0
++msgid "Object Name"
++msgstr ""
+
+ #. module: base
+ #: help:ir.actions.server,srcmodel_id:0
+ msgid ""
+ "Object in which you want to create / write the object. If it is empty then "
+ "refer to the Object field."
+ msgstr ""
-"Object waarbinnen u het object wilt aanmaken/schrijven. Als het leeg is dan "
-"wordt het objectveld gebruikt."
+
+ #. module: base
++#: view:ir.module.module:0
+ #: selection:ir.module.module,state:0
+ #: selection:ir.module.module.dependency,state:0
+ msgid "Not Installed"
-msgstr "Niet geïnstalleerd"
++msgstr ""
+
+ #. module: base
++#: view:workflow.activity:0
+ #: field:workflow.activity,out_transitions:0
+ msgid "Outgoing Transitions"
+ msgstr ""
+
+ #. module: base
+ #: field:ir.ui.menu,icon:0
+ msgid "Icon"
-msgstr "Icoon"
++msgstr ""
++
++#. module: base
++#: help:ir.model.fields,model_id:0
++msgid "The model this field belongs to"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.mq
+ msgid "Martinique (French)"
-msgstr "Martinique"
++msgstr ""
++
++#. module: base
++#: view:ir.sequence.type:0
++msgid "Sequences Type"
++msgstr ""
+
+ #. module: base
+ #: model:ir.actions.act_window,name:base.res_request-act
+ #: model:ir.ui.menu,name:base.menu_res_request_act
-#: model:ir.ui.menu,name:base.next_id_12
++#: model:ir.ui.menu,name:base.menu_resquest_ref
+ #: view:res.request:0
+ msgid "Requests"
-msgstr "Verzoeken"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.ye
+ msgid "Yemen"
-msgstr "Jemen"
++msgstr ""
+
+ #. module: base
+ #: selection:workflow.activity,split_mode:0
+ msgid "Or"
-msgstr "Of"
++msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.pk
-msgid "Pakistan"
-msgstr "Pakistan"
++#: model:ir.actions.act_window,name:base.res_log_act_window
++#: model:ir.ui.menu,name:base.menu_res_log_act_window
++msgid "Client Logs"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.al
+ msgid "Albania"
-msgstr "Albanië"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.ws
+ msgid "Samoa"
-msgstr "Samoa"
++msgstr ""
++
++#. module: base
++#: code:addons/base/res/res_lang.py:161
++#, python-format
++msgid ""
++"You cannot delete the language which is Active !\n"
++"Please de-activate the language first."
++msgstr ""
++
++#. module: base
++#: view:base.language.install:0
++#: view:base.module.import:0
++msgid ""
++"Please be patient, this operation may take a few minutes (depending on the "
++"number of modules currently installed)..."
++msgstr ""
+
+ #. module: base
+ #: field:ir.ui.menu,child_id:0
+ msgid "Child IDs"
-msgstr "Onderliggende ID's"
++msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/ir/ir_actions.py:0
++#: code:addons/base/ir/ir_actions.py:713
++#: code:addons/base/ir/ir_actions.py:716
+ #, python-format
+ msgid "Problem in configuration `Record Id` in Server Action!"
-msgstr "Probleem in configuratie `Record id` in Server Actie!"
++msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/maintenance/maintenance.py:0
++#: code:addons/orm.py:2306
++#: code:addons/orm.py:2316
+ #, python-format
-msgid "This error occurs on database %s"
++msgid "ValidateError"
++msgstr ""
++
++#. module: base
++#: view:base.module.import:0
++#: view:base.module.update:0
++msgid "Open Modules"
++msgstr ""
++
++#. module: base
++#: model:ir.actions.act_window,help:base.action_res_bank_form
++msgid "Manage bank records you want to be used in the system."
+ msgstr ""
+
+ #. module: base
-#: wizard_button:base.module.import,init,import:0
-#: model:ir.actions.wizard,name:base.wizard_base_module_import
-#: model:ir.ui.menu,name:base.menu_wizard_module_import
++#: view:base.module.import:0
+ msgid "Import module"
-msgstr "Importeer module"
++msgstr ""
++
++#. module: base
++#: field:ir.actions.server,loop_action:0
++msgid "Loop Action"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_DISCONNECT"
-msgstr "STOCK_DISCONNECT"
++#: help:ir.actions.report.xml,report_file:0
++msgid ""
++"The path to the main report file (depending on Report Type) or NULL if the "
++"content is in another field"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.la
+ msgid "Laos"
-msgstr "Laos"
++msgstr ""
+
+ #. module: base
+ #: selection:ir.actions.server,state:0
++#: field:res.config.users,user_email:0
++#: field:res.users,user_email:0
+ msgid "Email"
-msgstr "Email"
++msgstr ""
+
+ #. module: base
-#: model:ir.actions.act_window,name:base.action_wizard_update_translations
-#: model:ir.ui.menu,name:base.menu_wizard_update_translations
-msgid "Resynchronise Terms"
++#: field:res.config.users,action_id:0
++#: field:res.users,action_id:0
++msgid "Home Action"
++msgstr ""
++
++#. module: base
++#: code:addons/custom.py:558
++#, python-format
++msgid ""
++"The sum of the data (2nd field) is null.\n"
++"We can't draw a pie chart !"
++msgstr ""
++
++#. module: base
++#: model:ir.ui.menu,name:base.menu_lunch_reporting
++#: model:ir.ui.menu,name:base.menu_project_report
++#: model:ir.ui.menu,name:base.menu_report_association
++#: model:ir.ui.menu,name:base.menu_report_marketing
++#: model:ir.ui.menu,name:base.menu_reporting
++#: model:ir.ui.menu,name:base.next_id_64
++#: model:ir.ui.menu,name:base.next_id_73
++#: model:ir.ui.menu,name:base.reporting_menu
++msgid "Reporting"
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.tg
+ msgid "Togo"
-msgstr "Togo"
++msgstr ""
++
++#. module: base
++#: selection:ir.module.module,license:0
++msgid "Other Proprietary"
++msgstr ""
+
+ #. module: base
+ #: selection:workflow.activity,kind:0
+ msgid "Stop All"
-msgstr "Alles stoppen"
++msgstr ""
++
++#. module: base
++#: code:addons/orm.py:412
++#, python-format
++msgid "The read_group method is not implemented on this object !"
++msgstr ""
++
++#. module: base
++#: view:ir.model.data:0
++msgid "Updatable"
++msgstr ""
+
+ #. module: base
+ #: view:res.lang:0
+ msgid "3. %x ,%X ==> 12/05/08, 18:25:20"
-msgstr "3. %x ,%X ==> 12/05/08, 18:25:20"
++msgstr ""
+
+ #. module: base
+ #: selection:ir.model.fields,on_delete:0
+ msgid "Cascade"
+ msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/ir/ir_report_custom.py:0
-#, python-format
-msgid "Field %d should be a figure"
++#: field:workflow.transition,group_id:0
++msgid "Group Required"
+ msgstr ""
+
+ #. module: base
+ #: view:ir.actions.configuration.wizard:0
+ msgid "Next Configuration Step"
-msgstr "Volgende Configuratie Stap"
++msgstr ""
+
+ #. module: base
+ #: field:res.groups,comment:0
+ msgid "Comment"
-msgstr "Opmerking"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.ro
+ msgid "Romania"
-msgstr "Roemenië"
++msgstr ""
++
++#. module: base
++#: help:ir.cron,doall:0
++msgid ""
++"Enable this if you want to execute missed occurences as soon as the server "
++"restarts."
++msgstr ""
++
++#. module: base
++#: view:base.module.upgrade:0
++msgid "Start update"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_PREFERENCES"
-msgstr "STOCK_PREFERENCES"
++#: code:addons/base/publisher_warranty/publisher_warranty.py:144
++#, python-format
++msgid "Contract validation error"
++msgstr ""
+
+ #. module: base
+ #: field:res.country.state,name:0
+ msgid "State Name"
-msgstr "Naam Staat/Provincie"
++msgstr ""
+
+ #. module: base
+ #: field:workflow.activity,join_mode:0
+ msgid "Join Mode"
+ msgstr ""
+
+ #. module: base
++#: field:res.config.users,context_tz:0
+ #: field:res.users,context_tz:0
+ msgid "Timezone"
-msgstr "Tijdszone"
-
-#. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_GOTO_LAST"
-msgstr "STOCK_GOTO_LAST"
++msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_ir_actions_report_xml
+ #: selection:ir.ui.menu,action:0
+ msgid "ir.actions.report.xml"
-msgstr "ir.actions.report.xml"
++msgstr ""
+
+ #. module: base
-#: view:wizard.module.lang.export:0
-msgid ""
-"To improve some terms of the official translations of OpenERP, you should "
-"modify the terms directly on the launchpad interface. If you made lots of "
-"translations for your own module, you can also publish all your translation "
-"at once."
++#: model:res.partner.title,shortcut:base.res_partner_title_miss
++msgid "Mss"
+ msgstr ""
-"Om enkele termen van de officiële vertalingen van OpenERP te verbeteren kunt "
-"u dit het beste direct op de launchpad pagina doen. Wanneer u veel "
-"vertalingen heeft voor uw eigen module kunt u de vertaling ook ineens "
-"publiceren."
+
+ #. module: base
-#: wizard_button:module.lang.install,init,start:0
-msgid "Start installation"
-msgstr "Installatie Starten"
++#: model:ir.model,name:base.model_ir_ui_view
++msgid "ir.ui.view"
++msgstr ""
+
+ #. module: base
+ #: constraint:res.partner:0
+ msgid "Error ! You can not create recursive associated members."
+ msgstr ""
+
+ #. module: base
++#: help:res.lang,code:0
++msgid "This field is used to set/get locales for user"
++msgstr ""
++
++#. module: base
+ #: model:res.partner.category,name:base.res_partner_category_2
+ msgid "OpenERP Partners"
+ msgstr ""
+
+ #. module: base
++#: model:ir.ui.menu,name:base.menu_hr_manager
++msgid "HR Manager Dashboard"
++msgstr ""
++
++#. module: base
++#: code:addons/base/module/module.py:253
++#, python-format
++msgid ""
++"Unable to install module \"%s\" because an external dependency is not met: %s"
++msgstr ""
++
++#. module: base
++#: view:ir.module.module:0
++msgid "Search modules"
++msgstr ""
++
++#. module: base
+ #: model:res.country,name:base.by
+ msgid "Belarus"
-msgstr "Wit-Rusland"
++msgstr ""
+
+ #. module: base
+ #: field:ir.actions.act_window,name:0
+ #: field:ir.actions.act_window_close,name:0
+ #: field:ir.actions.actions,name:0
+ #: field:ir.actions.server,name:0
+ #: field:ir.actions.url,name:0
++#: field:ir.filters,name:0
+ msgid "Action Name"
+ msgstr ""
+
+ #. module: base
++#: model:ir.actions.act_window,help:base.action_res_users
++msgid ""
++"Create and manage users that will connect to the system. Users can be "
++"deactivated should there be a period of time during which they will/should "
++"not connect to the system. You can assign them groups in order to give them "
++"specific access to the applications they need to use in the system."
++msgstr ""
++
++#. module: base
+ #: selection:res.request,priority:0
+ msgid "Normal"
-msgstr "Normaal"
++msgstr ""
+
+ #. module: base
+ #: field:res.bank,street2:0
+ #: field:res.partner.address,street2:0
+ msgid "Street2"
-msgstr "Adres 2"
++msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.pr
-msgid "Puerto Rico"
-msgstr "Puerto Rico"
++#: model:ir.actions.act_window,name:base.action_view_base_module_update
++msgid "Module Update"
++msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/res/res_currency.py:0
++#: code:addons/base/module/wizard/base_module_upgrade.py:95
+ #, python-format
-msgid ""
-"No rate found \n"
-"' \\n 'for the currency: %s \n"
-"' \\n 'at the date: %s"
++msgid "Following modules are not installed or unknown: %s"
++msgstr ""
++
++#. module: base
++#: view:ir.cron:0
++#: field:ir.cron,user_id:0
++#: view:ir.filters:0
++#: field:ir.filters,user_id:0
++#: field:ir.ui.view.custom,user_id:0
++#: field:ir.values,user_id:0
++#: field:res.log,user_id:0
++#: field:res.partner.event,user_id:0
++#: view:res.users:0
++#: field:res.widget.user,user_id:0
++msgid "User"
++msgstr ""
++
++#. module: base
++#: model:res.country,name:base.pr
++msgid "Puerto Rico"
+ msgstr ""
+
+ #. module: base
+ #: view:ir.actions.act_window:0
+ msgid "Open Window"
-msgstr "Open venster"
++msgstr ""
+
+ #. module: base
-#: field:ir.module.repository,filter:0
++#: field:ir.actions.act_window,auto_search:0
++msgid "Auto Search"
++msgstr ""
++
++#. module: base
++#: field:ir.actions.act_window,filter:0
+ msgid "Filter"
-msgstr "Filter"
++msgstr ""
++
++#. module: base
++#: model:res.partner.title,shortcut:base.res_partner_title_madam
++msgid "Ms."
++msgstr ""
++
++#. module: base
++#: model:res.country,name:base.ch
++msgid "Switzerland"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.gd
+ msgid "Grenada"
-msgstr "Grenada"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.wf
+ msgid "Wallis and Futuna Islands"
-msgstr "Wallis and Futuna-eilanden"
++msgstr ""
+
+ #. module: base
+ #: selection:server.action.create,init,type:0
+ msgid "Open Report"
-msgstr "Open rapport"
++msgstr ""
+
+ #. module: base
+ #: field:res.currency,rounding:0
+ msgid "Rounding factor"
-msgstr "Afrondingsfactor"
++msgstr ""
+
+ #. module: base
-#: wizard_view:module.module.update,update:0
-msgid "New modules"
-msgstr "Nieuwe modules"
++#: view:base.language.install:0
++msgid "Load"
++msgstr ""
+
+ #. module: base
-#: model:ir.model,name:base.model_res_company
-msgid "res.company"
-msgstr "res.company"
++#: help:res.config.users,name:0
++#: help:res.users,name:0
++msgid "The new user's real name, used for searching and most listings"
++msgstr ""
++
++#. module: base
++#: code:addons/osv.py:154
++#: code:addons/osv.py:156
++#, python-format
++msgid "Integrity Error"
++msgstr ""
+
+ #. module: base
-#: wizard_view:module.upgrade,end:0
-#: wizard_view:module.upgrade,start:0
-msgid "System upgrade done"
-msgstr "Bijwerken systeem voltooid"
++#: model:ir.model,name:base.model_ir_wizard_screen
++msgid "ir.wizard.screen"
++msgstr ""
++
++#. module: base
++#: code:addons/base/ir/ir_model.py:223
++#, python-format
++msgid "Size of the field can never be less than 1 !"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.so
+ msgid "Somalia"
-msgstr "Somalië"
++msgstr ""
+
+ #. module: base
-#: model:ir.actions.act_window,name:base.action_config_simple_view_form
-msgid "Configure Simple View"
-msgstr "Eenvoudige Weergave Aanpassen"
++#: selection:publisher_warranty.contract,state:0
++msgid "Terminated"
++msgstr ""
+
+ #. module: base
+ #: model:res.partner.category,name:base.res_partner_category_13
+ msgid "Important customers"
-msgstr "Belangrijke klanten"
++msgstr ""
+
+ #. module: base
-#: model:ir.actions.act_window,name:base.action_report_custom
-#: view:ir.report.custom:0
-msgid "Custom Report"
-msgstr "Aangepast Rapport"
++#: view:res.lang:0
++msgid "Update Terms"
++msgstr ""
+
+ #. module: base
-#: field:ir.cron,args:0
-msgid "Arguments"
-msgstr "Argumenten"
++#: field:partner.sms.send,mobile_to:0
++#: field:res.request,act_to:0
++#: field:res.request.history,act_to:0
++msgid "To"
++msgstr ""
+
+ #. module: base
-#: selection:ir.actions.report.xml,report_type:0
-msgid "sxw"
-msgstr "sxw"
++#: view:ir.cron:0
++#: field:ir.cron,args:0
++msgid "Arguments"
++msgstr ""
+
+ #. module: base
-#: code:addons/osv/orm.py:0
++#: code:addons/orm.py:716
+ #, python-format
+ msgid "Database ID doesn't exist: %s : %s"
+ msgstr ""
+
+ #. module: base
-#: code:addons/osv/orm.py:0
-#, python-format
-msgid "key '%s' not found in selection field '%s'"
++#: selection:ir.module.module,license:0
++msgid "GPL Version 2"
++msgstr ""
++
++#. module: base
++#: selection:ir.module.module,license:0
++msgid "GPL Version 3"
+ msgstr ""
+
+ #. module: base
-#: code:addons/osv/orm.py:0
++#: code:addons/orm.py:836
+ #, python-format
-msgid "The value \"%s\" for the field \"%s\" is not in the selection"
++msgid "key '%s' not found in selection field '%s'"
+ msgstr ""
-"De waarde \"% s\" voor het veld \"% s\" is niet opgenomen in de selectie"
+
+ #. module: base
-#: field:ir.actions.report.xml,auto:0
-msgid "Automatic XSL:RML"
-msgstr "Automatische XSL:RML"
++#: view:partner.wizard.ean.check:0
++msgid "Correct EAN13"
++msgstr ""
+
+ #. module: base
-#: view:ir.rule:0
-msgid "Manual domain setup"
-msgstr "Handmatige domein installatie"
++#: code:addons/orm.py:2317
++#, python-format
++msgid "The value \"%s\" for the field \"%s\" is not in the selection"
++msgstr ""
+
+ #. module: base
+ #: field:res.partner,customer:0
++#: view:res.partner.address:0
++#: field:res.partner.address,is_customer_add:0
+ #: model:res.partner.category,name:base.res_partner_category_0
-#: selection:res.partner.event,partner_type:0
+ msgid "Customer"
-msgstr "Klant"
++msgstr ""
+
+ #. module: base
-#: field:ir.actions.report.custom,name:0
-#: field:ir.report.custom,name:0
-msgid "Report Name"
-msgstr "Rapport Naam"
++#: selection:base.language.install,lang:0
++msgid "Spanish (NI) / Español (NI)"
++msgstr ""
+
+ #. module: base
+ #: field:ir.module.module,shortdesc:0
+ msgid "Short Description"
-msgstr "Korte omschrijving"
-
-#. module: base
-#: field:res.partner.event,partner_type:0
-msgid "Partner Relation"
+ msgstr ""
+
+ #. module: base
+ #: field:ir.actions.act_window,context:0
++#: field:ir.filters,context:0
+ msgid "Context Value"
+ msgstr ""
+
+ #. module: base
+ #: view:ir.sequence:0
+ msgid "Hour 00->24: %(h24)s"
-msgstr "Uur 00->24: %(h24)s"
++msgstr ""
++
++#. module: base
++#: field:ir.cron,nextcall:0
++msgid "Next Execution Date"
++msgstr ""
++
++#. module: base
++#: help:multi_company.default,field_id:0
++msgid "Select field property"
++msgstr ""
+
+ #. module: base
+ #: field:res.request.history,date_sent:0
+ msgid "Date sent"
-msgstr "Verzenddatum"
++msgstr ""
+
+ #. module: base
+ #: view:ir.sequence:0
+ msgid "Month: %(month)s"
+ msgstr ""
+
+ #. module: base
+ #: field:ir.actions.act_window.view,sequence:0
+ #: field:ir.actions.server,sequence:0
+ #: field:ir.actions.todo,sequence:0
-#: field:ir.module.repository,sequence:0
-#: field:ir.report.custom.fields,sequence:0
++#: view:ir.cron:0
+ #: view:ir.sequence:0
+ #: field:ir.ui.menu,sequence:0
++#: view:ir.ui.view:0
++#: field:ir.ui.view,priority:0
+ #: field:ir.ui.view_sc,sequence:0
++#: field:multi_company.default,sequence:0
+ #: field:res.partner.bank,sequence:0
++#: field:res.widget.user,sequence:0
+ #: field:wizard.ir.model.menu.create.line,sequence:0
+ msgid "Sequence"
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.tn
+ msgid "Tunisia"
-msgstr "Tunesië"
++msgstr ""
+
+ #. module: base
-#: field:ir.actions.wizard,name:0
-msgid "Wizard Info"
-msgstr "Assistent informatie"
++#: model:ir.ui.menu,name:base.menu_mrp_root
++msgid "Manufacturing"
++msgstr ""
+
+ #. module: base
-#: help:ir.cron,numbercall:0
-msgid ""
-"Number of time the function is called,\n"
-"a negative number indicates that the function will always be called"
++#: model:res.country,name:base.km
++msgid "Comoros"
+ msgstr ""
-"Aantal keer dat de functie wordt aangeroepen,\n"
-"een negatief getal geeft aan dat de functie altijd wordt aangeroepen"
+
+ #. module: base
-#: model:res.partner.category,name:base.res_partner_category_16
-msgid "Telecom sector"
-msgstr "Telecom sector"
++#: model:ir.actions.act_window,name:base.action_server_action
++#: view:ir.actions.server:0
++#: model:ir.ui.menu,name:base.menu_server_action
++msgid "Server Actions"
++msgstr ""
+
+ #. module: base
+ #: view:ir.module.module:0
+ msgid "Cancel Install"
+ msgstr ""
+
+ #. module: base
++#: field:ir.model.fields,selection:0
++msgid "Selection Options"
++msgstr ""
++
++#. module: base
++#: field:res.partner.category,parent_right:0
++msgid "Right parent"
++msgstr ""
++
++#. module: base
+ #: view:res.lang:0
+ msgid "Legends for Date and Time Formats"
-msgstr "Legenda voor Datum- en Tijdnotatie"
++msgstr ""
+
+ #. module: base
-#: selection:ir.report.custom,frequency:0
-msgid "Monthly"
-msgstr "Maandelijks"
++#: selection:ir.actions.server,state:0
++msgid "Copy Object"
++msgstr ""
+
+ #. module: base
-#: model:ir.actions.act_window,name:base.res_partner_som-act
-#: model:ir.ui.menu,name:base.menu_res_partner_som-act
-msgid "States of mind"
++#: code:addons/base/res/res_user.py:581
++#, python-format
++msgid ""
++"Group(s) cannot be deleted, because some user(s) still belong to them: %s !"
+ msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_SORT_ASCENDING"
-msgstr "STOCK_SORT_ASCENDING"
++#: model:ir.actions.act_window,name:base.action_country_state
++#: model:ir.ui.menu,name:base.menu_country_state_partner
++msgid "Fed. States"
++msgstr ""
+
+ #. module: base
+ #: view:ir.model:0
+ #: view:res.groups:0
+ msgid "Access Rules"
-msgstr "Toegangsrechten"
++msgstr ""
+
+ #. module: base
+ #: field:ir.default,ref_table:0
+ msgid "Table Ref."
-msgstr "Tabel Ref."
-
-#. module: base
-#: field:res.roles,parent_id:0
-msgid "Parent"
-msgstr "Bovenliggende"
++msgstr ""
+
+ #. module: base
+ #: field:ir.actions.act_window,res_model:0
-#: field:ir.actions.report.custom,model:0
+ #: field:ir.actions.report.xml,model:0
+ #: field:ir.actions.server,model_id:0
+ #: field:ir.actions.wizard,model:0
+ #: field:ir.cron,model:0
+ #: field:ir.default,field_tbl:0
-#: view:ir.model:0
++#: field:ir.filters,model_id:0
+ #: field:ir.model,model:0
++#: view:ir.model.access:0
+ #: field:ir.model.access,model_id:0
++#: view:ir.model.data:0
+ #: field:ir.model.data,model:0
-#: field:ir.model.grid,model:0
-#: field:ir.report.custom,model_id:0
++#: view:ir.model.fields:0
++#: view:ir.rule:0
++#: field:ir.rule,model_id:0
+ #: selection:ir.translation,type:0
++#: view:ir.ui.view:0
+ #: field:ir.ui.view,model:0
++#: view:ir.values:0
+ #: field:ir.values,model_id:0
++#: field:multi_company.default,object_id:0
++#: field:res.log,res_model:0
+ #: field:res.request.link,object:0
-#: field:wizard.ir.model.menu.create,model_id:0
+ #: field:workflow.triggers,model:0
+ msgid "Object"
-msgstr "Object"
++msgstr ""
++
++#. module: base
++#: code:addons/osv.py:151
++#, python-format
++msgid ""
++"\n"
++"\n"
++"[object with reference: %s - %s]"
++msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_ir_default
+ msgid "ir.default"
-msgstr "ir.default"
++msgstr ""
+
+ #. module: base
+ #: view:ir.sequence:0
+ msgid "Minute: %(min)s"
-msgstr "Minuut: %(min)s"
++msgstr ""
++
++#. module: base
++#: view:base.update.translations:0
++#: model:ir.actions.act_window,name:base.action_wizard_update_translations
++#: model:ir.ui.menu,name:base.menu_wizard_update_translations
++msgid "Synchronize Translations"
++msgstr ""
+
+ #. module: base
+ #: model:ir.ui.menu,name:base.next_id_10
+ msgid "Scheduler"
-msgstr "Planner"
++msgstr ""
+
+ #. module: base
-#: view:res.lang:0
-msgid "%w - Weekday as a decimal number [0(Sunday),6]."
-msgstr "%w - Weekdag als decimal getal [0(Zondag),6]."
++#: help:ir.cron,numbercall:0
++msgid ""
++"Number of time the function is called,\n"
++"a negative number indicates no limit"
++msgstr ""
+
+ #. module: base
-#: view:wizard.module.lang.export:0
-msgid "Export translation file"
-msgstr "Vertaalbestand exporteren"
++#: code:addons/base/ir/ir_model.py:331
++#, python-format
++msgid ""
++"Changing the type of a column is not yet supported. Please drop it and "
++"create it again!"
++msgstr ""
++
++#. module: base
++#: field:ir.ui.view_sc,user_id:0
++msgid "User Ref."
++msgstr ""
++
++#. module: base
++#: code:addons/base/res/res_user.py:580
++#, python-format
++msgid "Warning !"
++msgstr ""
++
++#. module: base
++#: model:res.widget,title:base.google_maps_widget
++msgid "Google Maps"
++msgstr ""
+
+ #. module: base
+ #: model:ir.ui.menu,name:base.menu_base_config
+ #: model:ir.ui.menu,name:base.menu_config
++#: model:ir.ui.menu,name:base.menu_event_config
++#: model:ir.ui.menu,name:base.menu_lunch_survey_root
++#: model:ir.ui.menu,name:base.menu_marketing_config_association
++#: model:ir.ui.menu,name:base.menu_marketing_config_root
+ #: view:res.company:0
+ msgid "Configuration"
-msgstr "Instellingen"
++msgstr ""
+
+ #. module: base
-#: selection:res.partner.event,partner_type:0
-msgid "Retailer"
-msgstr "Detailhandelaar"
++#: model:ir.model,name:base.model_publisher_warranty_contract_wizard
++msgid "publisher_warranty.contract.wizard"
++msgstr ""
++
++#. module: base
++#: field:ir.actions.server,expression:0
++msgid "Loop Expression"
++msgstr ""
+
+ #. module: base
-#: selection:ir.report.custom,type:0
-msgid "Tabular"
-msgstr "In tabelvorm"
++#: field:publisher_warranty.contract,date_start:0
++msgid "Starting Date"
++msgstr ""
+
+ #. module: base
-#: field:ir.actions.todo,start_on:0
-msgid "Start On"
-msgstr "Start op"
++#: help:res.partner,website:0
++msgid "Website of Partner"
++msgstr ""
+
+ #. module: base
+ #: model:res.partner.category,name:base.res_partner_category_5
+ msgid "Gold Partner"
+ msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_res_partner
+ #: field:res.company,partner_id:0
-#: field:res.partner.address,partner_id:0
++#: view:res.partner.address:0
+ #: field:res.partner.bank,partner_id:0
+ #: field:res.partner.event,partner_id:0
+ #: selection:res.partner.title,domain:0
++#: model:res.request.link,name:base.req_link_partner
+ msgid "Partner"
-msgstr "Relatie"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.tr
+ msgid "Turkey"
-msgstr "Turkije"
++msgstr ""
++
++#. module: base
++#: model:res.country,name:base.fk
++msgid "Falkland Islands"
++msgstr ""
+
+ #. module: base
-#: selection:ir.actions.report.xml,report_type:0
-msgid "odt"
-msgstr "odt"
++#: model:res.country,name:base.lb
++msgid "Lebanon"
++msgstr ""
+
+ #. module: base
-#: field:ir.actions.report.custom,type:0
-#: field:ir.actions.report.xml,type:0
-#: field:ir.report.custom,type:0
++#: view:ir.actions.report.xml:0
++#: field:ir.actions.report.xml,report_type:0
+ msgid "Report Type"
-msgstr "Rapporttype"
++msgstr ""
+
+ #. module: base
+ #: field:ir.actions.todo,state:0
++#: view:ir.module.module:0
+ #: field:ir.module.module,state:0
+ #: field:ir.module.module.dependency,state:0
-#: field:ir.report.custom,state:0
-#: field:maintenance.contract,state:0
++#: field:publisher_warranty.contract,state:0
+ #: field:res.bank,state:0
+ #: view:res.country.state:0
+ #: field:res.partner.bank,state_id:0
++#: view:res.request:0
+ #: field:res.request,state:0
+ #: field:workflow.instance,state:0
+ #: field:workflow.workitem,state:0
+ msgid "State"
-msgstr "Status"
-
-#. module: base
-#: selection:ir.module.module,license:0
-msgid "Other proprietary"
-msgstr "Andere eigenaar"
-
-#. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "terp-administration"
-msgstr "terp-administratie"
++msgstr ""
+
+ #. module: base
-#: model:ir.actions.act_window,name:base.action_translation
-#: model:ir.ui.menu,name:base.menu_action_translation
-msgid "All terms"
-msgstr "Alle Termen"
++#: selection:base.language.install,lang:0
++msgid "Galician / Galego"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.no
+ msgid "Norway"
-msgstr "Noorwegen"
++msgstr ""
+
+ #. module: base
+ #: view:res.lang:0
+ msgid "4. %b, %B ==> Dec, December"
-msgstr "4. %b, %B ==> Dec, December"
++msgstr ""
+
+ #. module: base
-#: model:ir.actions.wizard,name:base.wizard_lang_install
-#: model:ir.ui.menu,name:base.menu_wizard_lang_install
++#: view:base.language.install:0
++#: model:ir.ui.menu,name:base.menu_view_base_language_install
+ msgid "Load an Official Translation"
-msgstr "Laad een Officiele vertaling"
++msgstr ""
+
+ #. module: base
-#: selection:res.partner.address,type:0
-msgid "Delivery"
-msgstr "Levering"
++#: view:res.currency:0
++msgid "Miscelleanous"
++msgstr ""
+
+ #. module: base
+ #: model:res.partner.category,name:base.res_partner_category_10
+ msgid "Open Source Service Company"
-msgstr "Open Source Dienstverlener"
++msgstr ""
++
++#. module: base
++#: model:res.country,name:base.kg
++msgid "Kyrgyz Republic (Kyrgyzstan)"
++msgstr ""
+
+ #. module: base
+ #: selection:res.request,state:0
+ msgid "waiting"
-msgstr "in wacht"
++msgstr ""
+
+ #. module: base
-#: field:ir.attachment,link:0
-msgid "Link"
-msgstr "Koppeling"
++#: field:ir.actions.report.xml,report_file:0
++msgid "Report file"
++msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_workflow_triggers
+ msgid "workflow.triggers"
+ msgstr ""
+
+ #. module: base
-#: field:ir.report.custom.fields,report_id:0
-msgid "Report Ref"
-msgstr "Rapport Ref."
++#: code:addons/base/ir/ir_model.py:62
++#, python-format
++msgid "Invalid search criterions"
++msgstr ""
++
++#. module: base
++#: view:ir.attachment:0
++msgid "Created"
++msgstr ""
+
+ #. module: base
+ #: help:ir.actions.wizard,multi:0
+ msgid ""
+ "If set to true, the wizard will not be displayed on the right toolbar of a "
+ "form view."
+ msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_DND"
-msgstr "STOCK_DND"
++#: view:base.language.import:0
++msgid "- type,name,res_id,src,value"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.hm
+ msgid "Heard and McDonald Islands"
-msgstr "Heard en McDonald Eilanden"
++msgstr ""
+
+ #. module: base
+ #: field:ir.actions.act_window,view_id:0
+ msgid "View Ref."
-msgstr "Weergave Ref."
-
-#. module: base
-#: selection:module.lang.install,init,lang:0
-msgid "Dutch (Belgium) / Nederlands (Belgïe)"
+ msgstr ""
+
+ #. module: base
-#: model:ir.actions.act_window,name:base.open_repository_tree
-#: view:ir.module.repository:0
-#: model:ir.ui.menu,name:base.menu_module_repository_tree
-msgid "Repository list"
++#: selection:ir.translation,type:0
++msgid "Selection"
+ msgstr ""
+
+ #. module: base
+ #: field:res.company,rml_header1:0
+ msgid "Report Header"
-msgstr "Rapport koptekst"
-
-#. module: base
-#: field:res.roles,child_id:0
-msgid "Children"
-msgstr "Onderliggende"
++msgstr ""
+
+ #. module: base
+ #: field:ir.actions.act_window,type:0
+ #: field:ir.actions.act_window_close,type:0
+ #: field:ir.actions.actions,type:0
++#: field:ir.actions.report.xml,type:0
++#: view:ir.actions.server:0
+ #: field:ir.actions.server,state:0
+ #: field:ir.actions.server,type:0
+ #: field:ir.actions.url,type:0
+ #: field:ir.actions.wizard,type:0
+ msgid "Action Type"
-msgstr "Soort actie"
++msgstr ""
++
++#. module: base
++#: code:addons/base/module/module.py:268
++#, python-format
++msgid ""
++"You try to install module '%s' that depends on module '%s'.\n"
++"But the latter module is not available in your system."
++msgstr ""
++
++#. module: base
++#: view:base.language.import:0
++#: model:ir.actions.act_window,name:base.action_view_base_import_language
++#: model:ir.ui.menu,name:base.menu_view_base_import_language
++msgid "Import Translation"
++msgstr ""
+
+ #. module: base
+ #: field:res.partner.bank.type,field_ids:0
+ msgid "Type fields"
-msgstr "Soort velden"
++msgstr ""
+
+ #. module: base
++#: view:ir.module.module:0
+ #: field:ir.module.module,category_id:0
+ msgid "Category"
-msgstr "Categorie"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_FLOPPY"
-msgstr "STOCK_FLOPPY"
++#: view:ir.attachment:0
++#: selection:ir.attachment,type:0
++#: selection:ir.property,type:0
++msgid "Binary"
++msgstr ""
+
+ #. module: base
+ #: field:ir.actions.server,sms:0
+ #: selection:ir.actions.server,state:0
+ msgid "SMS"
-msgstr "SMS"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.cr
+ msgid "Costa Rica"
-msgstr "Costa Rica"
++msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/maintenance/maintenance.py:0
-#, python-format
-msgid "Your can't submit bug reports due to uncovered modules: %s"
++#: view:workflow.activity:0
++msgid "Conditions"
+ msgstr ""
+
+ #. module: base
-#: view:ir.model:0
-#: view:res.request:0
-msgid "Status"
-msgstr "Status"
++#: model:ir.actions.act_window,name:base.action_partner_other_form
++msgid "Other Partners"
++msgstr ""
+
+ #. module: base
+ #: model:ir.actions.act_window,name:base.action_currency_form
+ #: model:ir.ui.menu,name:base.menu_action_currency_form
+ #: view:res.currency:0
+ msgid "Currencies"
-msgstr "Valuta"
++msgstr ""
++
++#. module: base
++#: sql_constraint:res.groups:0
++msgid "The name of the group must be unique !"
++msgstr ""
+
+ #. module: base
+ #: view:ir.sequence:0
+ msgid "Hour 00->12: %(h12)s"
-msgstr "Uur 00->12: %(h12)s"
++msgstr ""
+
+ #. module: base
+ #: help:res.partner.address,active:0
+ msgid "Uncheck the active field to hide the contact."
-msgstr "Deselecteer het actieve veld om de contactpersoon te verbergen."
++msgstr ""
++
++#. module: base
++#: model:ir.model,name:base.model_res_widget_wizard
++msgid "Add a widget for User"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.dk
+ msgid "Denmark"
-msgstr "Denemarken"
++msgstr ""
+
+ #. module: base
+ #: field:res.country,code:0
+ msgid "Country Code"
-msgstr "Landcode"
++msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_workflow_instance
+ msgid "workflow.instance"
+ msgstr ""
+
+ #. module: base
++#: code:addons/orm.py:278
++#, python-format
++msgid "Unknown attribute %s in %s "
++msgstr ""
++
++#. module: base
+ #: view:res.lang:0
+ msgid "10. %S ==> 20"
-msgstr "10. %S ==> 20"
++msgstr ""
+
+ #. module: base
-#: code:addons/osv/fields.py:0
++#: code:addons/fields.py:106
+ #, python-format
+ msgid "undefined get method !"
+ msgstr ""
+
+ #. module: base
-#: model:res.partner.title,name:base.res_partner_title_madam
-msgid "Madam"
-msgstr "Mevrouw"
++#: selection:base.language.install,lang:0
++msgid "Norwegian Bokmål / Norsk bokmål"
++msgstr ""
++
++#. module: base
++#: help:res.config.users,new_password:0
++#: help:res.users,new_password:0
++msgid ""
++"Only specify a value if you want to change the user password. This user will "
++"have to logout and login again!"
++msgstr ""
++
++#. module: base
++#: model:res.partner.title,name:base.res_partner_title_madam
++msgid "Madam"
++msgstr ""
++
++#. module: base
++#: model:res.country,name:base.ee
++msgid "Estonia"
++msgstr ""
++
++#. module: base
++#: model:ir.ui.menu,name:base.dashboard
++msgid "Dashboards"
++msgstr ""
++
++#. module: base
++#: help:ir.attachment,type:0
++msgid "Binary File or external URL"
++msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.ee
-msgid "Estonia"
-msgstr "Estland"
++#: field:res.config.users,new_password:0
++#: field:res.users,new_password:0
++msgid "Change password"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.nl
+ msgid "Netherlands"
-msgstr "Nederland"
++msgstr ""
+
+ #. module: base
+ #: model:ir.ui.menu,name:base.next_id_4
+ msgid "Low Level Objects"
+ msgstr ""
+
+ #. module: base
-#: model:ir.model,name:base.model_ir_report_custom
-msgid "ir.report.custom"
-msgstr "ir.report.custom"
-
-#. module: base
-#: selection:res.partner.event,type:0
-msgid "Purchase Offer"
-msgstr "Inkoopofferte"
++#: view:res.company:0
++msgid "Your Logo - Use a size of about 450x150 pixels."
++msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_ir_values
+ msgid "ir.values"
-msgstr "ir.values"
++msgstr ""
++
++#. module: base
++#: selection:base.language.install,lang:0
++msgid "Occitan (FR, post 1500) / Occitan"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_ZOOM_FIT"
-msgstr "STOCK_ZOOM_FIT"
++#: model:ir.actions.act_window,help:base.open_module_tree
++msgid ""
++"You can install new modules in order to activate new features, menu, reports "
++"or data in your OpenERP instance. To install some modules, click on the "
++"button \"Schedule for Installation\" from the form view, then click on "
++"\"Apply Scheduled Upgrades\" to migrate your system."
++msgstr ""
++
++#. module: base
++#: model:ir.ui.menu,name:base.menu_emails
++#: model:ir.ui.menu,name:base.menu_mail_gateway
++msgid "Emails"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.cd
+ msgid "Congo, The Democratic Republic of the"
-msgstr "Congo, Democratische Republiek"
++msgstr ""
++
++#. module: base
++#: selection:base.language.install,lang:0
++msgid "Malayalam / മലയാളം"
++msgstr ""
+
+ #. module: base
+ #: view:res.request:0
+ #: field:res.request,body:0
+ #: field:res.request.history,req_id:0
+ msgid "Request"
-msgstr "Verzoek"
-
-#. module: base
-#: selection:ir.cron,interval_type:0
-msgid "Days"
-msgstr "Dagen"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.jp
+ msgid "Japan"
-msgstr "Japan"
++msgstr ""
+
+ #. module: base
+ #: field:ir.cron,numbercall:0
+ msgid "Number of Calls"
+ msgstr ""
+
+ #. module: base
-#: wizard_view:module.lang.install,start:0
-msgid "Language file loaded."
-msgstr "Taalbestand geladen."
-
-#. module: base
-#: wizard_view:module.upgrade,next:0
-#: wizard_field:module.upgrade,next,module_info:0
++#: view:base.module.upgrade:0
++#: field:base.module.upgrade,module_info:0
+ msgid "Modules to update"
-msgstr "Bij te werken Modules"
-
-#. module: base
-#: model:ir.actions.act_window,name:base.action2
-msgid "Company Architecture"
-msgstr "Bedrijfsstructuur"
-
-#. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_GOTO_BOTTOM"
-msgstr "STOCK_GOTO_BOTTOM"
++msgstr ""
+
+ #. module: base
+ #: help:ir.actions.server,sequence:0
+ msgid ""
+ "Important when you deal with multiple actions, the execution order will be "
+ "decided based on this, low number is higher priority."
+ msgstr ""
+
+ #. module: base
+ #: field:ir.actions.report.xml,header:0
+ msgid "Add RML header"
-msgstr "RML Koptekst Toevoegen"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.gr
+ msgid "Greece"
-msgstr "Griekenland"
++msgstr ""
++
++#. module: base
++#: field:res.request,trigger_date:0
++msgid "Trigger Date"
++msgstr ""
+
+ #. module: base
-#: selection:module.lang.install,init,lang:0
++#: selection:base.language.install,lang:0
+ msgid "Croatian / hrvatski jezik"
-msgstr "Croatian / hrvatski jezik"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_GO_FORWARD"
-msgstr "STOCK_GO_FORWARD"
++#: field:base.language.install,overwrite:0
++msgid "Overwrite Existing Terms"
++msgstr ""
+
+ #. module: base
+ #: help:ir.actions.server,code:0
+ msgid "Python code to be executed"
+ msgstr ""
+
+ #. module: base
++#: sql_constraint:res.country:0
++msgid "The code of the country must be unique !"
++msgstr ""
++
++#. module: base
+ #: selection:ir.module.module.dependency,state:0
+ msgid "Uninstallable"
-msgstr "Niet installeerbaar"
++msgstr ""
+
+ #. module: base
+ #: view:res.partner.category:0
+ msgid "Partner Category"
-msgstr "Relatiecategorie"
++msgstr ""
+
+ #. module: base
+ #: view:ir.actions.server:0
+ #: selection:ir.actions.server,state:0
+ msgid "Trigger"
+ msgstr ""
+
+ #. module: base
-#: field:ir.model.fields,translate:0
-msgid "Translate"
-msgstr "Vertalen"
++#: model:ir.model,name:base.model_base_module_update
++msgid "Update Module"
++msgstr ""
+
+ #. module: base
-#: view:ir.actions.server:0
-msgid ""
-"Access all the fields related to the current object using expression in "
-"double brackets, i.e. [[ object.partner_id.name ]]"
++#: view:ir.model.fields:0
++#: field:ir.model.fields,translate:0
++msgid "Translate"
+ msgstr ""
+
+ #. module: base
+ #: field:res.request.history,body:0
+ msgid "Body"
-msgstr "Inhoud"
++msgstr ""
+
+ #. module: base
-#: wizard_button:res.partner.spam_send,init,send:0
++#: view:partner.wizard.spam:0
+ msgid "Send Email"
-msgstr "E-mail verzenden"
-
-#. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_SELECT_FONT"
-msgstr "STOCK_SELECT_FONT"
++msgstr ""
+
+ #. module: base
++#: field:res.config.users,menu_id:0
+ #: field:res.users,menu_id:0
+ msgid "Menu Action"
+ msgstr ""
+
+ #. module: base
-#: code:addons/osv/orm.py:0
-#, python-format
++#: help:ir.model.fields,selection:0
+ msgid ""
-"Unable to delete this document because it is used as a default property"
++"List of options for a selection field, specified as a Python expression "
++"defining a list of (key, label) pairs. For example: "
++"[('blue','Blue'),('yellow','Yellow')]"
+ msgstr ""
+
+ #. module: base
-#: selection:wizard.module.lang.export,state:0
++#: selection:base.language.export,state:0
+ msgid "choose"
-msgstr "kiezen"
++msgstr ""
+
+ #. module: base
-#: selection:ir.actions.act_window.view,view_mode:0
-#: selection:ir.ui.view,type:0
-#: selection:wizard.ir.model.menu.create.line,view_type:0
-msgid "Graph"
-msgstr "Grafiek"
++#: help:ir.model,osv_memory:0
++msgid ""
++"Indicates whether this object model lives in memory only, i.e. is not "
++"persisted (osv.osv_memory)"
++msgstr ""
+
+ #. module: base
+ #: field:res.partner,child_ids:0
+ #: field:res.request,ref_partner_id:0
+ msgid "Partner Ref."
-msgstr "Ref. Relatie"
++msgstr ""
+
+ #. module: base
-#: selection:ir.actions.report.xml,report_type:0
-msgid "Html from html"
++#: model:ir.actions.act_window,name:base.action_partner_supplier_form
++#: model:ir.ui.menu,name:base.menu_procurement_management_supplier_name
++#: view:res.partner:0
++msgid "Suppliers"
+ msgstr ""
+
+ #. module: base
-#: model:ir.ui.menu,name:base.menu_low_workflow
-msgid "Workflow Items"
++#: view:publisher_warranty.contract.wizard:0
++msgid "Register"
+ msgstr ""
+
+ #. module: base
+ #: field:res.request,ref_doc2:0
+ msgid "Document Ref 2"
-msgstr "Document Ref 2"
++msgstr ""
+
+ #. module: base
+ #: field:res.request,ref_doc1:0
+ msgid "Document Ref 1"
-msgstr "Document Ref 1"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.ga
+ msgid "Gabon"
-msgstr "Gabon"
++msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_ir_model_data
+ msgid "ir.model.data"
-msgstr "ir.model.data"
++msgstr ""
+
+ #. module: base
+ #: view:ir.model:0
++#: view:ir.rule:0
+ #: view:res.groups:0
+ msgid "Access Rights"
-msgstr "Toegangsrechten"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.gl
+ msgid "Greenland"
-msgstr "Groenland"
-
-#. module: base
-#: help:ir.actions.report.xml,report_rml:0
-msgid ""
-"The .rml path of the file or NULL if the content is in report_rml_content"
+ msgstr ""
-"Het .rml pad van het bestand of NULL als de inhoud zich bevind in "
-"report_rml_content"
+
+ #. module: base
+ #: field:res.partner.bank,acc_number:0
+ msgid "Account Number"
-msgstr "Rekeningnummer"
++msgstr ""
+
+ #. module: base
+ #: view:res.lang:0
+ msgid "1. %c ==> Fri Dec 5 18:25:20 2008"
-msgstr "1. %c ==> Vrij Dec 5 18:25:20 2008"
-
-#. module: base
-#: help:ir.ui.menu,groups_id:0
-msgid ""
-"If you have groups, the visibility of this menu will be based on these "
-"groups. If this field is empty, Open ERP will compute visibility based on "
-"the related object's read access."
+ msgstr ""
-"Als u groepen gebruikt wordt de weergave van dit menu gebaseerd op deze "
-"groepen. Is het veld leeg, dan zal OpenERP de weergave bepalen op basis van "
-"de leesrechten op het gerelateerde object."
+
+ #. module: base
+ #: model:res.country,name:base.nc
+ msgid "New Caledonia (French)"
-msgstr "Nieuw Caledonië (Frans)"
++msgstr ""
+
+ #. module: base
-#: field:res.partner.function,name:0
-msgid "Function Name"
-msgstr "Functienaam"
++#: model:res.country,name:base.cy
++msgid "Cyprus"
++msgstr ""
+
+ #. module: base
-#: view:maintenance.contract.wizard:0
-msgid "_Cancel"
++#: view:base.module.import:0
++msgid ""
++"This wizard helps you add a new language to you OpenERP system. After "
++"loading a new language it becomes available as default interface language "
++"for users and partners."
+ msgstr ""
+
+ #. module: base
-#: field:res.partner.category,name:0
-msgid "Category Name"
++#: field:ir.actions.server,subject:0
++#: field:partner.wizard.spam,subject:0
++#: field:res.request,name:0
++msgid "Subject"
+ msgstr ""
+
+ #. module: base
+ #: field:res.request,act_from:0
+ #: field:res.request.history,act_from:0
+ msgid "From"
-msgstr "Van"
++msgstr ""
++
++#. module: base
++#: view:res.users:0
++msgid "Preferences"
++msgstr ""
++
++#. module: base
++#: model:res.partner.category,name:base.res_partner_category_consumers0
++msgid "Consumers"
++msgstr ""
+
+ #. module: base
++#: view:res.config:0
+ #: wizard_button:server.action.create,init,step_1:0
+ msgid "Next"
-msgstr "Volgende"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "terp-report"
-msgstr "terp-report"
++#: help:ir.cron,function:0
++msgid ""
++"Name of the method to be called on the object when this scheduler is "
++"executed."
++msgstr ""
+
+ #. 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 "RML inhoud"
++#: code:addons/base/ir/ir_model.py:219
++#, python-format
++msgid ""
++"The Selection Options expression is must be in the [('key','Label'), ...] "
++"format!"
++msgstr ""
+
+ #. module: base
-#: view:workflow.activity:0
-msgid "Incoming transitions"
++#: view:ir.actions.report.xml:0
++msgid "Miscellaneous"
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.cn
+ msgid "China"
-msgstr "China"
++msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/ir/ir_model.py:0
++#: code:addons/base/res/res_user.py:516
+ #, python-format
-msgid "Password empty !"
-msgstr "Wachtwoord is leeg !"
-
-#. module: base
-#: view:res.config.view:0
-msgid "Set"
-msgstr "Toepassen"
++msgid ""
++"--\n"
++"%(name)s %(email)s\n"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.eh
+ msgid "Western Sahara"
-msgstr "West Sahara"
++msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_workflow
+ msgid "workflow"
+ msgstr ""
+
+ #. module: base
++#: model:ir.actions.act_window,help:base.action_res_company_form
++msgid ""
++"Create and manage the companies that will be managed by OpenERP from here. "
++"Shops or subsidiaries can be created and maintained from here."
++msgstr ""
++
++#. module: base
+ #: model:res.country,name:base.id
+ msgid "Indonesia"
-msgstr "Indonesië"
++msgstr ""
+
+ #. module: base
-#: selection:ir.actions.todo,start_on:0
-msgid "At Once"
-msgstr "Onmiddellijk"
++#: view:base.update.translations:0
++msgid ""
++"This wizard will detect new terms to translate in the application, so that "
++"you can then add translations manually or perform a complete export (as a "
++"template for a new language example)."
++msgstr ""
+
+ #. module: base
-#: help:ir.actions.server,condition:0
++#: help:multi_company.default,expression:0
+ msgid ""
-"Condition that is to be tested before action is executed, e.g. "
-"object.list_price > object.cost_price"
++"Expression, must be True to match\n"
++"use context.get or user (browse)"
+ msgstr ""
-"Conditie die moet worden getest voor dat de actie wordt uitgevoerd, bijv. "
-"object.list_price > object.cost_price"
+
+ #. module: base
+ #: model:res.country,name:base.bg
+ msgid "Bulgaria"
-msgstr "Bulgarije"
++msgstr ""
++
++#. module: base
++#: view:publisher_warranty.contract.wizard:0
++msgid "Publisher warranty contract successfully registered!"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.ao
+ msgid "Angola"
-msgstr "Angola"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.tf
+ msgid "French Southern Territories"
-msgstr "Franse Zuidelijke en Antarctische Gebieden"
-
-#. module: base
-#: view:ir.actions.server:0
-msgid ""
-"Only one client action will be execute, last "
-"clinent action will be consider in case of multiples clients actions"
+ msgstr ""
-"Slechts één client actie wordt uitgevoerd. De laatste client actie wordt "
-"overwogen wanneer er meerdere client acties zijn."
-
-#. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_HELP"
-msgstr "STOCK_HELP"
+
+ #. module: base
+ #: model:ir.model,name:base.model_res_currency
+ #: field:res.company,currency_id:0
++#: field:res.company,currency_ids:0
+ #: view:res.currency:0
+ #: field:res.currency,name:0
+ #: field:res.currency.rate,currency_id:0
+ msgid "Currency"
-msgstr "Valuta"
++msgstr ""
+
+ #. module: base
+ #: field:res.partner.canal,name:0
+ msgid "Channel Name"
-msgstr "Kanaalnaam"
++msgstr ""
+
+ #. module: base
+ #: view:res.lang:0
+ msgid "5. %y, %Y ==> 08, 2008"
-msgstr "5. %y, %Y ==> 08, 2008"
++msgstr ""
+
+ #. module: base
-#: wizard_view:module.lang.import,init:0
-msgid "module,type,name,res_id,src,value"
-msgstr "module,type,name,res_id,src,value"
++#: model:res.partner.title,shortcut:base.res_partner_title_ltd
++msgid "ltd"
++msgstr ""
+
+ #. module: base
-#: field:ir.model.fields,model_id:0
+ #: field:ir.values,res_id:0
++#: field:res.log,res_id:0
+ msgid "Object ID"
-msgstr "Object ID"
++msgstr ""
+
+ #. module: base
-#: selection:ir.report.custom,print_orientation:0
++#: view:res.company:0
+ msgid "Landscape"
-msgstr "Liggend"
-
-#. module: base
-#: field:workflow.activity,split_mode:0
-msgid "Split Mode"
+ msgstr ""
+
+ #. module: base
+ #: model:ir.ui.menu,name:base.menu_administration
+ msgid "Administration"
-msgstr "Beheer"
++msgstr ""
+
+ #. module: base
-#: selection:ir.rule,operator:0
-msgid "child_of"
-msgstr "child_of"
++#: view:base.module.update:0
++msgid "Click on Update below to start the process..."
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.ir
+ msgid "Iran"
-msgstr "Iran"
++msgstr ""
+
+ #. module: base
-#: field:ir.report.custom.fields,operation:0
++#: model:ir.actions.act_window,name:base.res_widget_user_act_window
++#: model:ir.ui.menu,name:base.menu_res_widget_user_act_window
++msgid "Widgets per User"
++msgstr ""
++
++#. module: base
++#: selection:base.language.install,lang:0
++msgid "Slovak / Slovenský jazyk"
++msgstr ""
++
++#. module: base
++#: field:base.language.export,state:0
+ #: field:ir.ui.menu,icon_pict:0
-#: field:wizard.module.lang.export,state:0
++#: field:publisher_warranty.contract.wizard,state:0
+ msgid "unknown"
-msgstr "onbekend"
++msgstr ""
++
++#. module: base
++#: field:res.currency,symbol:0
++msgid "Symbol"
++msgstr ""
++
++#. module: base
++#: help:res.config.users,login:0
++#: help:res.users,login:0
++msgid "Used to log into the system"
++msgstr ""
++
++#. module: base
++#: view:base.update.translations:0
++msgid "Synchronize Translation"
++msgstr ""
+
+ #. module: base
+ #: field:ir.ui.view_sc,res_id:0
+ msgid "Resource Ref."
-msgstr "Bron ref."
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.ki
+ msgid "Kiribati"
-msgstr "Kiribati"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.iq
+ msgid "Iraq"
-msgstr "Irak"
++msgstr ""
+
+ #. module: base
-#: view:ir.actions.server:0
-msgid "Action to Launch"
-msgstr "Uit te voeren actie"
++#: model:ir.ui.menu,name:base.menu_association
++msgid "Association"
++msgstr ""
++
++#. module: base
++#: model:res.country,name:base.cl
++msgid "Chile"
++msgstr ""
+
+ #. module: base
-#: wizard_view:base.module.import,import:0
-#: wizard_view:base.module.import,init:0
-msgid "Module import"
++#: model:ir.ui.menu,name:base.menu_address_book
++#: model:ir.ui.menu,name:base.menu_config_address_book
++#: model:ir.ui.menu,name:base.menu_procurement_management_supplier
++msgid "Address Book"
+ msgstr ""
+
+ #. module: base
-#: model:ir.actions.act_window,name:base.action_partner_supplier_form
-#: model:ir.ui.menu,name:base.menu_partner_supplier_form
-msgid "Suppliers Partners"
-msgstr "Leveranciers"
++#: model:ir.model,name:base.model_ir_sequence_type
++msgid "ir.sequence.type"
++msgstr ""
+
+ #. module: base
-#: selection:wizard.module.lang.export,format:0
++#: selection:base.language.export,format:0
+ msgid "CSV File"
-msgstr "CSV-bestand"
++msgstr ""
+
+ #. module: base
-#: selection:ir.model,state:0
-#: selection:ir.model.grid,state:0
-msgid "Base Object"
++#: field:res.company,account_no:0
++msgid "Account No."
+ msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_STRIKETHROUGH"
-msgstr "STOCK_STRIKETHROUGH"
++#: code:addons/base/res/res_lang.py:157
++#, python-format
++msgid "Base Language 'en_US' can not be deleted !"
++msgstr ""
+
+ #. module: base
-#: selection:ir.report.custom.fields,fc0_op:0
-#: selection:ir.report.custom.fields,fc1_op:0
-#: selection:ir.report.custom.fields,fc2_op:0
-#: selection:ir.report.custom.fields,fc3_op:0
-msgid "(year)="
++#: selection:ir.model,state:0
++msgid "Base Object"
+ msgstr ""
+
+ #. module: base
-#: rml:ir.module.reference:0
++#: report:ir.module.reference.graph:0
+ msgid "Dependencies :"
-msgstr "Afhankelijkheden :"
-
-#. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "terp-partner"
-msgstr "terp-partner"
++msgstr ""
+
+ #. module: base
+ #: field:ir.model.fields,field_description:0
+ msgid "Field Label"
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.dj
+ msgid "Djibouti"
-msgstr "Djibouti"
++msgstr ""
+
+ #. module: base
+ #: field:ir.translation,value:0
+ msgid "Translation Value"
-msgstr "Vertaling"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.ag
+ msgid "Antigua and Barbuda"
-msgstr "Antigua en Barbuda"
++msgstr ""
+
+ #. module: base
-#: field:ir.actions.server,condition:0
-#: field:ir.report.custom.fields,fc0_condition:0
-#: field:workflow.transition,condition:0
-msgid "Condition"
-msgstr "Voorwaarde"
++#: code:addons/orm.py:3166
++#, python-format
++msgid ""
++"Operation prohibited by access rules, or performed on an already deleted "
++"document (Operation: %s, Document type: %s)."
++msgstr ""
+
+ #. module: base
-#: model:ir.ui.menu,name:base.menu_management
-msgid "Modules Management"
-msgstr "Modulebeheer"
++#: model:res.country,name:base.zr
++msgid "Zaire"
++msgstr ""
+
+ #. module: base
+ #: field:ir.model.data,res_id:0
+ #: field:ir.translation,res_id:0
+ #: field:workflow.instance,res_id:0
+ #: field:workflow.triggers,res_id:0
+ msgid "Resource ID"
+ msgstr ""
+
+ #. module: base
+ #: view:ir.cron:0
+ #: field:ir.model,info:0
-#: field:ir.model.grid,info:0
-#: view:maintenance.contract:0
+ msgid "Information"
-msgstr "Informatie"
-
-#. module: base
-#: view:wizard.module.lang.export:0
-msgid ""
-"The official translations pack of all OpenERP/OpenObjects module are managed "
-"through launchpad. We use their online interface to synchronize all "
-"translations efforts."
+ msgstr ""
-"De officiele vertalingen van alle OpenERP/OpenObjects modules worden beheerd "
-"via launchpad. We gebruiken hun online interface om vertalingen te "
-"synchroniseren."
+
+ #. module: base
-#: field:ir.actions.report.xml,report_rml:0
-msgid "RML path"
-msgstr "RML pad"
++#: view:res.widget.user:0
++msgid "User Widgets"
++msgstr ""
+
+ #. module: base
-#: field:ir.actions.configuration.wizard,item_id:0
-msgid "Next Configuration Wizard"
-msgstr "Volgende Configuratie Assistent"
++#: view:base.module.update:0
++msgid "Update Module List"
++msgstr ""
+
+ #. module: base
-#: selection:ir.actions.todo,type:0
+ #: selection:res.partner.address,type:0
+ msgid "Other"
-msgstr "Overige"
++msgstr ""
+
+ #. module: base
-#: selection:ir.server.object.lines,type:0
-msgid "Formula"
-msgstr "Formule"
++#: view:res.request:0
++msgid "Reply"
++msgstr ""
+
+ #. module: base
-#: selection:module.lang.install,init,lang:0
++#: selection:base.language.install,lang:0
+ msgid "Turkish / Türkçe"
-msgstr "Turks / Türkçe"
-
-#. module: base
-#: model:ir.actions.act_window,name:base.action_translation_untrans
-#: model:ir.ui.menu,name:base.menu_action_translation_untrans
-msgid "Untranslated terms"
-msgstr "Niet-vertaalde termen"
-
-#. module: base
-#: wizard_view:module.lang.import,init:0
-msgid "Import New Language"
-msgstr "Importeer Nieuwe Taal"
++msgstr ""
+
+ #. module: base
+ #: model:ir.actions.act_window,name:base.action_workflow_activity_form
+ #: model:ir.ui.menu,name:base.menu_workflow_activity
+ #: view:workflow:0
+ #: field:workflow,activities:0
+ msgid "Activities"
-msgstr "Activiteiten"
++msgstr ""
+
+ #. module: base
+ #: field:ir.actions.act_window,auto_refresh:0
+ msgid "Auto-Refresh"
+ msgstr ""
+
+ #. module: base
-#: selection:ir.report.custom.fields,fc0_op:0
-#: selection:ir.report.custom.fields,fc1_op:0
-#: selection:ir.report.custom.fields,fc2_op:0
-#: selection:ir.report.custom.fields,fc3_op:0
-#: selection:ir.rule,operator:0
-msgid "="
-msgstr "="
++#: code:addons/base/ir/ir_model.py:62
++#, python-format
++msgid "The osv_memory field can only be compared with = and != operator."
++msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/ir/ir_report_custom.py:0
-#, python-format
-msgid "Second field should be figures"
++#: selection:ir.ui.view,type:0
++msgid "Diagram"
+ msgstr ""
+
+ #. module: base
-#: field:res.request,trigger_date:0
-msgid "Trigger Date"
++#: help:multi_company.default,name:0
++msgid "Name it to easily find a record"
++msgstr ""
++
++#. module: base
++#: model:ir.actions.act_window,name:base.grant_menu_access
++#: model:ir.ui.menu,name:base.menu_grant_menu_access
++msgid "Menu Items"
+ msgstr ""
+
+ #. module: base
-#: model:ir.actions.act_window,name:base.action_model_grid_security
-#: model:ir.ui.menu,name:base.menu_ir_access_grid
-msgid "Access Controls Grid"
-msgstr "Toegangscontrole rooster"
++#: constraint:ir.rule:0
++msgid "Rules are not supported for osv_memory objects !"
++msgstr ""
++
++#. module: base
++#: model:ir.ui.menu,name:base.menu_event_association
++#: model:ir.ui.menu,name:base.menu_event_main
++msgid "Events Organisation"
++msgstr ""
+
+ #. module: base
+ #: model:ir.actions.act_window,name:base.ir_sequence_actions
+ #: model:ir.ui.menu,name:base.menu_custom_action
+ #: model:ir.ui.menu,name:base.menu_ir_sequence_actions
+ #: model:ir.ui.menu,name:base.next_id_6
++#: view:workflow.activity:0
+ msgid "Actions"
-msgstr "Acties"
++msgstr ""
+
+ #. module: base
+ #: selection:res.request,priority:0
+ msgid "High"
-msgstr "Hoog"
++msgstr ""
+
+ #. module: base
+ #: field:ir.exports.line,export_id:0
+ msgid "Export"
-msgstr "Exporteren"
++msgstr ""
++
++#. module: base
++#: model:res.country,name:base.hr
++msgid "Croatia"
++msgstr ""
+
+ #. module: base
+ #: help:res.bank,bic:0
+ msgid "Bank Identifier Code"
-msgstr "Bank Identifier Code"
++msgstr ""
++
++#. module: base
++#: model:res.country,name:base.tm
++msgid "Turkmenistan"
++msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/ir/ir_actions.py:0
-#: code:addons/addons/base/ir/ir_model.py:0
-#: code:addons/addons/base/maintenance/maintenance.py:0
-#: code:addons/addons/base/module/module.py:0
-#: code:addons/addons/base/res/res_currency.py:0
-#: code:addons/addons/base/res/res_user.py:0
-#: code:addons/osv/orm.py:0
-#: code:addons/report/custom.py:0
++#: code:addons/base/ir/ir_actions.py:597
++#: code:addons/base/ir/ir_actions.py:629
++#: code:addons/base/ir/ir_actions.py:713
++#: code:addons/base/ir/ir_actions.py:716
++#: code:addons/base/ir/ir_model.py:114
++#: code:addons/base/ir/ir_model.py:204
++#: code:addons/base/ir/ir_model.py:218
++#: code:addons/base/ir/ir_model.py:232
++#: code:addons/base/ir/ir_model.py:250
++#: code:addons/base/ir/ir_model.py:255
++#: code:addons/base/ir/ir_model.py:258
++#: code:addons/base/module/module.py:215
++#: code:addons/base/module/module.py:258
++#: code:addons/base/module/module.py:262
++#: code:addons/base/module/module.py:268
++#: code:addons/base/module/module.py:303
++#: code:addons/base/module/module.py:321
++#: code:addons/base/module/module.py:336
++#: code:addons/base/module/module.py:429
++#: code:addons/base/module/module.py:531
++#: code:addons/base/publisher_warranty/publisher_warranty.py:163
++#: code:addons/base/publisher_warranty/publisher_warranty.py:281
++#: code:addons/base/res/res_currency.py:100
++#: code:addons/base/res/res_user.py:57
++#: code:addons/base/res/res_user.py:66
++#: code:addons/custom.py:558
++#: code:addons/orm.py:3199
+ #, python-format
+ msgid "Error"
-msgstr "Fout"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.pm
+ msgid "Saint Pierre and Miquelon"
-msgstr "Saint-Pierre en Miquelon"
-
-#. module: base
-#: code:addons/addons/base/ir/ir_model.py:0
-#, python-format
-msgid "You can not remove the field '%s' !"
-msgstr "Het veld '%s' kan niet worden verwijderd!"
-
-#. module: base
-#: field:res.partner.event,document:0
-msgid "Document"
-msgstr "Document"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_REFRESH"
-msgstr "STOCK_REFRESH"
++#: help:ir.actions.report.xml,header:0
++msgid "Add or not the coporate RML header"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_STOP"
-msgstr "STOCK_STOP"
++#: help:workflow.transition,act_to:0
++msgid "The destination activity."
++msgstr ""
+
+ #. module: base
-#: view:wizard.module.update_translations:0
++#: view:base.module.update:0
++#: view:base.update.translations:0
+ msgid "Update"
-msgstr "Bijwerken"
++msgstr ""
+
+ #. module: base
+ #: model:ir.actions.report.xml,name:base.ir_module_reference_print
+ msgid "Technical guide"
-msgstr "Technische gids"
-
-#. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_CONVERT"
-msgstr "STOCK_CONVERT"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.tz
+ msgid "Tanzania"
-msgstr "Tanzania"
++msgstr ""
++
++#. module: base
++#: selection:base.language.install,lang:0
++msgid "Danish / Dansk"
++msgstr ""
++
++#. module: base
++#: selection:ir.model.fields,select_level:0
++msgid "Advanced Search (deprecated)"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.cx
+ msgid "Christmas Island"
-msgstr "Christmaseiland"
++msgstr ""
+
+ #. module: base
+ #: view:ir.actions.server:0
+ msgid "Other Actions Configuration"
-msgstr "Configuratie andere Handelingen"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_EXECUTE"
-msgstr "STOCK_EXECUTE"
++#: view:res.config.installer:0
++msgid "Install Modules"
++msgstr ""
+
+ #. module: base
+ #: model:ir.actions.act_window,name:base.res_partner_canal-act
+ #: model:ir.model,name:base.model_res_partner_canal
+ #: model:ir.ui.menu,name:base.menu_res_partner_canal-act
++#: view:res.partner.canal:0
+ msgid "Channels"
-msgstr "Kanalen"
++msgstr ""
++
++#. module: base
++#: view:ir.ui.view:0
++msgid "Extra Info"
++msgstr ""
++
++#. module: base
++#: model:ir.actions.act_window,name:base.act_values_form_action
++#: model:ir.ui.menu,name:base.menu_values_form_action
++msgid "Client Events"
++msgstr ""
+
+ #. module: base
+ #: view:ir.module.module:0
+ msgid "Schedule for Installation"
-msgstr "Inplannen voor installatie"
++msgstr ""
+
+ #. module: base
-#: selection:ir.model.fields,select_level:0
-msgid "Advanced Search"
-msgstr "Uitgebreid Zoeken"
++#: model:ir.model,name:base.model_partner_wizard_ean_check
++msgid "Ean Check"
++msgstr ""
++
++#. module: base
++#: sql_constraint:res.config.users:0
++#: sql_constraint:res.users:0
++msgid "You can not have two users with the same login !"
++msgstr ""
++
++#. module: base
++#: model:ir.model,name:base.model_multi_company_default
++msgid "Default multi company"
++msgstr ""
++
++#. module: base
++#: view:res.request:0
++msgid "Send"
++msgstr ""
++
++#. module: base
++#: field:res.config.users,menu_tips:0
++#: field:res.users,menu_tips:0
++msgid "Menu Tips"
++msgstr ""
+
+ #. module: base
+ #: field:ir.translation,src:0
+ msgid "Source"
-msgstr "Bron"
++msgstr ""
+
+ #. module: base
+ #: help:res.partner.address,partner_id:0
+ msgid "Keep empty for a private address, not related to partner."
-msgstr "Laat leeg voor een privé adres, niet gerelateerd aan de relatie."
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.vu
+ msgid "Vanuatu"
-msgstr "Vanuatu"
++msgstr ""
+
+ #. module: base
+ #: view:res.company:0
+ msgid "Internal Header/Footer"
-msgstr "Interne Koptekst/Voettekst"
++msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/module/wizard/wizard_export_lang.py:0
++#: code:addons/base/module/wizard/base_export_language.py:59
+ #, python-format
+ msgid ""
+ "Save this document to a .tgz file. This archive containt UTF-8 %s files and "
+ "may be uploaded to launchpad."
+ msgstr ""
-"Sla dit document op in een .tgz bestand. Dit archief bevat UTF-8 %s "
-"bestanden en kan ge-upload worden naar launchpad."
+
+ #. module: base
-#: wizard_button:module.upgrade,end,config:0
-#: wizard_button:module.upgrade,start,config:0
++#: view:base.module.upgrade:0
+ msgid "Start configuration"
-msgstr "Start configuratie"
++msgstr ""
++
++#. module: base
++#: view:base.language.export:0
++msgid "_Export"
++msgstr ""
+
+ #. module: base
-#: selection:module.lang.install,init,lang:0
++#: field:base.language.install,state:0
++#: field:base.module.import,state:0
++#: field:base.module.update,state:0
++msgid "state"
++msgstr ""
++
++#. module: base
++#: selection:base.language.install,lang:0
+ msgid "Catalan / Català"
-msgstr "Catalaans / Català"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_COLOR_PICKER"
-msgstr "STOCK_COLOR_PICKER"
++#: model:res.country,name:base.do
++msgid "Dominican Republic"
++msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.sa
-msgid "Saudi Arabia"
-msgstr "Saoedie Arabië"
++#: selection:base.language.install,lang:0
++msgid "Serbian (Cyrillic) / српски"
++msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/ir/ir_report_custom.py:0
++#: code:addons/orm.py:2161
+ #, python-format
-msgid "Bar charts need at least two fields"
-msgstr "Staafdiagram heeft minimaal twee velden nodig"
++msgid ""
++"Invalid group_by specification: \"%s\".\n"
++"A group_by specification must be a list of valid fields."
++msgstr ""
++
++#. module: base
++#: model:res.country,name:base.sa
++msgid "Saudi Arabia"
++msgstr ""
+
+ #. module: base
+ #: help:res.partner,supplier:0
+ msgid ""
+ "Check this box if the partner is a supplier. If it's not checked, purchase "
+ "people will not see it when encoding a purchase order."
+ msgstr ""
-"Vink dit vakje aan als de relatie een leverancier is. Als het niet is "
-"aangevinkt zien inkopers de relatie niet bij het invoeren van een "
-"inkooporder."
+
+ #. module: base
+ #: field:ir.model.fields,relation_field:0
+ msgid "Relation Field"
-msgstr "Relatieveld"
++msgstr ""
++
++#. module: base
++#: view:res.partner.event:0
++msgid "Event Logs"
++msgstr ""
++
++#. module: base
++#: code:addons/base/module/wizard/base_module_configuration.py:37
++#, python-format
++msgid "System Configuration done"
++msgstr ""
+
+ #. module: base
+ #: field:workflow.triggers,instance_id:0
+ msgid "Destination Instance"
+ msgstr ""
+
+ #. module: base
++#: field:ir.actions.act_window,multi:0
+ #: field:ir.actions.wizard,multi:0
+ msgid "Action on Multiple Doc."
+ msgstr ""
+
+ #. module: base
-#: view:wizard.module.lang.export:0
++#: view:base.language.export:0
+ msgid "https://translations.launchpad.net/openobject"
-msgstr "https://translations.launchpad.net/openobject"
-
-#. module: base
-#: model:ir.actions.act_window,name:base.action_partner_title
-#: model:ir.ui.menu,name:base.menu_partner_title
-msgid "Titles"
-msgstr "Titels"
-
-#. module: base
-#: field:ir.actions.todo,start_date:0
-msgid "Start Date"
-msgstr "Begindatum"
++msgstr ""
+
+ #. module: base
+ #: field:ir.actions.report.xml,report_xml:0
+ msgid "XML path"
-msgstr "XML pad"
++msgstr ""
++
++#. module: base
++#: selection:ir.actions.todo,restart:0
++msgid "On Skip"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.gn
+ msgid "Guinea"
-msgstr "Guinea"
++msgstr ""
+
+ #. module: base
-#: model:ir.actions.todo,note:base.config_wizard_step_user
++#: model:res.country,name:base.lu
++msgid "Luxembourg"
++msgstr ""
++
++#. module: base
++#: help:ir.values,key2:0
+ msgid ""
-"Create your users.\n"
-"You will be able to assign groups to users. Groups define the access rights "
-"of each users on the different objects of the system.\n"
-" "
++"The kind of action or button in the client side that will trigger the action."
+ msgstr ""
-"Maak uw gebruikers aan.\n"
-"U zal groepen aan gebruikers kunnen koppelen. Groepen bepalen de "
-"toegangsrechten van elke gebruiker op verschillende objecten van het "
-"systeem.\n"
-" "
+
+ #. module: base
-#: selection:res.request,priority:0
-msgid "Low"
-msgstr "Laag"
++#: code:addons/base/ir/ir_ui_menu.py:285
++#, python-format
++msgid "Error ! You can not create recursive Menu."
++msgstr ""
+
+ #. module: base
-#: view:ir.values:0
-msgid "tree_but_action, client_print_multi"
-msgstr "tree_but_action, client_print_multi"
++#: model:ir.actions.act_window,name:base.action_publisher_warranty_contract_add_wizard
++#: model:ir.ui.menu,name:base.menu_publisher_warranty_contract_add
++#: view:publisher_warranty.contract.wizard:0
++msgid "Register a Contract"
++msgstr ""
++
++#. module: base
++#: view:ir.rule:0
++msgid ""
++"3. If user belongs to several groups, the results from step 2 are combined "
++"with logical OR operator"
++msgstr ""
++
++#. module: base
++#: code:addons/base/publisher_warranty/publisher_warranty.py:145
++#, python-format
++msgid "Please check your publisher warranty contract name and validity."
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.sv
+ msgid "El Salvador"
-msgstr "El Salvador"
++msgstr ""
+
+ #. module: base
+ #: field:res.bank,phone:0
++#: field:res.partner,phone:0
+ #: field:res.partner.address,phone:0
+ msgid "Phone"
-msgstr "Telefoon"
++msgstr ""
+
+ #. module: base
-#: field:res.groups,menu_access:0
-msgid "Access Menu"
-msgstr "Toegangsmenu"
++#: field:ir.cron,active:0
++#: field:ir.sequence,active:0
++#: field:res.bank,active:0
++#: field:res.config.users,active:0
++#: field:res.currency,active:0
++#: field:res.lang,active:0
++#: field:res.partner,active:0
++#: field:res.partner.address,active:0
++#: field:res.partner.canal,active:0
++#: field:res.partner.category,active:0
++#: field:res.request,active:0
++#: field:res.users,active:0
++#: view:workflow.instance:0
++#: view:workflow.workitem:0
++msgid "Active"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.th
+ msgid "Thailand"
-msgstr "Thailand"
++msgstr ""
++
++#. module: base
++#: model:ir.ui.menu,name:base.menu_crm_config_lead
++msgid "Leads & Opportunities"
++msgstr ""
+
+ #. module: base
-#: selection:ir.report.custom.fields,fc0_op:0
-#: selection:ir.report.custom.fields,fc1_op:0
-#: selection:ir.report.custom.fields,fc2_op:0
-#: selection:ir.report.custom.fields,fc3_op:0
-msgid ">"
-msgstr ">"
++#: selection:base.language.install,lang:0
++msgid "Romanian / română"
++msgstr ""
+
+ #. module: base
-#: field:ir.model.access,perm_unlink:0
-msgid "Delete Permission"
-msgstr "Toestemming Verwijderen"
++#: view:res.log:0
++msgid "System Logs"
++msgstr ""
+
+ #. module: base
+ #: selection:workflow.activity,join_mode:0
+ #: selection:workflow.activity,split_mode:0
+ msgid "And"
-msgstr "En"
++msgstr ""
+
+ #. module: base
+ #: field:ir.model.fields,relation:0
+ msgid "Object Relation"
+ msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_PRINT"
-msgstr "STOCK_PRINT"
-
-#. module: base
-#: selection:ir.report.custom.fields,fc0_op:0
-#: selection:ir.report.custom.fields,fc1_op:0
-#: selection:ir.report.custom.fields,fc2_op:0
-#: selection:ir.report.custom.fields,fc3_op:0
-msgid "<"
-msgstr "<"
++#: view:ir.rule:0
++#: view:res.partner:0
++msgid "General"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.uz
+ msgid "Uzbekistan"
-msgstr "Oezbekistan"
++msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_ir_actions_act_window
+ #: selection:ir.ui.menu,action:0
+ msgid "ir.actions.act_window"
-msgstr "ir.actions.act_window"
++msgstr ""
++
++#. module: base
++#: field:ir.rule,perm_create:0
++msgid "Apply For Create"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.vi
+ msgid "Virgin Islands (USA)"
-msgstr "Virgin Islands"
++msgstr ""
+
+ #. module: base
-#: view:ir.rule:0
-msgid "If you don't force the domain, it will use the simple domain setup"
++#: model:res.country,name:base.tw
++msgid "Taiwan"
++msgstr ""
++
++#. module: base
++#: model:ir.model,name:base.model_res_currency_rate
++msgid "Currency Rate"
++msgstr ""
++
++#. module: base
++#: model:ir.actions.act_window,help:base.grant_menu_access
++msgid ""
++"Manage and customize the items available and displayed in your OpenERP "
++"system menu. You can delete an item by clicking on the box at the beginning "
++"of each line and then delete it through the button that appeared. Items can "
++"be assigned to specific groups in order to make them accessible to some "
++"users within the system."
+ msgstr ""
+
+ #. module: base
-#: field:ir.report.custom,field_parent:0
+ #: field:ir.ui.view,field_parent:0
+ msgid "Child Field"
-msgstr "Onderliggend Veld"
++msgstr ""
+
+ #. module: base
+ #: field:ir.actions.act_window,usage:0
+ #: field:ir.actions.act_window_close,usage:0
+ #: field:ir.actions.actions,usage:0
-#: field:ir.actions.report.custom,usage:0
+ #: field:ir.actions.report.xml,usage:0
+ #: field:ir.actions.server,usage:0
+ #: field:ir.actions.wizard,usage:0
+ msgid "Action Usage"
-msgstr "Actie Gebruik"
++msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_workflow_workitem
+ msgid "workflow.workitem"
-msgstr "workflow.workitem"
++msgstr ""
+
+ #. module: base
+ #: selection:ir.module.module,state:0
+ msgid "Not Installable"
-msgstr "Niet installeerbaar"
++msgstr ""
+
+ #. module: base
-#: rml:ir.module.reference:0
++#: report:ir.module.reference.graph:0
+ msgid "View :"
+ msgstr ""
+
+ #. module: base
+ #: field:ir.model.fields,view_load:0
+ msgid "View Auto-Load"
+ msgstr ""
+
+ #. module: base
-#: field:ir.module.module,installed_version:0
-msgid "Latest version"
-msgstr "Laatste Versie"
-
-#. module: base
-#: selection:ir.actions.server,state:0
-msgid "Write Object"
-msgstr "Object Schrijven"
++#: code:addons/base/ir/ir_model.py:232
++#, python-format
++msgid "You cannot remove the field '%s' !"
++msgstr ""
+
+ #. module: base
-#: field:ir.report.custom,print_format:0
-msgid "Print format"
-msgstr "Afdruk opmaak"
++#: field:ir.exports,resource:0
++#: view:ir.property:0
++#: field:ir.property,res_id:0
++msgid "Resource"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_JUMP_TO"
-msgstr "STOCK_JUMP_TO"
++#: field:ir.ui.menu,web_icon:0
++msgid "Web Icon File"
++msgstr ""
+
+ #. module: base
-#: field:ir.actions.todo,end_date:0
-msgid "End Date"
-msgstr "Einddatum"
++#: selection:base.language.install,lang:0
++msgid "Persian / فارس"
++msgstr ""
+
+ #. module: base
-#: field:ir.exports,resource:0
-#: field:ir.property,res_id:0
-msgid "Resource"
++#: view:ir.actions.act_window:0
++msgid "View Ordering"
+ msgstr ""
+
+ #. module: base
-#: field:maintenance.contract,name:0
-#: field:maintenance.contract.wizard,name:0
-msgid "Contract ID"
-msgstr "Contract ID"
++#: code:addons/base/module/wizard/base_module_upgrade.py:95
++#, python-format
++msgid "Unmet dependency !"
++msgstr ""
+
+ #. module: base
-#: selection:ir.report.custom.fields,alignment:0
-msgid "center"
-msgstr "midden"
++#: view:base.language.import:0
++msgid ""
++"Supported file formats: *.csv (Comma-separated values) or *.po (GetText "
++"Portable Objects)"
++msgstr ""
+
+ #. module: base
-#: code:addons/osv/fields.py:0
++#: code:addons/base/ir/ir_model.py:487
+ #, python-format
+ msgid ""
-"The second argument of the many2many field %s must be a SQL table !'\\n "
-" 'You used %s, which is not a valid SQL table name."
++"You can not delete this document (%s) ! Be sure your user belongs to one of "
++"these groups: %s."
+ msgstr ""
+
+ #. module: base
-#: model:ir.actions.act_window,name:base.action_country_state
-#: model:ir.ui.menu,name:base.menu_country_state_partner
-#: field:maintenance.contract.wizard,state:0
-msgid "States"
-msgstr "Staten/Provincies"
-
-#. module: base
-#: field:ir.actions.configuration.wizard,name:0
-msgid "Next Wizard"
-msgstr "Volgende Assistent"
++#: model:ir.model,name:base.model_base_module_configuration
++msgid "base.module.configuration"
++msgstr ""
+
+ #. module: base
++#: field:base.language.export,name:0
+ #: field:ir.attachment,datas_fname:0
-#: field:wizard.module.lang.export,name:0
+ msgid "Filename"
-msgstr "Bestandsnaam"
++msgstr ""
+
+ #. module: base
+ #: field:ir.model,access_ids:0
-#: field:ir.model.grid,access_ids:0
++#: view:ir.model.access:0
+ msgid "Access"
-msgstr "Toegang"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.sk
+ msgid "Slovak Republic"
-msgstr "Slowakije"
++msgstr ""
++
++#. module: base
++#: model:ir.ui.menu,name:base.publisher_warranty
++msgid "Publisher Warranty"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.aw
+ msgid "Aruba"
-msgstr "Aruba"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.ar
+ msgid "Argentina"
-msgstr "Argentinië"
++msgstr ""
+
+ #. module: base
+ #: field:res.groups,name:0
+ msgid "Group Name"
-msgstr "Groepsnaam"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.bh
+ msgid "Bahrain"
-msgstr "Bahrein"
++msgstr ""
+
+ #. module: base
+ #: model:res.partner.category,name:base.res_partner_category_12
+ msgid "Segmentation"
+ msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_FIND"
-msgstr "STOCK_FIND"
++#: view:ir.attachment:0
++#: field:ir.attachment,company_id:0
++#: field:ir.default,company_id:0
++#: field:ir.property,company_id:0
++#: field:ir.sequence,company_id:0
++#: field:ir.values,company_id:0
++#: view:res.company:0
++#: field:res.config.users,company_id:0
++#: field:res.currency,company_id:0
++#: field:res.partner,company_id:0
++#: field:res.partner.address,company_id:0
++#: view:res.users:0
++#: field:res.users,company_id:0
++msgid "Company"
++msgstr ""
++
++#. module: base
++#: view:res.users:0
++msgid "Email & Signature"
++msgstr ""
+
+ #. module: base
-#: model:ir.actions.act_window,name:base.action_maintenance_contract_add_wizard
-#: model:ir.ui.menu,name:base.menu_maintenance_contract_add
-#: view:maintenance.contract.wizard:0
-msgid "Add Maintenance Contract"
-msgstr "Voeg onderhoudscontract toe"
++#: view:publisher_warranty.contract:0
++msgid "Publisher Warranty Contract"
++msgstr ""
+
+ #. module: base
-#: rml:ir.module.reference:0
-#: field:maintenance.contract.module,version:0
-msgid "Version"
-msgstr "Versie"
++#: selection:base.language.install,lang:0
++msgid "Bulgarian / български език"
++msgstr ""
+
+ #. module: base
-#: selection:module.lang.install,init,lang:0
-msgid "Vietnam / Cộng hòa xã hội chủ nghĩa Việt Nam"
++#: model:ir.ui.menu,name:base.menu_aftersale
++msgid "After-Sale Services"
+ msgstr ""
+
+ #. module: base
-#: field:ir.actions.act_window,limit:0
-#: field:ir.report.custom,limitt:0
-msgid "Limit"
-msgstr "Limiet"
++#: view:ir.actions.todo:0
++msgid "Launch"
++msgstr ""
+
+ #. module: base
-#: help:ir.actions.server,wkf_model_id:0
-msgid "Workflow to be executed on this model."
++#: field:ir.actions.act_window,limit:0
++msgid "Limit"
+ msgstr ""
+
+ #. module: base
-#: code:addons/osv/orm.py:0
-#, python-format
-msgid "The search method is not implemented on this object !"
++#: help:ir.actions.server,wkf_model_id:0
++msgid "Workflow to be executed on this model."
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.jm
+ msgid "Jamaica"
-msgstr "Jamaica"
++msgstr ""
++
++#. module: base
++#: model:ir.actions.act_window,help:base.action_partner_category_form
++msgid ""
++"Manage the partner categories in order to better classify them for tracking "
++"and analysis purposes. A partner may belong to several categories and "
++"categories have a hierarchy structure: a partner belonging to a category "
++"also belong to his parent category."
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.az
+ msgid "Azerbaijan"
-msgstr "Azerbeidzjan"
++msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/res/partner/partner.py:0
++#: code:addons/base/res/partner/partner.py:250
+ #, python-format
+ msgid "Warning"
-msgstr "Waarschuwing"
++msgstr ""
+
+ #. module: base
-#: selection:module.lang.install,init,lang:0
++#: selection:base.language.install,lang:0
+ msgid "Arabic / الْعَرَبيّة"
-msgstr "Arabisch / الْعَرَبيّة"
-
-#. module: base
-#: selection:ir.report.custom,state:0
-msgid "Unsubscribed"
+ msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.vg
+ msgid "Virgin Islands (British)"
-msgstr "Virgin Islands (Brits)"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_MEDIA_PREVIOUS"
-msgstr "STOCK_MEDIA_PREVIOUS"
++#: view:ir.property:0
++#: model:ir.ui.menu,name:base.next_id_15
++msgid "Parameters"
++msgstr ""
+
+ #. module: base
-#: selection:module.lang.install,init,lang:0
++#: selection:base.language.install,lang:0
+ msgid "Czech / Čeština"
-msgstr "Tsjechisch / Čeština"
++msgstr ""
+
+ #. module: base
+ #: view:ir.actions.server:0
+ msgid "Trigger Configuration"
+ msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.rw
-msgid "Rwanda"
-msgstr "Rwanda"
-
-#. module: base
-#: constraint:res.partner:0
-msgid "The VAT doesn't seem to be correct."
-msgstr "De BTW lijkt niet correct te zijn."
++#: model:ir.actions.act_window,help:base.action_partner_supplier_form
++msgid ""
++"You can access all information regarding your suppliers from the supplier "
++"form: accounting data, history of emails, meetings, purchases, etc. You can "
++"uncheck the 'Suppliers' filter button in order to search in all your "
++"partners, including customers and prospects."
++msgstr ""
+
+ #. module: base
-#: selection:ir.report.custom.fields,operation:0
-msgid "Calculate Sum"
-msgstr "Som Berekenen"
++#: model:res.country,name:base.rw
++msgid "Rwanda"
++msgstr ""
+
+ #. module: base
+ #: view:ir.sequence:0
+ msgid "Day of the week (0:Monday): %(weekday)s"
-msgstr "Dag van de week (0:Maandag): %(weekday)s"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.ck
+ msgid "Cook Islands"
-msgstr "Cook Eilanden"
-
-#. module: base
-#: help:ir.actions.server,mobile:0
-msgid ""
-"Provides fields that be used to fetch the mobile number, e.g. you select the "
-"invoice, then `object.invoice_address_id.mobile` is the field which gives "
-"the correct mobile number"
+ msgstr ""
+
+ #. module: base
+ #: field:ir.model.data,noupdate:0
+ msgid "Non Updatable"
-msgstr "Niet bijwerkbaar"
++msgstr ""
++
++#. module: base
++#: selection:base.language.install,lang:0
++msgid "Klingon"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.sg
+ msgid "Singapore"
-msgstr "Singapore"
++msgstr ""
+
+ #. module: base
+ #: selection:ir.actions.act_window,target:0
+ msgid "Current Window"
-msgstr "Huidig Venster"
++msgstr ""
+
+ #. module: base
+ #: view:ir.values:0
+ msgid "Action Source"
+ msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_NETWORK"
-msgstr "STOCK_NETWORK"
++#: view:res.config.view:0
++msgid ""
++"If you use OpenERP for the first time we strongly advise you to select the "
++"simplified interface, which has less features but is easier. You can always "
++"switch later from the user preferences."
++msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_res_country
+ #: field:res.bank,country:0
+ #: view:res.country:0
+ #: field:res.country.state,country_id:0
+ #: field:res.partner,country:0
++#: view:res.partner.address:0
+ #: field:res.partner.address,country_id:0
+ #: field:res.partner.bank,country_id:0
+ msgid "Country"
-msgstr "Land"
-
-#. module: base
-#: wizard_view:base.module.import,import:0
-msgid "Module successfully imported !"
-msgstr "Module succesvol geïmporteerd !"
++msgstr ""
+
+ #. module: base
+ #: field:ir.model.fields,complete_name:0
+ #: field:ir.ui.menu,complete_name:0
+ msgid "Complete Name"
-msgstr "Volledige Naam"
-
-#. module: base
-#: view:ir.report.custom:0
-msgid "Subscribe Report"
+ msgstr ""
+
+ #. module: base
+ #: field:ir.values,object:0
+ msgid "Is Object"
-msgstr "Is Object"
++msgstr ""
++
++#. module: base
++#: view:ir.rule:0
++msgid ""
++"1. Global rules are combined together with a logical AND operator, and with "
++"the result of the following steps"
++msgstr ""
++
++#. module: base
++#: field:res.partner.category,name:0
++msgid "Category Name"
++msgstr ""
+
+ #. module: base
+ #: model:res.partner.category,name:base.res_partner_category_15
+ msgid "IT sector"
-msgstr "IT sector"
++msgstr ""
+
+ #. module: base
-#: view:ir.report.custom:0
-msgid "Unsubscribe Report"
++#: view:ir.actions.act_window:0
++msgid "Select Groups"
+ msgstr ""
+
+ #. module: base
+ #: view:res.lang:0
+ msgid "%X - Appropriate time representation."
-msgstr "%X - Passende tijdweergave."
++msgstr ""
+
+ #. module: base
-#: view:res.company:0
-msgid "Your Logo - Use a size of about 450x150 pixels."
-msgstr "Uw Logo - Gebruik een afmeting van ongeveer 450x150 pixels."
++#: selection:base.language.install,lang:0
++msgid "Spanish (SV) / Español (SV)"
++msgstr ""
+
+ #. module: base
+ #: help:res.lang,grouping:0
+ msgid ""
+ "The Separator Format should be like [,n] where 0 < n :starting from Unit "
+ "digit.-1 will end the separation. e.g. [3,2,-1] will represent 106500 to be "
+ "1,06,500;[1,2,-1] will represent it to be 106,50,0;[3] will represent it as "
+ "106,500. Provided ',' as the thousand separator in each case."
+ msgstr ""
+
+ #. module: base
-#: selection:ir.report.custom,print_orientation:0
++#: view:res.company:0
+ msgid "Portrait"
-msgstr "Staand"
++msgstr ""
+
+ #. module: base
-#: field:ir.actions.server,subject:0
-#: wizard_field:res.partner.spam_send,init,subject:0
-#: field:res.request,name:0
-msgid "Subject"
-msgstr "Onderwerp"
++#: code:addons/base/ir/ir_model.py:317
++#, python-format
++msgid "Can only rename one column at a time!"
++msgstr ""
+
+ #. module: base
+ #: selection:ir.translation,type:0
+ msgid "Wizard Button"
-msgstr "Assistent Knop"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_DIRECTORY"
-msgstr "STOCK_DIRECTORY"
++#: selection:ir.translation,type:0
++msgid "Report/Template"
++msgstr ""
+
+ #. module: base
-#: model:ir.actions.act_window,name:base.action_partner_customer_form_new
-#: model:ir.ui.menu,name:base.menu_partner_customer_form_new
-msgid "New Partner"
-msgstr "Nieuwe Relatie"
++#: selection:ir.actions.act_window.view,view_mode:0
++#: selection:ir.ui.view,type:0
++#: selection:wizard.ir.model.menu.create.line,view_type:0
++msgid "Graph"
++msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_ir_actions_server
++#: selection:ir.ui.menu,action:0
+ msgid "ir.actions.server"
-msgstr "ir.actions.server"
-
-#. module: base
-#: view:ir.actions.report.custom:0
-msgid "Report custom"
-msgstr "Aangepast Rapport"
++msgstr ""
+
+ #. module: base
+ #: field:ir.actions.configuration.wizard,progress:0
++#: field:res.config,progress:0
++#: field:res.config.installer,progress:0
++#: field:res.config.users,progress:0
++#: field:res.config.view,progress:0
+ msgid "Configuration Progress"
-msgstr "Configuratie Voortgang"
++msgstr ""
+
+ #. module: base
++#: model:ir.actions.act_window,name:base.act_ir_actions_todo_form
++#: model:ir.ui.menu,name:base.menu_ir_actions_todo_form
+ #: model:ir.ui.menu,name:base.next_id_11
+ msgid "Configuration Wizards"
-msgstr "Configuratie Assistenten"
++msgstr ""
+
+ #. module: base
-#: model:ir.ui.menu,name:base.menu_localisation
-msgid "Localisation"
-msgstr "Localisatie"
++#: field:res.lang,code:0
++msgid "Locale Code"
++msgstr ""
+
+ #. module: base
-#: selection:res.config.view,view:0
-msgid "Simplified Interface"
++#: field:workflow.activity,split_mode:0
++msgid "Split Mode"
+ msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.cl
-msgid "Chile"
-msgstr "Chili"
++#: view:base.module.upgrade:0
++msgid "Note that this operation might take a few minutes."
++msgstr ""
++
++#. module: base
++#: model:ir.ui.menu,name:base.menu_localisation
++msgid "Localisation"
++msgstr ""
+
+ #. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "STOCK_REVERT_TO_SAVED"
-msgstr "STOCK_REVERT_TO_SAVED"
++#: view:ir.actions.server:0
++msgid "Action to Launch"
++msgstr ""
++
++#. module: base
++#: view:ir.cron:0
++msgid "Execution"
++msgstr ""
+
+ #. module: base
-#: model:ir.actions.wizard,name:base.wizard_lang_import
-#: model:ir.ui.menu,name:base.menu_wizard_lang_import
-msgid "Import a Translation File"
-msgstr "Vertaalbestand importeren"
++#: field:ir.actions.server,condition:0
++#: field:workflow.transition,condition:0
++msgid "Condition"
++msgstr ""
+
+ #. module: base
+ #: help:ir.values,model_id:0
+ msgid "This field is not used, it only helps you to select a good model."
+ msgstr ""
-"Dit veld wordt niet gebruikt, het helpt u alleen om een goed model te kiezen."
+
+ #. module: base
+ #: field:ir.ui.view,name:0
+ msgid "View Name"
-msgstr "Weergave Naam"
++msgstr ""
+
+ #. module: base
-#: selection:module.lang.install,init,lang:0
++#: selection:base.language.install,lang:0
+ msgid "Italian / Italiano"
-msgstr "Italiaans / Italiano"
++msgstr ""
+
+ #. module: base
+ #: field:ir.actions.report.xml,attachment:0
+ msgid "Save As Attachment Prefix"
-msgstr "Opslaan Als Bijlage Voorvoegsel"
++msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.hr
-msgid "Croatia"
-msgstr "Kroatië"
++#: view:ir.actions.server:0
++msgid ""
++"Only one client action will be executed, last client action will be "
++"considered in case of multiple client actions."
++msgstr ""
++
++#. module: base
++#: view:res.lang:0
++msgid "%j - Day of the year [001,366]."
++msgstr ""
+
+ #. module: base
+ #: field:ir.actions.server,mobile:0
+ msgid "Mobile No"
-msgstr "Mobiel nr"
++msgstr ""
+
+ #. module: base
+ #: model:ir.actions.act_window,name:base.action_partner_by_category
+ #: model:ir.actions.act_window,name:base.action_partner_category_form
+ #: model:ir.model,name:base.model_res_partner_category
+ #: model:ir.ui.menu,name:base.menu_partner_category_form
+ #: view:res.partner.category:0
+ msgid "Partner Categories"
-msgstr "Relatie Categorieën"
++msgstr ""
+
+ #. module: base
-#: field:ir.sequence,code:0
-#: field:ir.sequence.type,code:0
-msgid "Sequence Code"
++#: view:base.module.upgrade:0
++msgid "System Update"
++msgstr ""
++
++#. module: base
++#: selection:ir.translation,type:0
++msgid "Wizard Field"
+ msgstr ""
+
+ #. module: base
-#: selection:ir.report.custom,print_format:0
-msgid "a5"
-msgstr "a5"
++#: help:ir.sequence,prefix:0
++msgid "Prefix value of the record for the sequence"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.sc
+ msgid "Seychelles"
-msgstr "Seychellen"
++msgstr ""
+
+ #. module: base
+ #: model:ir.model,name:base.model_res_partner_bank
+ #: view:res.partner.bank:0
+ msgid "Bank Accounts"
-msgstr "Bankrekeningen"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.sl
+ msgid "Sierra Leone"
-msgstr "Sierra Leone"
++msgstr ""
+
+ #. module: base
+ #: view:res.company:0
+ #: view:res.partner:0
+ msgid "General Information"
-msgstr "Algemene Informatie"
-
-#. module: base
-#: selection:ir.ui.menu,icon:0
-msgid "terp-product"
-msgstr "terp-product"
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.tc
+ msgid "Turks and Caicos Islands"
-msgstr "Turks en Caicoseilanden"
++msgstr ""
+
+ #. module: base
+ #: field:res.partner.bank,owner_name:0
+ msgid "Account Owner"
-msgstr "Rekeninghouder"
++msgstr ""
++
++#. module: base
++#: code:addons/base/res/res_user.py:256
++#, python-format
++msgid "Company Switch Warning"
++msgstr ""
++
++#. module: base
++#: model:ir.actions.act_window,name:base.action_res_widget_wizard
++msgid "Homepage Widgets Management"
++msgstr ""
+
+ #. module: base
+ #: field:workflow,osv:0
+ #: field:workflow.instance,res_type:0
+ msgid "Resource Object"
+ msgstr ""
+
+ #. module: base
++#: help:ir.sequence,number_increment:0
++msgid "The next number of the sequence will be incremented by this number"
++msgstr ""
++
++#. module: base
+ #: field:ir.cron,function:0
+ #: field:res.partner.address,function:0
+ #: selection:workflow.activity,kind:0
+ msgid "Function"
-msgstr "Functie"
++msgstr ""
+
+ #. module: base
-#: field:res.partner.event,som:0
-#: field:res.partner.som,name:0
-msgid "State of Mind"
++#: view:res.widget:0
++msgid "Search Widget"
+ msgstr ""
+
+ #. module: base
-#: field:ir.attachment,preview:0
-msgid "Image Preview"
-msgstr "Afbeeldingsvoorbeeld"
++#: selection:ir.actions.todo,restart:0
++msgid "Never"
++msgstr ""
+
+ #. module: base
-#: model:res.country,name:base.yu
-msgid "Yugoslavia"
-msgstr "Joegoslavië"
++#: selection:res.partner.address,type:0
++msgid "Delivery"
++msgstr ""
+
+ #. module: base
+ #: model:res.partner.title,name:base.res_partner_title_pvt_ltd
++#: model:res.partner.title,shortcut:base.res_partner_title_pvt_ltd
+ msgid "Corp."
+ msgstr ""
+
+ #. module: base
-#: wizard_view:module.lang.install,init:0
-msgid "Choose a language to install:"
-msgstr "Selecteer de te installeren taal:"
-
-#. module: base
+ #: model:res.country,name:base.gw
+ msgid "Guinea Bissau"
-msgstr "Guinea Bissau"
++msgstr ""
+
+ #. module: base
+ #: view:workflow.instance:0
+ msgid "Workflow Instances"
+ msgstr ""
+
+ #. module: base
-#: code:addons/addons/base/res/partner/partner.py:0
++#: code:addons/base/res/partner/partner.py:261
+ #, python-format
+ msgid "Partners: "
-msgstr "Relaties: "
++msgstr ""
+
+ #. module: base
+ #: model:res.country,name:base.kp
+ msgid "North Korea"
-msgstr "Noord-Korea"
++msgstr ""
+
+ #. module: base
+ #: selection:ir.actions.server,state:0
+ msgid "Create Object"
-msgstr "Object Aanmaken"
++msgstr ""
++
++#. module: base
++#: view:ir.filters:0
++#: field:res.log,context:0
++msgid "Context"
++msgstr ""
+
+ #. module: base
+ #: field:res.bank,bic:0
+ msgid "BIC/Swift code"
-msgstr "BIC/Swift code"
++msgstr ""
+
+ #. module: base
+ #: model:res.partner.category,name:base.res_partner_category_1
+ msgid "Prospect"
+ msgstr ""
+
+ #. module: base
-#: selection:module.lang.install,init,lang:0
++#: selection:base.language.install,lang:0
+ msgid "Polish / Język polski"
-msgstr "Pools / Język polski"
++msgstr ""
+
+ #. module: base
+ #: field:ir.exports,name:0
+ msgid "Export Name"
-msgstr "Exportnaam"
++msgstr ""
+
+ #. module: base
+ #: help:res.partner.address,type:0
+ msgid ""
+ "Used to select automatically the right address according to the context in "
+ "sales and purchases documents."
+ msgstr ""
-"Wordt gebruikt om automatisch het juiste adres te kiezen afhankelijk van de "
-"context in verkoop- en inkoopdocumenten"
+
+ #. module: base
+ #: model:res.country,name:base.lk
+ msgid "Sri Lanka"
-msgstr "Sri Lanka"
-
-#. module: base
-#: selection:module.lang.install,init,lang:0
-msgid "Russian / русский язык"
-msgstr "Russisch / русский язык"
-
-#. module: base
-#: sql_constraint:res.user:0
-msgid "You cannot have two users with the same login !"
-msgstr ""
-
-#. module: base
-#: sql_constraint:ir.model.fields:0
-msgid "Size of the field can never be less than 1 !"
-msgstr ""
-
-#. module: base
-#: sql_constraint:ir.ui.view_sc:0
-msgid "Shortcut for this menu already exists!"
-msgstr ""
-
-#. module: base
-#: sql_constraint:ir.model.data:0
-msgid "You cannot have multiple records with the same id for the same module !"
-msgstr ""
-
-#. module: base
-#: sql_constraint:maintenance.contract:0
-msgid "Your maintenance contract is already subscribed in the system !"
-msgstr ""
-
-#. module: base
-#: sql_constraint:ir.module.module:0
-#: sql_constraint:ir.module.web:0
-msgid "The name of the module must be unique !"
-msgstr ""
-
-#. module: base
-#: sql_constraint:ir.module.module:0
-msgid "The certificate ID of the module must be unique !"
-msgstr ""
-
-#. module: base
-#: sql_constraint:res.partner.function:0
-msgid "The Code of the Partner Function must be unique !"
-msgstr ""
-
-#. module: base
-#: sql_constraint:res.partner:0
-msgid "The name of the Partner must be unique !"
-msgstr ""
-
-#. module: base
-#: sql_constraint:res.country:0
-msgid "The name of the country must be unique !"
-msgstr ""
-
-#. module: base
-#: sql_constraint:res.country:0
-msgid "The code of the country must be unique !"
-msgstr ""
-
-#. module: base
-#: sql_constraint:res.lang:0
-msgid "The name of the language must be unique !"
-msgstr ""
-
-#. module: base
-#: sql_constraint:res.lang:0
-msgid "The code of the language must be unique !"
-msgstr ""
-
-#. module: base
-#: sql_constraint:res.groups:0
-msgid "The name of the group must be unique !"
-msgstr ""
-
-#. module: base
-#: code:addons/osv/osv.py:0
-#, python-format
-msgid "Constraint Error"
-msgstr ""
-
-#. module: base
-#: code:addons/osv/osv.py:0
-#, python-format
-msgid "The operation cannot be completed, probably due to the following:\n- deletion: you may be trying to delete a record while other records still reference it\n- creation/update: a mandatory field is not correctly set"
-msgstr ""
-
-#. module: base
-#: code:addons/osv/osv.py:0
-#, python-format
-msgid "\n\n[object with reference: %s - %s]"
-msgstr ""
-
-#. module: base
-#: code:addons/osv/osv.py:0
-#, python-format
-msgid "Integrity Error"
-msgstr ""
-
-#. module: base
-#: code:addons/base/res/res_lang.py:0
-#, python-format
-msgid "User Error"
-msgstr ""
-
-#. module: base
-#: code:addons/base/res/res_lang.py:0
-#, python-format
-msgid "Base Language 'en_US' can not be deleted !"
+ msgstr ""
+
+ #. module: base
-#: code:addons/base/res/res_lang.py:0
-#, python-format
-msgid "You cannot delete the language which is User's Preferred Language !"
-msgstr ""
-
-#. module: base
-#: code:addons/base/res/res_lang.py:0
-#, python-format
-msgid "You cannot delete the language which is Active !\nPlease de-activate the language first."
++#: selection:base.language.install,lang:0
++msgid "Russian / русский язык"
+ msgstr ""
-
-#~ msgid "Make the rule global, otherwise it needs to be put on a group or user"
-#~ msgstr ""
-#~ "Maak dit een globale regel, anders moet de regel aan een groep of gebruiker "
-#~ "worden gekoppeld"
--- /dev/null
+ # -*- coding: utf-8 -*-
+ ##############################################################################
+ #
+ # OpenERP, Open Source Management Solution
+ # Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
+ #
+ # This program is free software: you can redistribute it and/or modify
+ # it under the terms of the GNU Affero General Public License as
+ # published by the Free Software Foundation, either version 3 of the
+ # License, or (at your option) any later version.
+ #
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ # GNU Affero General Public License for more details.
+ #
+ # You should have received a copy of the GNU Affero General Public License
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
+ #
+ ##############################################################################
+
+ #
+ # Object relationnal mapping to postgresql module
+ # . Hierarchical structure
+ # . Constraints consistency, validations
+ # . Object meta Data depends on its status
+ # . Optimised processing by complex query (multiple actions at once)
+ # . Default fields value
+ # . Permissions optimisation
+ # . Persistant object: DB postgresql
+ # . Datas conversions
+ # . Multi-level caching system
+ # . 2 different inheritancies
+ # . Fields:
+ # - classicals (varchar, integer, boolean, ...)
+ # - relations (one2many, many2one, many2many)
+ # - functions
+ #
+ #
+ import calendar
+ import copy
+ import datetime
+ import logging
+ import warnings
+ import operator
+ import pickle
+ import re
+ import time
+ import traceback
+ import types
+
+ import openerp.netsvc as netsvc
+ from lxml import etree
+ from openerp.tools.config import config
+ from openerp.tools.translate import _
+
+ import fields
+ from query import Query
+ import openerp.tools as tools
+ from openerp.tools.safe_eval import safe_eval as eval
+
+ # List of etree._Element subclasses that we choose to ignore when parsing XML.
+ from openerp.tools import SKIPPED_ELEMENT_TYPES
+
+ regex_order = re.compile('^(([a-z0-9_]+|"[a-z0-9_]+")( *desc| *asc)?( *, *|))+$', re.I)
+
+ POSTGRES_CONFDELTYPES = {
+ 'RESTRICT': 'r',
+ 'NO ACTION': 'a',
+ 'CASCADE': 'c',
+ 'SET NULL': 'n',
+ 'SET DEFAULT': 'd',
+ }
+
+ def last_day_of_current_month():
+ today = datetime.date.today()
+ last_day = str(calendar.monthrange(today.year, today.month)[1])
+ return time.strftime('%Y-%m-' + last_day)
+
+ def intersect(la, lb):
+ return filter(lambda x: x in lb, la)
+
+ class except_orm(Exception):
+ def __init__(self, name, value):
+ self.name = name
+ self.value = value
+ self.args = (name, value)
+
+ class BrowseRecordError(Exception):
+ pass
+
+ # Readonly python database object browser
+ class browse_null(object):
+
+ def __init__(self):
+ self.id = False
+
+ def __getitem__(self, name):
+ return None
+
+ def __getattr__(self, name):
+ return None # XXX: return self ?
+
+ def __int__(self):
+ return False
+
+ def __str__(self):
+ return ''
+
+ def __nonzero__(self):
+ return False
+
+ def __unicode__(self):
+ return u''
+
+
+ #
+ # TODO: execute an object method on browse_record_list
+ #
+ class browse_record_list(list):
+
+ def __init__(self, lst, context=None):
+ if not context:
+ context = {}
+ super(browse_record_list, self).__init__(lst)
+ self.context = context
+
+
+ class browse_record(object):
+ logger = netsvc.Logger()
+
+ def __init__(self, cr, uid, id, table, cache, context=None, list_class=None, fields_process=None):
+ '''
+ table : the object (inherited from orm)
+ context : dictionary with an optional context
+ '''
+ if fields_process is None:
+ fields_process = {}
+ if context is None:
+ context = {}
+ self._list_class = list_class or browse_record_list
+ self._cr = cr
+ self._uid = uid
+ self._id = id
+ self._table = table
+ self._table_name = self._table._name
+ self.__logger = logging.getLogger(
+ 'osv.browse_record.' + self._table_name)
+ self._context = context
+ self._fields_process = fields_process
+
+ cache.setdefault(table._name, {})
+ self._data = cache[table._name]
+
+ if not (id and isinstance(id, (int, long,))):
+ raise BrowseRecordError(_('Wrong ID for the browse record, got %r, expected an integer.') % (id,))
+ # if not table.exists(cr, uid, id, context):
+ # raise BrowseRecordError(_('Object %s does not exists') % (self,))
+
+ if id not in self._data:
+ self._data[id] = {'id': id}
+
+ self._cache = cache
+
+ def __getitem__(self, name):
+ if name == 'id':
+ return self._id
+
+ if name not in self._data[self._id]:
+ # build the list of fields we will fetch
+
+ # fetch the definition of the field which was asked for
+ if name in self._table._columns:
+ col = self._table._columns[name]
+ elif name in self._table._inherit_fields:
+ col = self._table._inherit_fields[name][2]
+ elif hasattr(self._table, str(name)):
+ attr = getattr(self._table, name)
+
+ if isinstance(attr, (types.MethodType, types.LambdaType, types.FunctionType)):
+ return lambda *args, **argv: attr(self._cr, self._uid, [self._id], *args, **argv)
+ else:
+ return attr
+ else:
+ self.logger.notifyChannel("browse_record", netsvc.LOG_WARNING,
+ "Field '%s' does not exist in object '%s': \n%s" % (
+ name, self, ''.join(traceback.format_exc())))
+ raise KeyError("Field '%s' does not exist in object '%s'" % (
+ name, self))
+
+ # if the field is a classic one or a many2one, we'll fetch all classic and many2one fields
+ if col._prefetch:
+ # gen the list of "local" (ie not inherited) fields which are classic or many2one
+ fields_to_fetch = filter(lambda x: x[1]._classic_write, self._table._columns.items())
+ # gen the list of inherited fields
+ inherits = map(lambda x: (x[0], x[1][2]), self._table._inherit_fields.items())
+ # complete the field list with the inherited fields which are classic or many2one
+ fields_to_fetch += filter(lambda x: x[1]._classic_write, inherits)
+ # otherwise we fetch only that field
+ else:
+ fields_to_fetch = [(name, col)]
+ ids = filter(lambda id: name not in self._data[id], self._data.keys())
+ # read the results
+ field_names = map(lambda x: x[0], fields_to_fetch)
+ field_values = self._table.read(self._cr, self._uid, ids, field_names, context=self._context, load="_classic_write")
+
+ # TODO: improve this, very slow for reports
+ if self._fields_process:
+ lang = self._context.get('lang', 'en_US') or 'en_US'
+ lang_obj_ids = self.pool.get('res.lang').search(self._cr, self._uid, [('code', '=', lang)])
+ if not lang_obj_ids:
+ raise Exception(_('Language with code "%s" is not defined in your system !\nDefine it through the Administration menu.') % (lang,))
+ lang_obj = self.pool.get('res.lang').browse(self._cr, self._uid, lang_obj_ids[0])
+
+ for field_name, field_column in fields_to_fetch:
+ if field_column._type in self._fields_process:
+ for result_line in field_values:
+ result_line[field_name] = self._fields_process[field_column._type](result_line[field_name])
+ if result_line[field_name]:
+ result_line[field_name].set_value(self._cr, self._uid, result_line[field_name], self, field_column, lang_obj)
+
+ if not field_values:
+ # Where did those ids come from? Perhaps old entries in ir_model_dat?
+ self.__logger.warn("No field_values found for ids %s in %s", ids, self)
+ raise KeyError('Field %s not found in %s'%(name, self))
+ # create browse records for 'remote' objects
+ for result_line in field_values:
+ new_data = {}
+ for field_name, field_column in fields_to_fetch:
+ if field_column._type in ('many2one', 'one2one'):
+ if result_line[field_name]:
+ obj = self._table.pool.get(field_column._obj)
+ if isinstance(result_line[field_name], (list, tuple)):
+ value = result_line[field_name][0]
+ else:
+ value = result_line[field_name]
+ if value:
+ # FIXME: this happen when a _inherits object
+ # overwrite a field of it parent. Need
+ # testing to be sure we got the right
+ # object and not the parent one.
+ if not isinstance(value, browse_record):
+ new_data[field_name] = browse_record(self._cr,
+ self._uid, value, obj, self._cache,
+ context=self._context,
+ list_class=self._list_class,
+ fields_process=self._fields_process)
+ else:
+ new_data[field_name] = value
+ else:
+ new_data[field_name] = browse_null()
+ else:
+ new_data[field_name] = browse_null()
+ elif field_column._type in ('one2many', 'many2many') and len(result_line[field_name]):
+ new_data[field_name] = self._list_class([browse_record(self._cr, self._uid, id, self._table.pool.get(field_column._obj), self._cache, context=self._context, list_class=self._list_class, fields_process=self._fields_process) for id in result_line[field_name]], self._context)
+ elif field_column._type in ('reference'):
+ if result_line[field_name]:
+ if isinstance(result_line[field_name], browse_record):
+ new_data[field_name] = result_line[field_name]
+ else:
+ ref_obj, ref_id = result_line[field_name].split(',')
+ ref_id = long(ref_id)
+ if ref_id:
+ obj = self._table.pool.get(ref_obj)
+ new_data[field_name] = browse_record(self._cr, self._uid, ref_id, obj, self._cache, context=self._context, list_class=self._list_class, fields_process=self._fields_process)
+ else:
+ new_data[field_name] = browse_null()
+ else:
+ new_data[field_name] = browse_null()
+ else:
+ new_data[field_name] = result_line[field_name]
+ self._data[result_line['id']].update(new_data)
+
+ if not name in self._data[self._id]:
+ #how did this happen?
+ self.logger.notifyChannel("browse_record", netsvc.LOG_ERROR,
+ "Fields to fetch: %s, Field values: %s"%(field_names, field_values))
+ self.logger.notifyChannel("browse_record", netsvc.LOG_ERROR,
+ "Cached: %s, Table: %s"%(self._data[self._id], self._table))
+ raise KeyError(_('Unknown attribute %s in %s ') % (name, self))
+ return self._data[self._id][name]
+
+ def __getattr__(self, name):
+ try:
+ return self[name]
+ except KeyError, e:
+ raise AttributeError(e)
+
+ def __contains__(self, name):
+ return (name in self._table._columns) or (name in self._table._inherit_fields) or hasattr(self._table, name)
+
+ def __hasattr__(self, name):
+ return name in self
+
+ def __int__(self):
+ return self._id
+
+ def __str__(self):
+ return "browse_record(%s, %d)" % (self._table_name, self._id)
+
+ def __eq__(self, other):
+ if not isinstance(other, browse_record):
+ return False
+ return (self._table_name, self._id) == (other._table_name, other._id)
+
+ def __ne__(self, other):
+ if not isinstance(other, browse_record):
+ return True
+ return (self._table_name, self._id) != (other._table_name, other._id)
+
+ # we need to define __unicode__ even though we've already defined __str__
+ # because we have overridden __getattr__
+ def __unicode__(self):
+ return unicode(str(self))
+
+ def __hash__(self):
+ return hash((self._table_name, self._id))
+
+ __repr__ = __str__
+
+
+ def get_pg_type(f):
+ '''
+ returns a tuple
+ (type returned by postgres when the column was created, type expression to create the column)
+ '''
+
+ type_dict = {
+ fields.boolean: 'bool',
+ fields.integer: 'int4',
+ fields.integer_big: 'int8',
+ fields.text: 'text',
+ fields.date: 'date',
+ fields.time: 'time',
+ fields.datetime: 'timestamp',
+ fields.binary: 'bytea',
+ fields.many2one: 'int4',
+ }
+ if type(f) in type_dict:
+ f_type = (type_dict[type(f)], type_dict[type(f)])
+ elif isinstance(f, fields.float):
+ if f.digits:
+ f_type = ('numeric', 'NUMERIC')
+ else:
+ f_type = ('float8', 'DOUBLE PRECISION')
+ elif isinstance(f, (fields.char, fields.reference)):
+ f_type = ('varchar', 'VARCHAR(%d)' % (f.size,))
+ elif isinstance(f, fields.selection):
+ if isinstance(f.selection, list) and isinstance(f.selection[0][0], (str, unicode)):
+ f_size = reduce(lambda x, y: max(x, len(y[0])), f.selection, f.size or 16)
+ elif isinstance(f.selection, list) and isinstance(f.selection[0][0], int):
+ f_size = -1
+ else:
+ f_size = getattr(f, 'size', None) or 16
+
+ if f_size == -1:
+ f_type = ('int4', 'INTEGER')
+ else:
+ f_type = ('varchar', 'VARCHAR(%d)' % f_size)
+ elif isinstance(f, fields.function) and eval('fields.'+(f._type), globals()) in type_dict:
+ t = eval('fields.'+(f._type), globals())
+ f_type = (type_dict[t], type_dict[t])
+ elif isinstance(f, fields.function) and f._type == 'float':
+ if f.digits:
+ f_type = ('numeric', 'NUMERIC')
+ else:
+ f_type = ('float8', 'DOUBLE PRECISION')
+ elif isinstance(f, fields.function) and f._type == 'selection':
+ f_type = ('text', 'text')
+ elif isinstance(f, fields.function) and f._type == 'char':
+ f_type = ('varchar', 'VARCHAR(%d)' % (f.size))
+ else:
+ logger = netsvc.Logger()
+ logger.notifyChannel("init", netsvc.LOG_WARNING, '%s type not supported!' % (type(f)))
+ f_type = None
+ return f_type
+
+
+ class orm_template(object):
+ _name = None
+ _columns = {}
+ _constraints = []
+ _defaults = {}
+ _rec_name = 'name'
+ _parent_name = 'parent_id'
+ _parent_store = False
+ _parent_order = False
+ _date_name = 'date'
+ _order = 'id'
+ _sequence = None
+ _description = None
+ _inherits = {}
+ _table = None
+ _invalids = set()
+ _log_create = False
+
+ CONCURRENCY_CHECK_FIELD = '__last_update'
+ def log(self, cr, uid, id, message, secondary=False, context=None):
+ return self.pool.get('res.log').create(cr, uid,
+ {
+ 'name': message,
+ 'res_model': self._name,
+ 'secondary': secondary,
+ 'res_id': id,
+ },
+ context=context
+ )
+
+ def view_init(self, cr, uid, fields_list, context=None):
+ """Override this method to do specific things when a view on the object is opened."""
+ pass
+
+ def read_group(self, cr, uid, domain, fields, groupby, offset=0, limit=None, context=None, orderby=False):
+ raise NotImplementedError(_('The read_group method is not implemented on this object !'))
+
+ def _field_create(self, cr, context=None):
+ if context is None:
+ context = {}
+ cr.execute("SELECT id FROM ir_model WHERE model=%s", (self._name,))
+ if not cr.rowcount:
+ cr.execute('SELECT nextval(%s)', ('ir_model_id_seq',))
+ model_id = cr.fetchone()[0]
+ cr.execute("INSERT INTO ir_model (id,model, name, info,state) VALUES (%s, %s, %s, %s, %s)", (model_id, self._name, self._description, self.__doc__, 'base'))
+ else:
+ model_id = cr.fetchone()[0]
+ if 'module' in context:
+ name_id = 'model_'+self._name.replace('.', '_')
+ cr.execute('select * from ir_model_data where name=%s and module=%s', (name_id, context['module']))
+ if not cr.rowcount:
+ cr.execute("INSERT INTO ir_model_data (name,date_init,date_update,module,model,res_id) VALUES (%s, now(), now(), %s, %s, %s)", \
+ (name_id, context['module'], 'ir.model', model_id)
+ )
+
+ cr.commit()
+
+ cr.execute("SELECT * FROM ir_model_fields WHERE model=%s", (self._name,))
+ cols = {}
+ for rec in cr.dictfetchall():
+ cols[rec['name']] = rec
+
+ for (k, f) in self._columns.items():
+ vals = {
+ 'model_id': model_id,
+ 'model': self._name,
+ 'name': k,
+ 'field_description': f.string.replace("'", " "),
+ 'ttype': f._type,
+ 'relation': f._obj or '',
+ 'view_load': (f.view_load and 1) or 0,
+ 'select_level': tools.ustr(f.select or 0),
+ 'readonly': (f.readonly and 1) or 0,
+ 'required': (f.required and 1) or 0,
+ 'selectable': (f.selectable and 1) or 0,
+ 'relation_field': (f._type=='one2many' and isinstance(f, fields.one2many)) and f._fields_id or '',
+ }
+ # When its a custom field,it does not contain f.select
+ if context.get('field_state', 'base') == 'manual':
+ if context.get('field_name', '') == k:
+ vals['select_level'] = context.get('select', '0')
+ #setting value to let the problem NOT occur next time
+ elif k in cols:
+ vals['select_level'] = cols[k]['select_level']
+
+ if k not in cols:
+ cr.execute('select nextval(%s)', ('ir_model_fields_id_seq',))
+ id = cr.fetchone()[0]
+ vals['id'] = id
+ cr.execute("""INSERT INTO ir_model_fields (
+ id, model_id, model, name, field_description, ttype,
+ relation,view_load,state,select_level,relation_field
+ ) VALUES (
+ %s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s
+ )""", (
+ id, vals['model_id'], vals['model'], vals['name'], vals['field_description'], vals['ttype'],
+ vals['relation'], bool(vals['view_load']), 'base',
+ vals['select_level'], vals['relation_field']
+ ))
+ if 'module' in context:
+ name1 = 'field_' + self._table + '_' + k
+ cr.execute("select name from ir_model_data where name=%s", (name1,))
+ if cr.fetchone():
+ name1 = name1 + "_" + str(id)
+ cr.execute("INSERT INTO ir_model_data (name,date_init,date_update,module,model,res_id) VALUES (%s, now(), now(), %s, %s, %s)", \
+ (name1, context['module'], 'ir.model.fields', id)
+ )
+ else:
+ for key, val in vals.items():
+ if cols[k][key] != vals[key]:
+ cr.execute('update ir_model_fields set field_description=%s where model=%s and name=%s', (vals['field_description'], vals['model'], vals['name']))
+ cr.commit()
+ cr.execute("""UPDATE ir_model_fields SET
+ model_id=%s, field_description=%s, ttype=%s, relation=%s,
+ view_load=%s, select_level=%s, readonly=%s ,required=%s, selectable=%s, relation_field=%s
+ WHERE
+ model=%s AND name=%s""", (
+ vals['model_id'], vals['field_description'], vals['ttype'],
+ vals['relation'], bool(vals['view_load']),
+ vals['select_level'], bool(vals['readonly']), bool(vals['required']), bool(vals['selectable']), vals['relation_field'], vals['model'], vals['name']
+ ))
+ break
+ cr.commit()
+
+ def _auto_init(self, cr, context=None):
+ self._field_create(cr, context=context)
+
+ def __init__(self, cr):
+ if not self._name and not hasattr(self, '_inherit'):
+ name = type(self).__name__.split('.')[0]
+ msg = "The class %s has to have a _name attribute" % name
+
+ logger = netsvc.Logger()
+ logger.notifyChannel('orm', netsvc.LOG_ERROR, msg)
+ raise except_orm('ValueError', msg)
+
+ if not self._description:
+ self._description = self._name
+ if not self._table:
+ self._table = self._name.replace('.', '_')
+
+ def browse(self, cr, uid, select, context=None, list_class=None, fields_process=None):
+ """Fetch records as objects allowing to use dot notation to browse fields and relations
+
+ :param cr: database cursor
+ :param user: current user id
+ :param select: id or list of ids
+ :param context: context arguments, like lang, time zone
+ :rtype: object or list of objects requested
+
+ """
+ self._list_class = list_class or browse_record_list
+ cache = {}
+ # need to accepts ints and longs because ids coming from a method
+ # launched by button in the interface have a type long...
+ if isinstance(select, (int, long)):
+ return browse_record(cr, uid, select, self, cache, context=context, list_class=self._list_class, fields_process=fields_process)
+ elif isinstance(select, list):
+ return self._list_class([browse_record(cr, uid, id, self, cache, context=context, list_class=self._list_class, fields_process=fields_process) for id in select], context=context)
+ else:
+ return browse_null()
+
+ def __export_row(self, cr, uid, row, fields, context=None):
+ if context is None:
+ context = {}
+
+ def check_type(field_type):
+ if field_type == 'float':
+ return 0.0
+ elif field_type == 'integer':
+ return 0
+ elif field_type == 'boolean':
+ return False
+ return ''
+
+ def selection_field(in_field):
+ col_obj = self.pool.get(in_field.keys()[0])
+ if f[i] in col_obj._columns.keys():
+ return col_obj._columns[f[i]]
+ elif f[i] in col_obj._inherits.keys():
+ selection_field(col_obj._inherits)
+ else:
+ return False
+
+ lines = []
+ data = map(lambda x: '', range(len(fields)))
+ done = []
+ for fpos in range(len(fields)):
+ f = fields[fpos]
+ if f:
+ r = row
+ i = 0
+ while i < len(f):
+ if f[i] == '.id':
+ r = r['id']
+ elif f[i] == 'id':
+ model_data = self.pool.get('ir.model.data')
+ data_ids = model_data.search(cr, uid, [('model', '=', r._table_name), ('res_id', '=', r['id'])])
+ if len(data_ids):
+ d = model_data.read(cr, uid, data_ids, ['name', 'module'])[0]
+ if d['module']:
+ r = '%s.%s' % (d['module'], d['name'])
+ else:
+ r = d['name']
+ else:
+ break
+ else:
+ r = r[f[i]]
+ # To display external name of selection field when its exported
+ cols = False
+ if f[i] in self._columns.keys():
+ cols = self._columns[f[i]]
+ elif f[i] in self._inherit_fields.keys():
+ cols = selection_field(self._inherits)
+ if cols and cols._type == 'selection':
+ sel_list = cols.selection
+ if r and type(sel_list) == type([]):
+ r = [x[1] for x in sel_list if r==x[0]]
+ r = r and r[0] or False
+ if not r:
+ if f[i] in self._columns:
+ r = check_type(self._columns[f[i]]._type)
+ elif f[i] in self._inherit_fields:
+ r = check_type(self._inherit_fields[f[i]][2]._type)
+ data[fpos] = r or False
+ break
+ if isinstance(r, (browse_record_list, list)):
+ first = True
+ fields2 = map(lambda x: (x[:i+1]==f[:i+1] and x[i+1:]) \
+ or [], fields)
+ if fields2 in done:
+ if [x for x in fields2 if x]:
+ break
+ done.append(fields2)
+ for row2 in r:
+ lines2 = self.__export_row(cr, uid, row2, fields2,
+ context)
+ if first:
+ for fpos2 in range(len(fields)):
+ if lines2 and lines2[0][fpos2]:
+ data[fpos2] = lines2[0][fpos2]
+ if not data[fpos]:
+ dt = ''
+ for rr in r:
+ name_relation = self.pool.get(rr._table_name)._rec_name
+ if isinstance(rr[name_relation], browse_record):
+ rr = rr[name_relation]
+ rr_name = self.pool.get(rr._table_name).name_get(cr, uid, [rr.id], context=context)
+ rr_name = rr_name and rr_name[0] and rr_name[0][1] or ''
+ dt += tools.ustr(rr_name or '') + ','
+ data[fpos] = dt[:-1]
+ break
+ lines += lines2[1:]
+ first = False
+ else:
+ lines += lines2
+ break
+ i += 1
+ if i == len(f):
+ if isinstance(r, browse_record):
+ r = self.pool.get(r._table_name).name_get(cr, uid, [r.id], context=context)
+ r = r and r[0] and r[0][1] or ''
+ data[fpos] = tools.ustr(r or '')
+ return [data] + lines
+
+ def export_data(self, cr, uid, ids, fields_to_export, context=None):
+ """
+ Export fields for selected objects
+
+ :param cr: database cursor
+ :param uid: current user id
+ :param ids: list of ids
+ :param fields_to_export: list of fields
+ :param context: context arguments, like lang, time zone
+ :rtype: dictionary with a *datas* matrix
+
+ This method is used when exporting data via client menu
+
+ """
+ if context is None:
+ context = {}
+ cols = self._columns.copy()
+ for f in self._inherit_fields:
+ cols.update({f: self._inherit_fields[f][2]})
+ def fsplit(x):
+ if x=='.id': return [x]
+ return x.replace(':id','/id').replace('.id','/.id').split('/')
+ fields_to_export = map(fsplit, fields_to_export)
+ fields_export = fields_to_export + []
+ warning = ''
+ warning_fields = []
+ datas = []
+ for row in self.browse(cr, uid, ids, context):
+ datas += self.__export_row(cr, uid, row, fields_to_export, context)
+ return {'datas': datas}
+
+ def import_data(self, cr, uid, fields, datas, mode='init', current_module='', noupdate=False, context=None, filename=None):
+ """
+ Import given data in given module
+
+ :param cr: database cursor
+ :param uid: current user id
+ :param fields: list of fields
+ :param data: data to import
+ :param mode: 'init' or 'update' for record creation
+ :param current_module: module name
+ :param noupdate: flag for record creation
+ :param context: context arguments, like lang, time zone,
+ :param filename: optional file to store partial import state for recovery
+ :rtype: tuple
+
+ This method is used when importing data via client menu.
+
+ Example of fields to import for a sale.order::
+
+ .id, (=database_id)
+ partner_id, (=name_search)
+ order_line/.id, (=database_id)
+ order_line/name,
+ order_line/product_id/id, (=xml id)
+ order_line/price_unit,
+ order_line/product_uom_qty,
+ order_line/product_uom/id (=xml_id)
+ """
+ if not context:
+ context = {}
+ def _replace_field(x):
+ x = re.sub('([a-z0-9A-Z_])\\.id$', '\\1/.id', x)
+ return x.replace(':id','/id').split('/')
+ fields = map(_replace_field, fields)
+ logger = netsvc.Logger()
+ ir_model_data_obj = self.pool.get('ir.model.data')
+
+ # mode: id (XML id) or .id (database id) or False for name_get
+ def _get_id(model_name, id, current_module=False, mode='id'):
+ if mode=='.id':
+ id = int(id)
+ obj_model = self.pool.get(model_name)
+ ids = obj_model.search(cr, uid, [('id', '=', int(id))])
+ if not len(ids):
+ raise Exception(_("Database ID doesn't exist: %s : %s") %(model_name, id))
+ elif mode=='id':
+ if '.' in id:
+ module, xml_id = id.rsplit('.', 1)
+ else:
+ module, xml_id = current_module, id
+ record_id = ir_model_data_obj._get_id(cr, uid, module, xml_id)
+ ir_model_data = ir_model_data_obj.read(cr, uid, [record_id], ['res_id'])
+ if not ir_model_data:
+ raise ValueError('No references to %s.%s' % (module, xml_id))
+ id = ir_model_data[0]['res_id']
+ else:
+ obj_model = self.pool.get(model_name)
+ ids = obj_model.name_search(cr, uid, id, operator='=')
+ if not ids:
+ raise ValueError('No record found for %s' % (id,))
+ id = ids[0][0]
+ return id
+
+ # IN:
+ # datas: a list of records, each record is defined by a list of values
+ # prefix: a list of prefix fields ['line_ids']
+ # position: the line to process, skip is False if it's the first line of the current record
+ # OUT:
+ # (res, position, warning, res_id) with
+ # res: the record for the next line to process (including it's one2many)
+ # position: the new position for the next line
+ # res_id: the ID of the record if it's a modification
+ def process_liness(self, datas, prefix, current_module, model_name, fields_def, position=0, skip=0):
+ line = datas[position]
+ row = {}
+ warning = []
+ data_res_id = False
+ xml_id = False
+ nbrmax = position+1
+
+ done = {}
+ for i in range(len(fields)):
+ res = False
+ if not line[i]:
+ continue
+ if i >= len(line):
+ raise Exception(_('Please check that all your lines have %d columns.') % (len(fields),))
+
+ field = fields[i]
+ if field[:len(prefix)] <> prefix:
+ if line[i] and skip:
+ return False
+ continue
+
+ # ID of the record using a XML ID
+ if field[len(prefix)]=='id':
+ try:
+ data_res_id = _get_id(model_name, line[i], current_module, 'id')
+ except ValueError, e:
+ pass
+ xml_id = line[i]
+ continue
+
+ # ID of the record using a database ID
+ elif field[len(prefix)]=='.id':
+ data_res_id = _get_id(model_name, line[i], current_module, '.id')
+ continue
+
+ # recursive call for getting children and returning [(0,0,{})] or [(1,ID,{})]
+ if fields_def[field[len(prefix)]]['type']=='one2many':
+ if field[len(prefix)] in done:
+ continue
+ done[field[len(prefix)]] = True
+ relation_obj = self.pool.get(fields_def[field[len(prefix)]]['relation'])
+ newfd = relation_obj.fields_get( cr, uid, context=context )
+ pos = position
+ res = []
+ first = 0
+ while pos < len(datas):
+ res2 = process_liness(self, datas, prefix + [field[len(prefix)]], current_module, relation_obj._name, newfd, pos, first)
+ if not res2:
+ break
+ (newrow, pos, w2, data_res_id2, xml_id2) = res2
+ nbrmax = max(nbrmax, pos)
+ warning += w2
+ first += 1
+ if (not newrow) or not reduce(lambda x, y: x or y, newrow.values(), 0):
+ break
+ res.append( (data_res_id2 and 1 or 0, data_res_id2 or 0, newrow) )
+
+ elif fields_def[field[len(prefix)]]['type']=='many2one':
+ relation = fields_def[field[len(prefix)]]['relation']
+ if len(field) == len(prefix)+1:
+ mode = False
+ else:
+ mode = field[len(prefix)+1]
+ res = _get_id(relation, line[i], current_module, mode)
+
+ elif fields_def[field[len(prefix)]]['type']=='many2many':
+ relation = fields_def[field[len(prefix)]]['relation']
+ if len(field) == len(prefix)+1:
+ mode = False
+ else:
+ mode = field[len(prefix)+1]
+
+ # TODO: improve this by using csv.csv_reader
+ res = []
+ for db_id in line[i].split(config.get('csv_internal_sep')):
+ res.append( _get_id(relation, db_id, current_module, mode) )
+ res = [(6,0,res)]
+
+ elif fields_def[field[len(prefix)]]['type'] == 'integer':
+ res = line[i] and int(line[i]) or 0
+ elif fields_def[field[len(prefix)]]['type'] == 'boolean':
+ res = line[i].lower() not in ('0', 'false', 'off')
+ elif fields_def[field[len(prefix)]]['type'] == 'float':
+ res = line[i] and float(line[i]) or 0.0
+ elif fields_def[field[len(prefix)]]['type'] == 'selection':
+ for key, val in fields_def[field[len(prefix)]]['selection']:
+ if line[i] in [tools.ustr(key), tools.ustr(val)]:
+ res = key
+ break
+ if line[i] and not res:
+ logger.notifyChannel("import", netsvc.LOG_WARNING,
+ _("key '%s' not found in selection field '%s'") % \
+ (line[i], field[len(prefix)]))
+ warning += [_("Key/value '%s' not found in selection field '%s'") % (line[i], field[len(prefix)])]
+ else:
+ res = line[i]
+
+ row[field[len(prefix)]] = res or False
+
+ result = (row, nbrmax, warning, data_res_id, xml_id)
+ return result
+
+ fields_def = self.fields_get(cr, uid, context=context)
+
+ if config.get('import_partial', False) and filename:
+ data = pickle.load(file(config.get('import_partial')))
+ original_value = data.get(filename, 0)
+
+ position = 0
+ while position<len(datas):
+ res = {}
+
+ (res, position, warning, res_id, xml_id) = \
+ process_liness(self, datas, [], current_module, self._name, fields_def, position=position)
+ if len(warning):
+ cr.rollback()
+ return (-1, res, 'Line ' + str(position) +' : ' + '!\n'.join(warning), '')
+
+ try:
+ id = ir_model_data_obj._update(cr, uid, self._name,
+ current_module, res, mode=mode, xml_id=xml_id,
+ noupdate=noupdate, res_id=res_id, context=context)
+ except Exception, e:
+ return (-1, res, 'Line ' + str(position) +' : ' + str(e), '')
+
+ if config.get('import_partial', False) and filename and (not (position%100)):
+ data = pickle.load(file(config.get('import_partial')))
+ data[filename] = position
+ pickle.dump(data, file(config.get('import_partial'), 'wb'))
+ if context.get('defer_parent_store_computation'):
+ self._parent_store_compute(cr)
+ cr.commit()
+
+ if context.get('defer_parent_store_computation'):
+ self._parent_store_compute(cr)
+ return (position, 0, 0, 0)
+
+ def read(self, cr, user, ids, fields=None, context=None, load='_classic_read'):
+ """
+ Read records with given ids with the given fields
+
+ :param cr: database cursor
+ :param user: current user id
+ :param ids: id or list of the ids of the records to read
+ :param fields: optional list of field names to return (default: all fields would be returned)
+ :type fields: list (example ['field_name_1', ...])
+ :param context: optional context dictionary - it may contains keys for specifying certain options
+ like ``context_lang``, ``context_tz`` to alter the results of the call.
+ A special ``bin_size`` boolean flag may also be passed in the context to request the
+ value of all fields.binary columns to be returned as the size of the binary instead of its
+ contents. This can also be selectively overriden by passing a field-specific flag
+ in the form ``bin_size_XXX: True/False`` where ``XXX`` is the name of the field.
+ Note: The ``bin_size_XXX`` form is new in OpenERP v6.0.
+ :return: list of dictionaries((dictionary per record asked)) with requested field values
+ :rtype: [{‘name_of_the_field’: value, ...}, ...]
+ :raise AccessError: * if user has no read rights on the requested object
+ * if user tries to bypass access rules for read on the requested object
+
+ """
+ raise NotImplementedError(_('The read method is not implemented on this object !'))
+
+ def get_invalid_fields(self, cr, uid):
+ return list(self._invalids)
+
+ def _validate(self, cr, uid, ids, context=None):
+ context = context or {}
+ lng = context.get('lang', False) or 'en_US'
+ trans = self.pool.get('ir.translation')
+ error_msgs = []
+ for constraint in self._constraints:
+ fun, msg, fields = constraint
+ if not fun(self, cr, uid, ids):
+ # Check presence of __call__ directly instead of using
+ # callable() because it will be deprecated as of Python 3.0
+ if hasattr(msg, '__call__'):
+ tmp_msg = msg(self, cr, uid, ids, context=context)
+ if isinstance(tmp_msg, tuple):
+ tmp_msg, params = tmp_msg
+ translated_msg = tmp_msg % params
+ else:
+ translated_msg = tmp_msg
+ else:
+ translated_msg = trans._get_source(cr, uid, self._name, 'constraint', lng, source=msg) or msg
+ error_msgs.append(
+ _("Error occurred while validating the field(s) %s: %s") % (','.join(fields), translated_msg)
+ )
+ self._invalids.update(fields)
+ if error_msgs:
+ cr.rollback()
+ raise except_orm('ValidateError', '\n'.join(error_msgs))
+ else:
+ self._invalids.clear()
+
+ def default_get(self, cr, uid, fields_list, context=None):
+ """
+ Returns default values for the fields in fields_list.
+
+ :param fields_list: list of fields to get the default values for (example ['field1', 'field2',])
+ :type fields_list: list
+ :param context: optional context dictionary - it may contains keys for specifying certain options
+ like ``context_lang`` (language) or ``context_tz`` (timezone) to alter the results of the call.
+ It may contain keys in the form ``default_XXX`` (where XXX is a field name), to set
+ or override a default value for a field.
+ A special ``bin_size`` boolean flag may also be passed in the context to request the
+ value of all fields.binary columns to be returned as the size of the binary instead of its
+ contents. This can also be selectively overriden by passing a field-specific flag
+ in the form ``bin_size_XXX: True/False`` where ``XXX`` is the name of the field.
+ Note: The ``bin_size_XXX`` form is new in OpenERP v6.0.
+ :return: dictionary of the default values (set on the object model class, through user preferences, or in the context)
+ """
+ # trigger view init hook
+ self.view_init(cr, uid, fields_list, context)
+
+ if not context:
+ context = {}
+ defaults = {}
+
+ # get the default values for the inherited fields
+ for t in self._inherits.keys():
+ defaults.update(self.pool.get(t).default_get(cr, uid, fields_list,
+ context))
+
+ # get the default values defined in the object
+ for f in fields_list:
+ if f in self._defaults:
+ if callable(self._defaults[f]):
+ defaults[f] = self._defaults[f](self, cr, uid, context)
+ else:
+ defaults[f] = self._defaults[f]
+
+ fld_def = ((f in self._columns) and self._columns[f]) \
+ or ((f in self._inherit_fields) and self._inherit_fields[f][2]) \
+ or False
+
+ if isinstance(fld_def, fields.property):
+ property_obj = self.pool.get('ir.property')
+ prop_value = property_obj.get(cr, uid, f, self._name, context=context)
+ if prop_value:
+ if isinstance(prop_value, (browse_record, browse_null)):
+ defaults[f] = prop_value.id
+ else:
+ defaults[f] = prop_value
+ else:
+ if f not in defaults:
+ defaults[f] = False
+
+ # get the default values set by the user and override the default
+ # values defined in the object
+ ir_values_obj = self.pool.get('ir.values')
+ res = ir_values_obj.get(cr, uid, 'default', False, [self._name])
+ for id, field, field_value in res:
+ if field in fields_list:
+ fld_def = (field in self._columns) and self._columns[field] or self._inherit_fields[field][2]
+ if fld_def._type in ('many2one', 'one2one'):
+ obj = self.pool.get(fld_def._obj)
+ if not obj.search(cr, uid, [('id', '=', field_value or False)]):
+ continue
+ if fld_def._type in ('many2many'):
+ obj = self.pool.get(fld_def._obj)
+ field_value2 = []
+ for i in range(len(field_value)):
+ if not obj.search(cr, uid, [('id', '=',
+ field_value[i])]):
+ continue
+ field_value2.append(field_value[i])
+ field_value = field_value2
+ if fld_def._type in ('one2many'):
+ obj = self.pool.get(fld_def._obj)
+ field_value2 = []
+ for i in range(len(field_value)):
+ field_value2.append({})
+ for field2 in field_value[i]:
+ if field2 in obj._columns.keys() and obj._columns[field2]._type in ('many2one', 'one2one'):
+ obj2 = self.pool.get(obj._columns[field2]._obj)
+ if not obj2.search(cr, uid,
+ [('id', '=', field_value[i][field2])]):
+ continue
+ elif field2 in obj._inherit_fields.keys() and obj._inherit_fields[field2][2]._type in ('many2one', 'one2one'):
+ obj2 = self.pool.get(obj._inherit_fields[field2][2]._obj)
+ if not obj2.search(cr, uid,
+ [('id', '=', field_value[i][field2])]):
+ continue
+ # TODO add test for many2many and one2many
+ field_value2[i][field2] = field_value[i][field2]
+ field_value = field_value2
+ defaults[field] = field_value
+
+ # get the default values from the context
+ for key in context or {}:
+ if key.startswith('default_') and (key[8:] in fields_list):
+ defaults[key[8:]] = context[key]
+ return defaults
+
+
+ def perm_read(self, cr, user, ids, context=None, details=True):
+ raise NotImplementedError(_('The perm_read method is not implemented on this object !'))
+
+ def unlink(self, cr, uid, ids, context=None):
+ raise NotImplementedError(_('The unlink method is not implemented on this object !'))
+
+ def write(self, cr, user, ids, vals, context=None):
+ raise NotImplementedError(_('The write method is not implemented on this object !'))
+
+ def create(self, cr, user, vals, context=None):
+ raise NotImplementedError(_('The create method is not implemented on this object !'))
+
+ def fields_get_keys(self, cr, user, context=None):
+ res = self._columns.keys()
+ for parent in self._inherits:
+ res.extend(self.pool.get(parent).fields_get_keys(cr, user, context))
+ return res
+
+ # returns the definition of each field in the object
+ # the optional fields parameter can limit the result to some fields
+ def fields_get(self, cr, user, allfields=None, context=None, write_access=True):
+ if context is None:
+ context = {}
+ res = {}
+ translation_obj = self.pool.get('ir.translation')
+ for parent in self._inherits:
+ res.update(self.pool.get(parent).fields_get(cr, user, allfields, context))
+
+ if self._columns.keys():
+ for f in self._columns.keys():
+ field_col = self._columns[f]
+ if allfields and f not in allfields:
+ continue
+ res[f] = {'type': field_col._type}
+ # This additional attributes for M2M and function field is added
+ # because we need to display tooltip with this additional information
+ # when client is started in debug mode.
+ if isinstance(field_col, fields.function):
+ res[f]['function'] = field_col._fnct and field_col._fnct.func_name or False
+ res[f]['store'] = field_col.store
+ if isinstance(field_col.store, dict):
+ res[f]['store'] = str(field_col.store)
+ res[f]['fnct_search'] = field_col._fnct_search and field_col._fnct_search.func_name or False
+ res[f]['fnct_inv'] = field_col._fnct_inv and field_col._fnct_inv.func_name or False
+ res[f]['fnct_inv_arg'] = field_col._fnct_inv_arg or False
+ res[f]['func_obj'] = field_col._obj or False
+ res[f]['func_method'] = field_col._method
+ if isinstance(field_col, fields.many2many):
+ res[f]['related_columns'] = list((field_col._id1, field_col._id2))
+ res[f]['third_table'] = field_col._rel
+ for arg in ('string', 'readonly', 'states', 'size', 'required', 'group_operator',
+ 'change_default', 'translate', 'help', 'select', 'selectable'):
+ if getattr(field_col, arg):
+ res[f][arg] = getattr(field_col, arg)
+ if not write_access:
+ res[f]['readonly'] = True
+ res[f]['states'] = {}
+ for arg in ('digits', 'invisible', 'filters'):
+ if getattr(field_col, arg, None):
+ res[f][arg] = getattr(field_col, arg)
+
+ if field_col.string:
+ res_trans = translation_obj._get_source(cr, user, self._name + ',' + f, 'field', context.get('lang', False) or 'en_US')
+ if res_trans:
+ res[f]['string'] = res_trans
+ if field_col.help:
+ help_trans = translation_obj._get_source(cr, user, self._name + ',' + f, 'help', context.get('lang', False) or 'en_US')
+ if help_trans:
+ res[f]['help'] = help_trans
+
+ if hasattr(field_col, 'selection'):
+ if isinstance(field_col.selection, (tuple, list)):
+ sel = field_col.selection
+ # translate each selection option
+ sel2 = []
+ for (key, val) in sel:
+ val2 = None
+ if val:
+ val2 = translation_obj._get_source(cr, user, self._name + ',' + f, 'selection', context.get('lang', False) or 'en_US', val)
+ sel2.append((key, val2 or val))
+ sel = sel2
+ res[f]['selection'] = sel
+ else:
+ # call the 'dynamic selection' function
+ res[f]['selection'] = field_col.selection(self, cr, user, context)
+ if res[f]['type'] in ('one2many', 'many2many', 'many2one', 'one2one'):
+ res[f]['relation'] = field_col._obj
+ res[f]['domain'] = field_col._domain
+ res[f]['context'] = field_col._context
+ else:
+ #TODO : read the fields from the database
+ pass
+
+ if allfields:
+ # filter out fields which aren't in the fields list
+ for r in res.keys():
+ if r not in allfields:
+ del res[r]
+ return res
+
+ #
+ # Overload this method if you need a window title which depends on the context
+ #
+ def view_header_get(self, cr, user, view_id=None, view_type='form', context=None):
+ return False
+
+ def __view_look_dom(self, cr, user, node, view_id, context=None):
+ if not context:
+ context = {}
+ result = False
+ fields = {}
+ children = True
+
+ def encode(s):
+ if isinstance(s, unicode):
+ return s.encode('utf8')
+ return s
+
+ # return True if node can be displayed to current user
+ def check_group(node):
+ if node.get('groups'):
+ groups = node.get('groups').split(',')
+ access_pool = self.pool.get('ir.model.access')
+ can_see = any(access_pool.check_groups(cr, user, group) for group in groups)
+ if not can_see:
+ node.set('invisible', '1')
+ if 'attrs' in node.attrib:
+ del(node.attrib['attrs']) #avoid making field visible later
+ del(node.attrib['groups'])
+ return can_see
+ else:
+ return True
+
+ if node.tag in ('field', 'node', 'arrow'):
+ if node.get('object'):
+ attrs = {}
+ views = {}
+ xml = "<form>"
+ for f in node:
+ if f.tag in ('field'):
+ xml += etree.tostring(f, encoding="utf-8")
+ xml += "</form>"
+ new_xml = etree.fromstring(encode(xml))
+ ctx = context.copy()
+ ctx['base_model_name'] = self._name
+ xarch, xfields = self.pool.get(node.get('object')).__view_look_dom_arch(cr, user, new_xml, view_id, ctx)
+ views['form'] = {
+ 'arch': xarch,
+ 'fields': xfields
+ }
+ attrs = {'views': views}
+ fields = xfields
+ if node.get('name'):
+ attrs = {}
+ try:
+ if node.get('name') in self._columns:
+ column = self._columns[node.get('name')]
+ else:
+ column = self._inherit_fields[node.get('name')][2]
+ except Exception:
+ column = False
+
+ if column:
+ relation = self.pool.get(column._obj)
+
+ children = False
+ views = {}
+ for f in node:
+ if f.tag in ('form', 'tree', 'graph'):
+ node.remove(f)
+ ctx = context.copy()
+ ctx['base_model_name'] = self._name
+ xarch, xfields = relation.__view_look_dom_arch(cr, user, f, view_id, ctx)
+ views[str(f.tag)] = {
+ 'arch': xarch,
+ 'fields': xfields
+ }
+ attrs = {'views': views}
+ if node.get('widget') and node.get('widget') == 'selection':
+ # Prepare the cached selection list for the client. This needs to be
+ # done even when the field is invisible to the current user, because
+ # other events could need to change its value to any of the selectable ones
+ # (such as on_change events, refreshes, etc.)
+
+ # If domain and context are strings, we keep them for client-side, otherwise
+ # we evaluate them server-side to consider them when generating the list of
+ # possible values
+ # TODO: find a way to remove this hack, by allow dynamic domains
+ dom = []
+ if column._domain and not isinstance(column._domain, basestring):
+ dom = column._domain
+ dom += eval(node.get('domain', '[]'), {'uid': user, 'time': time})
+ search_context = dict(context)
+ if column._context and not isinstance(column._context, basestring):
+ search_context.update(column._context)
+ attrs['selection'] = relation._name_search(cr, user, '', dom, context=search_context, limit=None, name_get_uid=1)
+ if (node.get('required') and not int(node.get('required'))) or not column.required:
+ attrs['selection'].append((False, ''))
+ fields[node.get('name')] = attrs
+
+ elif node.tag in ('form', 'tree'):
+ result = self.view_header_get(cr, user, False, node.tag, context)
+ if result:
+ node.set('string', result)
+
+ elif node.tag == 'calendar':
+ for additional_field in ('date_start', 'date_delay', 'date_stop', 'color'):
+ if node.get(additional_field):
+ fields[node.get(additional_field)] = {}
+
+ if 'groups' in node.attrib:
+ check_group(node)
+
+ # translate view
+ if ('lang' in context) and not result:
+ if node.get('string'):
+ trans = self.pool.get('ir.translation')._get_source(cr, user, self._name, 'view', context['lang'], node.get('string'))
+ if trans == node.get('string') and ('base_model_name' in context):
+ # If translation is same as source, perhaps we'd have more luck with the alternative model name
+ # (in case we are in a mixed situation, such as an inherited view where parent_view.model != model
+ trans = self.pool.get('ir.translation')._get_source(cr, user, context['base_model_name'], 'view', context['lang'], node.get('string'))
+ if trans:
+ node.set('string', trans)
+ if node.get('confirm'):
+ trans = self.pool.get('ir.translation')._get_source(cr, user, self._name, 'view', context['lang'], node.get('confirm'))
+ if trans:
+ node.set('confirm', trans)
+ if node.get('sum'):
+ trans = self.pool.get('ir.translation')._get_source(cr, user, self._name, 'view', context['lang'], node.get('sum'))
+ if trans:
+ node.set('sum', trans)
+
+ for f in node:
+ if children or (node.tag == 'field' and f.tag in ('filter','separator')):
+ fields.update(self.__view_look_dom(cr, user, f, view_id, context))
+
+ return fields
+
+ def _disable_workflow_buttons(self, cr, user, node):
+ if user == 1:
+ # admin user can always activate workflow buttons
+ return node
+
+ # TODO handle the case of more than one workflow for a model or multiple
+ # transitions with different groups and same signal
+ usersobj = self.pool.get('res.users')
+ buttons = (n for n in node.getiterator('button') if n.get('type') != 'object')
+ for button in buttons:
+ user_groups = usersobj.read(cr, user, [user], ['groups_id'])[0]['groups_id']
+ cr.execute("""SELECT DISTINCT t.group_id
+ FROM wkf
+ INNER JOIN wkf_activity a ON a.wkf_id = wkf.id
+ INNER JOIN wkf_transition t ON (t.act_to = a.id)
+ WHERE wkf.osv = %s
+ AND t.signal = %s
+ AND t.group_id is NOT NULL
+ """, (self._name, button.get('name')))
+ group_ids = [x[0] for x in cr.fetchall() if x[0]]
+ can_click = not group_ids or bool(set(user_groups).intersection(group_ids))
+ button.set('readonly', str(int(not can_click)))
+ return node
+
+ def __view_look_dom_arch(self, cr, user, node, view_id, context=None):
+ fields_def = self.__view_look_dom(cr, user, node, view_id, context=context)
+ node = self._disable_workflow_buttons(cr, user, node)
+ arch = etree.tostring(node, encoding="utf-8").replace('\t', '')
+ fields = {}
+ if node.tag == 'diagram':
+ if node.getchildren()[0].tag == 'node':
+ node_fields = self.pool.get(node.getchildren()[0].get('object')).fields_get(cr, user, fields_def.keys(), context)
+ if node.getchildren()[1].tag == 'arrow':
+ arrow_fields = self.pool.get(node.getchildren()[1].get('object')).fields_get(cr, user, fields_def.keys(), context)
+ for key, value in node_fields.items():
+ fields[key] = value
+ for key, value in arrow_fields.items():
+ fields[key] = value
+ else:
+ fields = self.fields_get(cr, user, fields_def.keys(), context)
+ for field in fields_def:
+ if field == 'id':
+ # sometime, the view may contain the (invisible) field 'id' needed for a domain (when 2 objects have cross references)
+ fields['id'] = {'readonly': True, 'type': 'integer', 'string': 'ID'}
+ elif field in fields:
+ fields[field].update(fields_def[field])
+ else:
+ cr.execute('select name, model from ir_ui_view where (id=%s or inherit_id=%s) and arch like %s', (view_id, view_id, '%%%s%%' % field))
+ res = cr.fetchall()[:]
+ model = res[0][1]
+ res.insert(0, ("Can't find field '%s' in the following view parts composing the view of object model '%s':" % (field, model), None))
+ msg = "\n * ".join([r[0] for r in res])
+ msg += "\n\nEither you wrongly customized this view, or some modules bringing those views are not compatible with your current data model"
+ netsvc.Logger().notifyChannel('orm', netsvc.LOG_ERROR, msg)
+ raise except_orm('View error', msg)
+ return arch, fields
+
+ def __get_default_calendar_view(self):
+ """Generate a default calendar view (For internal use only).
+ """
+
+ arch = ('<?xml version="1.0" encoding="utf-8"?>\n'
+ '<calendar string="%s"') % (self._description)
+
+ if (self._date_name not in self._columns):
+ date_found = False
+ for dt in ['date', 'date_start', 'x_date', 'x_date_start']:
+ if dt in self._columns:
+ self._date_name = dt
+ date_found = True
+ break
+
+ if not date_found:
+ raise except_orm(_('Invalid Object Architecture!'), _("Insufficient fields for Calendar View!"))
+
+ if self._date_name:
+ arch += ' date_start="%s"' % (self._date_name)
+
+ for color in ["user_id", "partner_id", "x_user_id", "x_partner_id"]:
+ if color in self._columns:
+ arch += ' color="' + color + '"'
+ break
+
+ dt_stop_flag = False
+
+ for dt_stop in ["date_stop", "date_end", "x_date_stop", "x_date_end"]:
+ if dt_stop in self._columns:
+ arch += ' date_stop="' + dt_stop + '"'
+ dt_stop_flag = True
+ break
+
+ if not dt_stop_flag:
+ for dt_delay in ["date_delay", "planned_hours", "x_date_delay", "x_planned_hours"]:
+ if dt_delay in self._columns:
+ arch += ' date_delay="' + dt_delay + '"'
+ break
+
+ arch += ('>\n'
+ ' <field name="%s"/>\n'
+ '</calendar>') % (self._rec_name)
+
+ return arch
+
+ def __get_default_search_view(self, cr, uid, context=None):
+ form_view = self.fields_view_get(cr, uid, False, 'form', context=context)
+ tree_view = self.fields_view_get(cr, uid, False, 'tree', context=context)
+
+ fields_to_search = set()
+ fields = self.fields_get(cr, uid, context=context)
+ for field in fields:
+ if fields[field].get('select'):
+ fields_to_search.add(field)
+ for view in (form_view, tree_view):
+ view_root = etree.fromstring(view['arch'])
+ # Only care about select=1 in xpath below, because select=2 is covered
+ # by the custom advanced search in clients
+ fields_to_search = fields_to_search.union(view_root.xpath("//field[@select=1]/@name"))
+
+ tree_view_root = view_root # as provided by loop above
+ search_view = etree.Element("search", attrib={'string': tree_view_root.get("string", "")})
+ field_group = etree.Element("group")
+ search_view.append(field_group)
+
+ for field_name in fields_to_search:
+ field_group.append(etree.Element("field", attrib={'name': field_name}))
+
+ return etree.tostring(search_view, encoding="utf-8").replace('\t', '')
+
+ #
+ # if view_id, view_type is not required
+ #
+ def fields_view_get(self, cr, user, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
+ """
+ Get the detailed composition of the requested view like fields, model, view architecture
+
+ :param cr: database cursor
+ :param user: current user id
+ :param view_id: id of the view or None
+ :param view_type: type of the view to return if view_id is None ('form', tree', ...)
+ :param context: context arguments, like lang, time zone
+ :param toolbar: true to include contextual actions
+ :param submenu: example (portal_project module)
+ :return: dictionary describing the composition of the requested view (including inherited views and extensions)
+ :raise AttributeError:
+ * if the inherited view has unknown position to work with other than 'before', 'after', 'inside', 'replace'
+ * if some tag other than 'position' is found in parent view
+ :raise Invalid ArchitectureError: if there is view type other than form, tree, calendar, search etc defined on the structure
+
+ """
+ if not context:
+ context = {}
+
+ def encode(s):
+ if isinstance(s, unicode):
+ return s.encode('utf8')
+ return s
+
+ def raise_view_error(error_msg, child_view_id):
+ view, child_view = self.pool.get('ir.ui.view').browse(cr, user, [view_id, child_view_id], context)
+ raise AttributeError(("View definition error for inherited view '%(xml_id)s' on '%(model)s' model: " + error_msg)
+ % { 'xml_id': child_view.xml_id,
+ 'parent_xml_id': view.xml_id,
+ 'model': self._name, })
+
+ def _inherit_apply(src, inherit, inherit_id=None):
+ def _find(node, node2):
+ if node2.tag == 'xpath':
+ res = node.xpath(node2.get('expr'))
+ if res:
+ return res[0]
+ else:
+ return None
+ else:
+ for n in node.getiterator(node2.tag):
+ res = True
+ if node2.tag == 'field':
+ # only compare field names, a field can be only once in a given view
+ # at a given level (and for multilevel expressions, we should use xpath
+ # inheritance spec anyway)
+ if node2.get('name') == n.get('name'):
+ return n
+ else:
+ continue
+ for attr in node2.attrib:
+ if attr == 'position':
+ continue
+ if n.get(attr):
+ if n.get(attr) == node2.get(attr):
+ continue
+ res = False
+ if res:
+ return n
+ return None
+
+ # End: _find(node, node2)
+
+ doc_dest = etree.fromstring(encode(inherit))
+ toparse = [doc_dest]
+
+ while len(toparse):
+ node2 = toparse.pop(0)
+ if isinstance(node2, SKIPPED_ELEMENT_TYPES):
+ continue
+ if node2.tag == 'data':
+ toparse += [ c for c in doc_dest ]
+ continue
+ node = _find(src, node2)
+ if node is not None:
+ pos = 'inside'
+ if node2.get('position'):
+ pos = node2.get('position')
+ if pos == 'replace':
+ parent = node.getparent()
+ if parent is None:
+ src = copy.deepcopy(node2[0])
+ else:
+ for child in node2:
+ node.addprevious(child)
+ node.getparent().remove(node)
+ elif pos == 'attributes':
+ for child in node2.getiterator('attribute'):
+ attribute = (child.get('name'), child.text and child.text.encode('utf8') or None)
+ if attribute[1]:
+ node.set(attribute[0], attribute[1])
+ else:
+ del(node.attrib[attribute[0]])
+ else:
+ sib = node.getnext()
+ for child in node2:
+ if pos == 'inside':
+ node.append(child)
+ elif pos == 'after':
+ if sib is None:
+ node.addnext(child)
+ node = child
+ else:
+ sib.addprevious(child)
+ elif pos == 'before':
+ node.addprevious(child)
+ else:
+ raise_view_error("Invalid position value: '%s'" % pos, inherit_id)
+ else:
+ attrs = ''.join([
+ ' %s="%s"' % (attr, node2.get(attr))
+ for attr in node2.attrib
+ if attr != 'position'
+ ])
+ tag = "<%s%s>" % (node2.tag, attrs)
+ raise_view_error("Element '%s' not found in parent view '%%(parent_xml_id)s'" % tag, inherit_id)
+ return src
+ # End: _inherit_apply(src, inherit)
+
+ result = {'type': view_type, 'model': self._name}
+
+ ok = True
+ model = True
+ sql_res = False
+ parent_view_model = None
+ while ok:
+ view_ref = context.get(view_type + '_view_ref', False)
+ if view_ref and not view_id:
+ if '.' in view_ref:
+ module, view_ref = view_ref.split('.', 1)
+ cr.execute("SELECT res_id FROM ir_model_data WHERE model='ir.ui.view' AND module=%s AND name=%s", (module, view_ref))
+ view_ref_res = cr.fetchone()
+ if view_ref_res:
+ view_id = view_ref_res[0]
+
+ if view_id:
+ query = "SELECT arch,name,field_parent,id,type,inherit_id,model FROM ir_ui_view WHERE id=%s"
+ params = (view_id,)
+ if model:
+ query += " AND model=%s"
+ params += (self._name,)
+ cr.execute(query, params)
+ else:
+ cr.execute('''SELECT
+ arch,name,field_parent,id,type,inherit_id,model
+ FROM
+ ir_ui_view
+ WHERE
+ model=%s AND
+ type=%s AND
+ inherit_id IS NULL
+ ORDER BY priority''', (self._name, view_type))
+ sql_res = cr.fetchone()
+
+ if not sql_res:
+ break
+
+ ok = sql_res[5]
+ view_id = ok or sql_res[3]
+ model = False
+ parent_view_model = sql_res[6]
+
+ # if a view was found
+ if sql_res:
+ result['type'] = sql_res[4]
+ result['view_id'] = sql_res[3]
+ result['arch'] = sql_res[0]
+
+ def _inherit_apply_rec(result, inherit_id):
+ # get all views which inherit from (ie modify) this view
+ cr.execute('select arch,id from ir_ui_view where inherit_id=%s and model=%s order by priority', (inherit_id, self._name))
+ sql_inherit = cr.fetchall()
+ for (inherit, id) in sql_inherit:
+ result = _inherit_apply(result, inherit, id)
+ result = _inherit_apply_rec(result, id)
+ return result
+
+ inherit_result = etree.fromstring(encode(result['arch']))
+ result['arch'] = _inherit_apply_rec(inherit_result, sql_res[3])
+
+ result['name'] = sql_res[1]
+ result['field_parent'] = sql_res[2] or False
+ else:
+
+ # otherwise, build some kind of default view
+ if view_type == 'form':
+ res = self.fields_get(cr, user, context=context)
+ xml = '<?xml version="1.0" encoding="utf-8"?> ' \
+ '<form string="%s">' % (self._description,)
+ for x in res:
+ if res[x]['type'] not in ('one2many', 'many2many'):
+ xml += '<field name="%s"/>' % (x,)
+ if res[x]['type'] == 'text':
+ xml += "<newline/>"
+ xml += "</form>"
+
+ elif view_type == 'tree':
+ _rec_name = self._rec_name
+ if _rec_name not in self._columns:
+ _rec_name = self._columns.keys()[0]
+ xml = '<?xml version="1.0" encoding="utf-8"?>' \
+ '<tree string="%s"><field name="%s"/></tree>' \
+ % (self._description, self._rec_name)
+
+ elif view_type == 'calendar':
+ xml = self.__get_default_calendar_view()
+
+ elif view_type == 'search':
+ xml = self.__get_default_search_view(cr, user, context)
+
+ else:
+ xml = '<?xml version="1.0"?>' # what happens here, graph case?
+ raise except_orm(_('Invalid Architecture!'), _("There is no view of type '%s' defined for the structure!") % view_type)
+ result['arch'] = etree.fromstring(encode(xml))
+ result['name'] = 'default'
+ result['field_parent'] = False
+ result['view_id'] = 0
+
+ if parent_view_model != self._name:
+ ctx = context.copy()
+ ctx['base_model_name'] = parent_view_model
+ else:
+ ctx = context
+ xarch, xfields = self.__view_look_dom_arch(cr, user, result['arch'], view_id, context=ctx)
+ result['arch'] = xarch
+ result['fields'] = xfields
+
+ if submenu:
+ if context and context.get('active_id', False):
+ data_menu = self.pool.get('ir.ui.menu').browse(cr, user, context['active_id'], context).action
+ if data_menu:
+ act_id = data_menu.id
+ if act_id:
+ data_action = self.pool.get('ir.actions.act_window').browse(cr, user, [act_id], context)[0]
+ result['submenu'] = getattr(data_action, 'menus', False)
+ if toolbar:
+ def clean(x):
+ x = x[2]
+ for key in ('report_sxw_content', 'report_rml_content',
+ 'report_sxw', 'report_rml',
+ 'report_sxw_content_data', 'report_rml_content_data'):
+ if key in x:
+ del x[key]
+ return x
+ ir_values_obj = self.pool.get('ir.values')
+ resprint = ir_values_obj.get(cr, user, 'action',
+ 'client_print_multi', [(self._name, False)], False,
+ context)
+ resaction = ir_values_obj.get(cr, user, 'action',
+ 'client_action_multi', [(self._name, False)], False,
+ context)
+
+ resrelate = ir_values_obj.get(cr, user, 'action',
+ 'client_action_relate', [(self._name, False)], False,
+ context)
+ resprint = map(clean, resprint)
+ resaction = map(clean, resaction)
+ resaction = filter(lambda x: not x.get('multi', False), resaction)
+ resprint = filter(lambda x: not x.get('multi', False), resprint)
+ resrelate = map(lambda x: x[2], resrelate)
+
+ for x in resprint + resaction + resrelate:
+ x['string'] = x['name']
+
+ result['toolbar'] = {
+ 'print': resprint,
+ 'action': resaction,
+ 'relate': resrelate
+ }
+ return result
+
+ _view_look_dom_arch = __view_look_dom_arch
+
+ def search_count(self, cr, user, args, context=None):
+ if not context:
+ context = {}
+ res = self.search(cr, user, args, context=context, count=True)
+ if isinstance(res, list):
+ return len(res)
+ return res
+
+ def search(self, cr, user, args, offset=0, limit=None, order=None, context=None, count=False):
+ """
+ Search for records based on a search domain.
+
+ :param cr: database cursor
+ :param user: current user id
+ :param args: list of tuples specifying the search domain [('field_name', 'operator', value), ...]. Pass an empty list to match all records.
+ :param offset: optional number of results to skip in the returned values (default: 0)
+ :param limit: optional max number of records to return (default: **None**)
+ :param order: optional columns to sort by (default: self._order=id )
+ :param context: optional context arguments, like lang, time zone
+ :type context: dictionary
+ :param count: optional (default: **False**), if **True**, returns only the number of records matching the criteria, not their ids
+ :return: id or list of ids of records matching the criteria
+ :rtype: integer or list of integers
+ :raise AccessError: * if user tries to bypass access rules for read on the requested object.
+
+ **Expressing a search domain (args)**
+
+ Each tuple in the search domain needs to have 3 elements, in the form: **('field_name', 'operator', value)**, where:
+
+ * **field_name** must be a valid name of field of the object model, possibly following many-to-one relationships using dot-notation, e.g 'street' or 'partner_id.country' are valid values.
+ * **operator** must be a string with a valid comparison operator from this list: ``=, !=, >, >=, <, <=, like, ilike, in, not in, child_of, parent_left, parent_right``
+ The semantics of most of these operators are obvious.
+ The ``child_of`` operator will look for records who are children or grand-children of a given record,
+ according to the semantics of this model (i.e following the relationship field named by
+ ``self._parent_name``, by default ``parent_id``.
+ * **value** must be a valid value to compare with the values of **field_name**, depending on its type.
+
+ Domain criteria can be combined using 3 logical operators than can be added between tuples: '**&**' (logical AND, default), '**|**' (logical OR), '**!**' (logical NOT).
+ These are **prefix** operators and the arity of the '**&**' and '**|**' operator is 2, while the arity of the '**!**' is just 1.
+ Be very careful about this when you combine them the first time.
+
+ Here is an example of searching for Partners named *ABC* from Belgium and Germany whose language is not english ::
+
+ [('name','=','ABC'),'!',('language.code','=','en_US'),'|',('country_id.code','=','be'),('country_id.code','=','de'))
+
+ The '&' is omitted as it is the default, and of course we could have used '!=' for the language, but what this domain really represents is::
+
+ (name is 'ABC' AND (language is NOT english) AND (country is Belgium OR Germany))
+
+ """
+ return self._search(cr, user, args, offset=offset, limit=limit, order=order, context=context, count=count)
+
+ def _search(self, cr, user, args, offset=0, limit=None, order=None, context=None, count=False, access_rights_uid=None):
+ """
+ Private implementation of search() method, allowing specifying the uid to use for the access right check.
+ This is useful for example when filling in the selection list for a drop-down and avoiding access rights errors,
+ by specifying ``access_rights_uid=1`` to bypass access rights check, but not ir.rules!
+
+ :param access_rights_uid: optional user ID to use when checking access rights
+ (not for ir.rules, this is only for ir.model.access)
+ """
+ raise NotImplementedError(_('The search method is not implemented on this object !'))
+
+ def name_get(self, cr, user, ids, context=None):
+ """
+
+ :param cr: database cursor
+ :param user: current user id
+ :type user: integer
+ :param ids: list of ids
+ :param context: context arguments, like lang, time zone
+ :type context: dictionary
+ :return: tuples with the text representation of requested objects for to-many relationships
+
+ """
+ if not context:
+ context = {}
+ if not ids:
+ return []
+ if isinstance(ids, (int, long)):
+ ids = [ids]
+ return [(r['id'], tools.ustr(r[self._rec_name])) for r in self.read(cr, user, ids,
+ [self._rec_name], context, load='_classic_write')]
+
+ def name_search(self, cr, user, name='', args=None, operator='ilike', context=None, limit=100):
+ """
+ Search for records and their display names according to a search domain.
+
+ :param cr: database cursor
+ :param user: current user id
+ :param name: object name to search
+ :param args: list of tuples specifying search criteria [('field_name', 'operator', 'value'), ...]
+ :param operator: operator for search criterion
+ :param context: context arguments, like lang, time zone
+ :type context: dictionary
+ :param limit: optional max number of records to return
+ :return: list of object names matching the search criteria, used to provide completion for to-many relationships
+
+ This method is equivalent of :py:meth:`~osv.osv.osv.search` on **name** + :py:meth:`~osv.osv.osv.name_get` on the result.
+ See :py:meth:`~osv.osv.osv.search` for an explanation of the possible values for the search domain specified in **args**.
+
+ """
+ return self._name_search(cr, user, name, args, operator, context, limit)
+
+ # private implementation of name_search, allows passing a dedicated user for the name_get part to
+ # solve some access rights issues
+ def _name_search(self, cr, user, name='', args=None, operator='ilike', context=None, limit=100, name_get_uid=None):
+ if args is None:
+ args = []
+ if context is None:
+ context = {}
+ args = args[:]
+ if name:
+ args += [(self._rec_name, operator, name)]
+ access_rights_uid = name_get_uid or user
+ ids = self._search(cr, user, args, limit=limit, context=context, access_rights_uid=access_rights_uid)
+ res = self.name_get(cr, access_rights_uid, ids, context)
+ return res
+
+ def copy(self, cr, uid, id, default=None, context=None):
+ raise NotImplementedError(_('The copy method is not implemented on this object !'))
+
+ def exists(self, cr, uid, id, context=None):
+ raise NotImplementedError(_('The exists method is not implemented on this object !'))
+
+ def read_string(self, cr, uid, id, langs, fields=None, context=None):
+ res = {}
+ res2 = {}
+ self.pool.get('ir.model.access').check(cr, uid, 'ir.translation', 'read', context=context)
+ if not fields:
+ fields = self._columns.keys() + self._inherit_fields.keys()
+ #FIXME: collect all calls to _get_source into one SQL call.
+ for lang in langs:
+ res[lang] = {'code': lang}
+ for f in fields:
+ if f in self._columns:
+ res_trans = self.pool.get('ir.translation')._get_source(cr, uid, self._name+','+f, 'field', lang)
+ if res_trans:
+ res[lang][f] = res_trans
+ else:
+ res[lang][f] = self._columns[f].string
+ for table in self._inherits:
+ cols = intersect(self._inherit_fields.keys(), fields)
+ res2 = self.pool.get(table).read_string(cr, uid, id, langs, cols, context)
+ for lang in res2:
+ if lang in res:
+ res[lang]['code'] = lang
+ for f in res2[lang]:
+ res[lang][f] = res2[lang][f]
+ return res
+
+ def write_string(self, cr, uid, id, langs, vals, context=None):
+ self.pool.get('ir.model.access').check(cr, uid, 'ir.translation', 'write', context=context)
+ #FIXME: try to only call the translation in one SQL
+ for lang in langs:
+ for field in vals:
+ if field in self._columns:
+ src = self._columns[field].string
+ self.pool.get('ir.translation')._set_ids(cr, uid, self._name+','+field, 'field', lang, [0], vals[field], src)
+ for table in self._inherits:
+ cols = intersect(self._inherit_fields.keys(), vals)
+ if cols:
+ self.pool.get(table).write_string(cr, uid, id, langs, vals, context)
+ return True
+
+ def _check_removed_columns(self, cr, log=False):
+ raise NotImplementedError()
+
+ def _add_missing_default_values(self, cr, uid, values, context=None):
+ missing_defaults = []
+ avoid_tables = [] # avoid overriding inherited values when parent is set
+ for tables, parent_field in self._inherits.items():
+ if parent_field in values:
+ avoid_tables.append(tables)
+ for field in self._columns.keys():
+ if not field in values:
+ missing_defaults.append(field)
+ for field in self._inherit_fields.keys():
+ if (field not in values) and (self._inherit_fields[field][0] not in avoid_tables):
+ missing_defaults.append(field)
+
+ if len(missing_defaults):
+ # override defaults with the provided values, never allow the other way around
+ defaults = self.default_get(cr, uid, missing_defaults, context)
+ for dv in defaults:
+ if ((dv in self._columns and self._columns[dv]._type == 'many2many') \
+ or (dv in self._inherit_fields and self._inherit_fields[dv][2]._type == 'many2many')) \
+ and defaults[dv] and isinstance(defaults[dv][0], (int, long)):
+ defaults[dv] = [(6, 0, defaults[dv])]
+ if (dv in self._columns and self._columns[dv]._type == 'one2many' \
+ or (dv in self._inherit_fields and self._inherit_fields[dv][2]._type == 'one2many')) \
+ and isinstance(defaults[dv], (list, tuple)) and isinstance(defaults[dv][0], dict):
+ defaults[dv] = [(0, 0, x) for x in defaults[dv]]
+ defaults.update(values)
+ values = defaults
+ return values
+
+ class orm_memory(orm_template):
+
+ _protected = ['read', 'write', 'create', 'default_get', 'perm_read', 'unlink', 'fields_get', 'fields_view_get', 'search', 'name_get', 'distinct_field_get', 'name_search', 'copy', 'import_data', 'search_count', 'exists']
+ _inherit_fields = {}
+ _max_count = 200
+ _max_hours = 1
+ _check_time = 20
+
+ def __init__(self, cr):
+ super(orm_memory, self).__init__(cr)
+ self.datas = {}
+ self.next_id = 0
+ self.check_id = 0
+ cr.execute('delete from wkf_instance where res_type=%s', (self._name,))
+
+ def _check_access(self, uid, object_id, mode):
+ if uid != 1 and self.datas[object_id]['internal.create_uid'] != uid:
+ raise except_orm(_('AccessError'), '%s access is only allowed on your own records for osv_memory objects except for the super-user' % mode.capitalize())
+
+ def vaccum(self, cr, uid):
+ self.check_id += 1
+ if self.check_id % self._check_time:
+ return True
+ tounlink = []
+ max = time.time() - self._max_hours * 60 * 60
+ for id in self.datas:
+ if self.datas[id]['internal.date_access'] < max:
+ tounlink.append(id)
+ self.unlink(cr, 1, tounlink)
+ if len(self.datas) > self._max_count:
+ sorted = map(lambda x: (x[1]['internal.date_access'], x[0]), self.datas.items())
+ sorted.sort()
+ ids = map(lambda x: x[1], sorted[:len(self.datas)-self._max_count])
+ self.unlink(cr, uid, ids)
+ return True
+
+ def read(self, cr, user, ids, fields_to_read=None, context=None, load='_classic_read'):
+ if not context:
+ context = {}
+ if not fields_to_read:
+ fields_to_read = self._columns.keys()
+ result = []
+ if self.datas:
+ ids_orig = ids
+ if isinstance(ids, (int, long)):
+ ids = [ids]
+ for id in ids:
+ r = {'id': id}
+ for f in fields_to_read:
+ record = self.datas.get(id)
+ if record:
+ self._check_access(user, id, 'read')
+ r[f] = record.get(f, False)
+ if r[f] and isinstance(self._columns[f], fields.binary) and context.get('bin_size', False):
+ r[f] = len(r[f])
+ result.append(r)
+ if id in self.datas:
+ self.datas[id]['internal.date_access'] = time.time()
+ fields_post = filter(lambda x: x in self._columns and not getattr(self._columns[x], load), fields_to_read)
+ for f in fields_post:
+ res2 = self._columns[f].get_memory(cr, self, ids, f, user, context=context, values=result)
+ for record in result:
+ record[f] = res2[record['id']]
+ if isinstance(ids_orig, (int, long)):
+ return result[0]
+ return result
+
+ def write(self, cr, user, ids, vals, context=None):
+ if not ids:
+ return True
+ vals2 = {}
+ upd_todo = []
+ for field in vals:
+ if self._columns[field]._classic_write:
+ vals2[field] = vals[field]
+ else:
+ upd_todo.append(field)
+ for object_id in ids:
+ self._check_access(user, object_id, mode='write')
+ self.datas[object_id].update(vals2)
+ self.datas[object_id]['internal.date_access'] = time.time()
+ for field in upd_todo:
+ self._columns[field].set_memory(cr, self, object_id, field, vals[field], user, context)
+ self._validate(cr, user, [object_id], context)
+ wf_service = netsvc.LocalService("workflow")
+ wf_service.trg_write(user, self._name, object_id, cr)
+ return object_id
+
+ def create(self, cr, user, vals, context=None):
+ self.vaccum(cr, user)
+ self.next_id += 1
+ id_new = self.next_id
+
+ vals = self._add_missing_default_values(cr, user, vals, context)
+
+ vals2 = {}
+ upd_todo = []
+ for field in vals:
+ if self._columns[field]._classic_write:
+ vals2[field] = vals[field]
+ else:
+ upd_todo.append(field)
+ self.datas[id_new] = vals2
+ self.datas[id_new]['internal.date_access'] = time.time()
+ self.datas[id_new]['internal.create_uid'] = user
+
+ for field in upd_todo:
+ self._columns[field].set_memory(cr, self, id_new, field, vals[field], user, context)
+ self._validate(cr, user, [id_new], context)
+ if self._log_create and not (context and context.get('no_store_function', False)):
+ message = self._description + \
+ " '" + \
+ self.name_get(cr, user, [id_new], context=context)[0][1] + \
+ "' "+ _("created.")
+ self.log(cr, user, id_new, message, True, context=context)
+ wf_service = netsvc.LocalService("workflow")
+ wf_service.trg_create(user, self._name, id_new, cr)
+ return id_new
+
+ def _where_calc(self, cr, user, args, active_test=True, context=None):
+ if not context:
+ context = {}
+ args = args[:]
+ res = []
+ # if the object has a field named 'active', filter out all inactive
+ # records unless they were explicitely asked for
+ if 'active' in self._columns and (active_test and context.get('active_test', True)):
+ if args:
+ active_in_args = False
+ for a in args:
+ if a[0] == 'active':
+ active_in_args = True
+ if not active_in_args:
+ args.insert(0, ('active', '=', 1))
+ else:
+ args = [('active', '=', 1)]
+ if args:
+ import expression
+ e = expression.expression(args)
+ e.parse(cr, user, self, context)
+ res = e.exp
+ return res or []
+
+ def _search(self, cr, user, args, offset=0, limit=None, order=None, context=None, count=False, access_rights_uid=None):
+ if not context:
+ context = {}
+
+ # implicit filter on current user except for superuser
+ if user != 1:
+ if not args:
+ args = []
+ args.insert(0, ('internal.create_uid', '=', user))
+
+ result = self._where_calc(cr, user, args, context=context)
+ if result == []:
+ return self.datas.keys()
+
+ res = []
+ counter = 0
+ #Find the value of dict
+ f = False
+ if result:
+ for id, data in self.datas.items():
+ counter = counter + 1
+ data['id'] = id
+ if limit and (counter > int(limit)):
+ break
+ f = True
+ for arg in result:
+ if arg[1] == '=':
+ val = eval('data[arg[0]]'+'==' +' arg[2]', locals())
+ elif arg[1] in ['<', '>', 'in', 'not in', '<=', '>=', '<>']:
+ val = eval('data[arg[0]]'+arg[1] +' arg[2]', locals())
+ elif arg[1] in ['ilike']:
+ val = (str(data[arg[0]]).find(str(arg[2]))!=-1)
+
+ f = f and val
+
+ if f:
+ res.append(id)
+ if count:
+ return len(res)
+ return res or []
+
+ def unlink(self, cr, uid, ids, context=None):
+ for id in ids:
+ self._check_access(uid, id, 'unlink')
+ self.datas.pop(id, None)
+ if len(ids):
+ cr.execute('delete from wkf_instance where res_type=%s and res_id IN %s', (self._name, tuple(ids)))
+ return True
+
+ def perm_read(self, cr, user, ids, context=None, details=True):
+ result = []
+ credentials = self.pool.get('res.users').name_get(cr, user, [user])[0]
+ create_date = time.strftime('%Y-%m-%d %H:%M:%S')
+ for id in ids:
+ self._check_access(user, id, 'read')
+ result.append({
+ 'create_uid': credentials,
+ 'create_date': create_date,
+ 'write_uid': False,
+ 'write_date': False,
+ 'id': id,
+ 'xmlid' : False,
+ })
+ return result
+
+ def _check_removed_columns(self, cr, log=False):
+ # nothing to check in memory...
+ pass
+
+ def exists(self, cr, uid, id, context=None):
+ return id in self.datas
+
+ class orm(orm_template):
+ _sql_constraints = []
+ _table = None
+ _protected = ['read', 'write', 'create', 'default_get', 'perm_read', 'unlink', 'fields_get', 'fields_view_get', 'search', 'name_get', 'distinct_field_get', 'name_search', 'copy', 'import_data', 'search_count', 'exists']
+ __logger = logging.getLogger('orm')
+ __schema = logging.getLogger('orm.schema')
+ def read_group(self, cr, uid, domain, fields, groupby, offset=0, limit=None, context=None, orderby=False):
+ """
+ Get the list of records in list view grouped by the given ``groupby`` fields
+
+ :param cr: database cursor
+ :param uid: current user id
+ :param domain: list specifying search criteria [['field_name', 'operator', 'value'], ...]
+ :param fields: list of fields present in the list view specified on the object
+ :param groupby: list of fields on which to groupby the records
+ :type fields_list: list (example ['field_name_1', ...])
+ :param offset: optional number of records to skip
+ :param limit: optional max number of records to return
+ :param context: context arguments, like lang, time zone
+ :param order: optional ``order by`` specification, for overriding the natural
+ sort ordering of the groups, see also :py:meth:`~osv.osv.osv.search`
+ (supported only for many2one fields currently)
+ :return: list of dictionaries(one dictionary for each record) containing:
+
+ * the values of fields grouped by the fields in ``groupby`` argument
+ * __domain: list of tuples specifying the search criteria
+ * __context: dictionary with argument like ``groupby``
+ :rtype: [{'field_name_1': value, ...]
+ :raise AccessError: * if user has no read rights on the requested object
+ * if user tries to bypass access rules for read on the requested object
+
+ """
+ context = context or {}
+ self.pool.get('ir.model.access').check(cr, uid, self._name, 'read', context=context)
+ if not fields:
+ fields = self._columns.keys()
+
+ query = self._where_calc(cr, uid, domain, context=context)
+ self._apply_ir_rules(cr, uid, query, 'read', context=context)
+
+ # Take care of adding join(s) if groupby is an '_inherits'ed field
+ groupby_list = groupby
+ qualified_groupby_field = groupby
+ if groupby:
+ if isinstance(groupby, list):
+ groupby = groupby[0]
+ qualified_groupby_field = self._inherits_join_calc(groupby, query)
+
+ if groupby:
+ assert not groupby or groupby in fields, "Fields in 'groupby' must appear in the list of fields to read (perhaps it's missing in the list view?)"
+ groupby_def = self._columns.get(groupby) or (self._inherit_fields.get(groupby) and self._inherit_fields.get(groupby)[2])
+ assert groupby_def and groupby_def._classic_write, "Fields in 'groupby' must be regular database-persisted fields (no function or related fields), or function fields with store=True"
+
+ fget = self.fields_get(cr, uid, fields)
+ float_int_fields = filter(lambda x: fget[x]['type'] in ('float', 'integer'), fields)
+ flist = ''
+ group_count = group_by = groupby
+ if groupby:
+ if fget.get(groupby):
+ if fget[groupby]['type'] in ('date', 'datetime'):
+ flist = "to_char(%s,'yyyy-mm') as %s " % (qualified_groupby_field, groupby)
+ groupby = "to_char(%s,'yyyy-mm')" % (qualified_groupby_field)
+ else:
+ flist = qualified_groupby_field
+ else:
+ # Don't allow arbitrary values, as this would be a SQL injection vector!
+ raise except_orm(_('Invalid group_by'),
+ _('Invalid group_by specification: "%s".\nA group_by specification must be a list of valid fields.')%(groupby,))
+
+
+ fields_pre = [f for f in float_int_fields if
+ f == self.CONCURRENCY_CHECK_FIELD
+ or (f in self._columns and getattr(self._columns[f], '_classic_write'))]
+ for f in fields_pre:
+ if f not in ['id', 'sequence']:
+ group_operator = fget[f].get('group_operator', 'sum')
+ if flist:
+ flist += ', '
+ qualified_field = '"%s"."%s"' % (self._table, f)
+ flist += "%s(%s) AS %s" % (group_operator, qualified_field, f)
+
+ gb = groupby and (' GROUP BY ' + qualified_groupby_field) or ''
+
+ from_clause, where_clause, where_clause_params = query.get_sql()
+ where_clause = where_clause and ' WHERE ' + where_clause
+ limit_str = limit and ' limit %d' % limit or ''
+ offset_str = offset and ' offset %d' % offset or ''
+ if len(groupby_list) < 2 and context.get('group_by_no_leaf'):
+ group_count = '_'
+ cr.execute('SELECT min(%s.id) AS id, count(%s.id) AS %s_count' % (self._table, self._table, group_count) + (flist and ',') + flist + ' FROM ' + from_clause + where_clause + gb + limit_str + offset_str, where_clause_params)
+ alldata = {}
+ groupby = group_by
+ for r in cr.dictfetchall():
+ for fld, val in r.items():
+ if val == None: r[fld] = False
+ alldata[r['id']] = r
+ del r['id']
+
+ data_ids = self.search(cr, uid, [('id', 'in', alldata.keys())], order=orderby or groupby, context=context)
+ # the IDS of records that have groupby field value = False or '' should be sorted too
+ data_ids += filter(lambda x:x not in data_ids, alldata.keys())
+ data = self.read(cr, uid, data_ids, groupby and [groupby] or ['id'], context=context)
+ # restore order of the search as read() uses the default _order (this is only for groups, so the size of data_read shoud be small):
+ data.sort(lambda x,y: cmp(data_ids.index(x['id']), data_ids.index(y['id'])))
+
+ for d in data:
+ if groupby:
+ d['__domain'] = [(groupby, '=', alldata[d['id']][groupby] or False)] + domain
+ if not isinstance(groupby_list, (str, unicode)):
+ if groupby or not context.get('group_by_no_leaf', False):
+ d['__context'] = {'group_by': groupby_list[1:]}
+ if groupby and groupby in fget:
+ if d[groupby] and fget[groupby]['type'] in ('date', 'datetime'):
+ dt = datetime.datetime.strptime(alldata[d['id']][groupby][:7], '%Y-%m')
+ days = calendar.monthrange(dt.year, dt.month)[1]
+
+ d[groupby] = datetime.datetime.strptime(d[groupby][:10], '%Y-%m-%d').strftime('%B %Y')
+ d['__domain'] = [(groupby, '>=', alldata[d['id']][groupby] and datetime.datetime.strptime(alldata[d['id']][groupby][:7] + '-01', '%Y-%m-%d').strftime('%Y-%m-%d') or False),\
+ (groupby, '<=', alldata[d['id']][groupby] and datetime.datetime.strptime(alldata[d['id']][groupby][:7] + '-' + str(days), '%Y-%m-%d').strftime('%Y-%m-%d') or False)] + domain
+ del alldata[d['id']][groupby]
+ d.update(alldata[d['id']])
+ del d['id']
+ return data
+
+ def _inherits_join_add(self, parent_model_name, query):
+ """
+ Add missing table SELECT and JOIN clause to ``query`` for reaching the parent table (no duplicates)
+
+ :param parent_model_name: name of the parent model for which the clauses should be added
+ :param query: query object on which the JOIN should be added
+ """
+ inherits_field = self._inherits[parent_model_name]
+ parent_model = self.pool.get(parent_model_name)
+ parent_table_name = parent_model._table
+ quoted_parent_table_name = '"%s"' % parent_table_name
+ if quoted_parent_table_name not in query.tables:
+ query.tables.append(quoted_parent_table_name)
+ query.where_clause.append('("%s".%s = %s.id)' % (self._table, inherits_field, parent_table_name))
+
+ def _inherits_join_calc(self, field, query):
+ """
+ Adds missing table select and join clause(s) to ``query`` for reaching
+ the field coming from an '_inherits' parent table (no duplicates).
+
+ :param field: name of inherited field to reach
+ :param query: query object on which the JOIN should be added
+ :return: qualified name of field, to be used in SELECT clause
+ """
+ current_table = self
+ while field in current_table._inherit_fields and not field in current_table._columns:
+ parent_model_name = current_table._inherit_fields[field][0]
+ parent_table = self.pool.get(parent_model_name)
+ self._inherits_join_add(parent_model_name, query)
+ current_table = parent_table
+ return '"%s".%s' % (current_table._table, field)
+
+ def _parent_store_compute(self, cr):
+ if not self._parent_store:
+ return
+ logger = netsvc.Logger()
+ logger.notifyChannel('data', netsvc.LOG_INFO, 'Computing parent left and right for table %s...' % (self._table, ))
+ def browse_rec(root, pos=0):
+ # TODO: set order
+ where = self._parent_name+'='+str(root)
+ if not root:
+ where = self._parent_name+' IS NULL'
+ if self._parent_order:
+ where += ' order by '+self._parent_order
+ cr.execute('SELECT id FROM '+self._table+' WHERE '+where)
+ pos2 = pos + 1
+ for id in cr.fetchall():
+ pos2 = browse_rec(id[0], pos2)
+ cr.execute('update '+self._table+' set parent_left=%s, parent_right=%s where id=%s', (pos, pos2, root))
+ return pos2 + 1
+ query = 'SELECT id FROM '+self._table+' WHERE '+self._parent_name+' IS NULL'
+ if self._parent_order:
+ query += ' order by ' + self._parent_order
+ pos = 0
+ cr.execute(query)
+ for (root,) in cr.fetchall():
+ pos = browse_rec(root, pos)
+ return True
+
+ def _update_store(self, cr, f, k):
+ logger = netsvc.Logger()
+ logger.notifyChannel('data', netsvc.LOG_INFO, "storing computed values of fields.function '%s'" % (k,))
+ ss = self._columns[k]._symbol_set
+ update_query = 'UPDATE "%s" SET "%s"=%s WHERE id=%%s' % (self._table, k, ss[0])
+ cr.execute('select id from '+self._table)
+ ids_lst = map(lambda x: x[0], cr.fetchall())
+ while ids_lst:
+ iids = ids_lst[:40]
+ ids_lst = ids_lst[40:]
+ res = f.get(cr, self, iids, k, 1, {})
+ for key, val in res.items():
+ if f._multi:
+ val = val[k]
+ # if val is a many2one, just write the ID
+ if type(val) == tuple:
+ val = val[0]
+ if (val<>False) or (type(val)<>bool):
+ cr.execute(update_query, (ss[1](val), key))
+
+ def _check_selection_field_value(self, cr, uid, field, value, context=None):
+ """Raise except_orm if value is not among the valid values for the selection field"""
+ if self._columns[field]._type == 'reference':
+ val_model, val_id_str = value.split(',', 1)
+ val_id = False
+ try:
+ val_id = long(val_id_str)
+ except ValueError:
+ pass
+ if not val_id:
+ raise except_orm(_('ValidateError'),
+ _('Invalid value for reference field "%s" (last part must be a non-zero integer): "%s"') % (field, value))
+ val = val_model
+ else:
+ val = value
+ if isinstance(self._columns[field].selection, (tuple, list)):
+ if val in dict(self._columns[field].selection):
+ return
+ elif val in dict(self._columns[field].selection(self, cr, uid, context=context)):
+ return
+ raise except_orm(_('ValidateError'),
+ _('The value "%s" for the field "%s" is not in the selection') % (value, field))
+
+ def _check_removed_columns(self, cr, log=False):
+ # iterate on the database columns to drop the NOT NULL constraints
+ # of fields which were required but have been removed (or will be added by another module)
+ columns = [c for c in self._columns if not (isinstance(self._columns[c], fields.function) and not self._columns[c].store)]
+ columns += ('id', 'write_uid', 'write_date', 'create_uid', 'create_date') # openerp access columns
+ cr.execute("SELECT a.attname, a.attnotnull"
+ " FROM pg_class c, pg_attribute a"
+ " WHERE c.relname=%s"
+ " AND c.oid=a.attrelid"
+ " AND a.attisdropped=%s"
+ " AND pg_catalog.format_type(a.atttypid, a.atttypmod) NOT IN ('cid', 'tid', 'oid', 'xid')"
+ " AND a.attname NOT IN %s", (self._table, False, tuple(columns))),
+
+ for column in cr.dictfetchall():
+ if log:
+ self.__logger.debug("column %s is in the table %s but not in the corresponding object %s",
+ column['attname'], self._table, self._name)
+ if column['attnotnull']:
+ cr.execute('ALTER TABLE "%s" ALTER COLUMN "%s" DROP NOT NULL' % (self._table, column['attname']))
+ self.__schema.debug("Table '%s': column '%s': dropped NOT NULL constraint",
+ self._table, column['attname'])
+
+ def _auto_init(self, cr, context=None):
+ if context is None:
+ context = {}
+ store_compute = False
+ create = False
+ todo_end = []
+ self._field_create(cr, context=context)
+ if getattr(self, '_auto', True):
+ cr.execute("SELECT relname FROM pg_class WHERE relkind IN ('r','v') AND relname=%s", (self._table,))
+ if not cr.rowcount:
+ cr.execute('CREATE TABLE "%s" (id SERIAL NOT NULL, PRIMARY KEY(id)) WITHOUT OIDS' % (self._table,))
+ cr.execute("COMMENT ON TABLE \"%s\" IS '%s'" % (self._table, self._description.replace("'", "''")))
+ create = True
+ self.__schema.debug("Table '%s': created", self._table)
+
+ cr.commit()
+ if self._parent_store:
+ cr.execute("""SELECT c.relname
+ FROM pg_class c, pg_attribute a
+ WHERE c.relname=%s AND a.attname=%s AND c.oid=a.attrelid
+ """, (self._table, 'parent_left'))
+ if not cr.rowcount:
+ cr.execute('ALTER TABLE "%s" ADD COLUMN "parent_left" INTEGER' % (self._table,))
+ cr.execute('ALTER TABLE "%s" ADD COLUMN "parent_right" INTEGER' % (self._table,))
+ if 'parent_left' not in self._columns:
+ self.__logger.error('create a column parent_left on object %s: fields.integer(\'Left Parent\', select=1)',
+ self._table)
+ self.__schema.debug("Table '%s': added column '%s' with definition=%s",
+ self._table, 'parent_left', 'INTEGER')
+ elif not self._columns['parent_left'].select:
+ self.__logger.error('parent_left column on object %s must be indexed! Add select=1 to the field definition)',
+ self._table)
+ if 'parent_right' not in self._columns:
+ self.__logger.error('create a column parent_right on object %s: fields.integer(\'Right Parent\', select=1)',
+ self._table)
+ self.__schema.debug("Table '%s': added column '%s' with definition=%s",
+ self._table, 'parent_right', 'INTEGER')
+ elif not self._columns['parent_right'].select:
+ self.__logger.error('parent_right column on object %s must be indexed! Add select=1 to the field definition)',
+ self._table)
+ if self._columns[self._parent_name].ondelete != 'cascade':
+ self.__logger.error("The column %s on object %s must be set as ondelete='cascade'",
+ self._parent_name, self._name)
+
+ cr.commit()
+ store_compute = True
+
+ if self._log_access:
+ logs = {
+ 'create_uid': 'INTEGER REFERENCES res_users ON DELETE SET NULL',
+ 'create_date': 'TIMESTAMP',
+ 'write_uid': 'INTEGER REFERENCES res_users ON DELETE SET NULL',
+ 'write_date': 'TIMESTAMP'
+ }
+ for k in logs:
+ cr.execute("""
+ SELECT c.relname
+ FROM pg_class c, pg_attribute a
+ WHERE c.relname=%s AND a.attname=%s AND c.oid=a.attrelid
+ """, (self._table, k))
+ if not cr.rowcount:
+ cr.execute('ALTER TABLE "%s" ADD COLUMN "%s" %s' % (self._table, k, logs[k]))
+ cr.commit()
+ self.__schema.debug("Table '%s': added column '%s' with definition=%s",
+ self._table, k, logs[k])
+
+ self._check_removed_columns(cr, log=False)
+
+ # iterate on the "object columns"
+ todo_update_store = []
+ update_custom_fields = context.get('update_custom_fields', False)
+
+ cr.execute("SELECT c.relname,a.attname,a.attlen,a.atttypmod,a.attnotnull,a.atthasdef,t.typname,CASE WHEN a.attlen=-1 THEN a.atttypmod-4 ELSE a.attlen END as size " \
+ "FROM pg_class c,pg_attribute a,pg_type t " \
+ "WHERE c.relname=%s " \
+ "AND c.oid=a.attrelid " \
+ "AND a.atttypid=t.oid", (self._table,))
+ col_data = dict(map(lambda x: (x['attname'], x),cr.dictfetchall()))
+
+
+ for k in self._columns:
+ if k in ('id', 'write_uid', 'write_date', 'create_uid', 'create_date'):
+ continue
+ #Not Updating Custom fields
+ if k.startswith('x_') and not update_custom_fields:
+ continue
+
+ f = self._columns[k]
+
+ if isinstance(f, fields.one2many):
+ cr.execute("SELECT relname FROM pg_class WHERE relkind='r' AND relname=%s", (f._obj,))
+
+ if self.pool.get(f._obj):
+ if f._fields_id not in self.pool.get(f._obj)._columns.keys():
+ if not self.pool.get(f._obj)._inherits or (f._fields_id not in self.pool.get(f._obj)._inherit_fields.keys()):
+ raise except_orm('Programming Error', ("There is no reference field '%s' found for '%s'") % (f._fields_id, f._obj,))
+
+ if cr.fetchone():
+ cr.execute("SELECT count(1) as c FROM pg_class c,pg_attribute a WHERE c.relname=%s AND a.attname=%s AND c.oid=a.attrelid", (f._obj, f._fields_id))
+ res = cr.fetchone()[0]
+ if not res:
+ cr.execute('ALTER TABLE "%s" ADD FOREIGN KEY (%s) REFERENCES "%s" ON DELETE SET NULL' % (self._obj, f._fields_id, f._table))
+ self.__schema.debug("Table '%s': added foreign key '%s' with definition=REFERENCES \"%s\" ON DELETE SET NULL",
+ self._obj, f._fields_id, f._table)
+ elif isinstance(f, fields.many2many):
+ cr.execute("SELECT relname FROM pg_class WHERE relkind IN ('r','v') AND relname=%s", (f._rel,))
+ if not cr.dictfetchall():
+ if not self.pool.get(f._obj):
+ raise except_orm('Programming Error', ('There is no reference available for %s') % (f._obj,))
+ ref = self.pool.get(f._obj)._table
+ # ref = f._obj.replace('.', '_')
+ cr.execute('CREATE TABLE "%s" ("%s" INTEGER NOT NULL REFERENCES "%s" ON DELETE CASCADE, "%s" INTEGER NOT NULL REFERENCES "%s" ON DELETE CASCADE, UNIQUE("%s","%s")) WITH OIDS' % (f._rel, f._id1, self._table, f._id2, ref, f._id1, f._id2))
+ cr.execute('CREATE INDEX "%s_%s_index" ON "%s" ("%s")' % (f._rel, f._id1, f._rel, f._id1))
+ cr.execute('CREATE INDEX "%s_%s_index" ON "%s" ("%s")' % (f._rel, f._id2, f._rel, f._id2))
+ cr.execute("COMMENT ON TABLE \"%s\" IS 'RELATION BETWEEN %s AND %s'" % (f._rel, self._table, ref))
+ cr.commit()
+ self.__schema.debug("Create table '%s': relation between '%s' and '%s'",
+ f._rel, self._table, ref)
+ else:
+ res = col_data.get(k, [])
+ res = res and [res] or []
+ if not res and hasattr(f, 'oldname'):
+ cr.execute("SELECT c.relname,a.attname,a.attlen,a.atttypmod,a.attnotnull,a.atthasdef,t.typname,CASE WHEN a.attlen=-1 THEN a.atttypmod-4 ELSE a.attlen END as size " \
+ "FROM pg_class c,pg_attribute a,pg_type t " \
+ "WHERE c.relname=%s " \
+ "AND a.attname=%s " \
+ "AND c.oid=a.attrelid " \
+ "AND a.atttypid=t.oid", (self._table, f.oldname))
+ res_old = cr.dictfetchall()
+ if res_old and len(res_old) == 1:
+ cr.execute('ALTER TABLE "%s" RENAME "%s" TO "%s"' % (self._table, f.oldname, k))
+ res = res_old
+ res[0]['attname'] = k
+ self.__schema.debug("Table '%s': renamed column '%s' to '%s'",
+ self._table, f.oldname, k)
+
+ if len(res) == 1:
+ f_pg_def = res[0]
+ f_pg_type = f_pg_def['typname']
+ f_pg_size = f_pg_def['size']
+ f_pg_notnull = f_pg_def['attnotnull']
+ if isinstance(f, fields.function) and not f.store and\
+ not getattr(f, 'nodrop', False):
+ self.__logger.info('column %s (%s) in table %s removed: converted to a function !\n',
+ k, f.string, self._table)
+ cr.execute('ALTER TABLE "%s" DROP COLUMN "%s" CASCADE' % (self._table, k))
+ cr.commit()
+ self.__schema.debug("Table '%s': dropped column '%s' with cascade",
+ self._table, k)
+ f_obj_type = None
+ else:
+ f_obj_type = get_pg_type(f) and get_pg_type(f)[0]
+
+ if f_obj_type:
+ ok = False
+ casts = [
+ ('text', 'char', 'VARCHAR(%d)' % (f.size or 0,), '::VARCHAR(%d)'%(f.size or 0,)),
+ ('varchar', 'text', 'TEXT', ''),
+ ('int4', 'float', get_pg_type(f)[1], '::'+get_pg_type(f)[1]),
+ ('date', 'datetime', 'TIMESTAMP', '::TIMESTAMP'),
+ ('timestamp', 'date', 'date', '::date'),
+ ('numeric', 'float', get_pg_type(f)[1], '::'+get_pg_type(f)[1]),
+ ('float8', 'float', get_pg_type(f)[1], '::'+get_pg_type(f)[1]),
+ ]
+ if f_pg_type == 'varchar' and f._type == 'char' and f_pg_size < f.size:
+ cr.execute('ALTER TABLE "%s" RENAME COLUMN "%s" TO temp_change_size' % (self._table, k))
+ cr.execute('ALTER TABLE "%s" ADD COLUMN "%s" VARCHAR(%d)' % (self._table, k, f.size))
+ cr.execute('UPDATE "%s" SET "%s"=temp_change_size::VARCHAR(%d)' % (self._table, k, f.size))
+ cr.execute('ALTER TABLE "%s" DROP COLUMN temp_change_size CASCADE' % (self._table,))
+ cr.commit()
+ self.__schema.debug("Table '%s': column '%s' (type varchar) changed size from %s to %s",
+ self._table, k, f_pg_size, f.size)
+ for c in casts:
+ if (f_pg_type==c[0]) and (f._type==c[1]):
+ if f_pg_type != f_obj_type:
+ ok = True
+ cr.execute('ALTER TABLE "%s" RENAME COLUMN "%s" TO temp_change_size' % (self._table, k))
+ cr.execute('ALTER TABLE "%s" ADD COLUMN "%s" %s' % (self._table, k, c[2]))
+ cr.execute(('UPDATE "%s" SET "%s"=temp_change_size'+c[3]) % (self._table, k))
+ cr.execute('ALTER TABLE "%s" DROP COLUMN temp_change_size CASCADE' % (self._table,))
+ cr.commit()
+ self.__schema.debug("Table '%s': column '%s' changed type from %s to %s",
+ self._table, k, c[0], c[1])
+ break
+
+ if f_pg_type != f_obj_type:
+ if not ok:
+ i = 0
+ while True:
+ newname = k + '_moved' + str(i)
+ cr.execute("SELECT count(1) FROM pg_class c,pg_attribute a " \
+ "WHERE c.relname=%s " \
+ "AND a.attname=%s " \
+ "AND c.oid=a.attrelid ", (self._table, newname))
+ if not cr.fetchone()[0]:
+ break
+ i += 1
+ if f_pg_notnull:
+ cr.execute('ALTER TABLE "%s" ALTER COLUMN "%s" DROP NOT NULL' % (self._table, k))
+ cr.execute('ALTER TABLE "%s" RENAME COLUMN "%s" TO "%s"' % (self._table, k, newname))
+ cr.execute('ALTER TABLE "%s" ADD COLUMN "%s" %s' % (self._table, k, get_pg_type(f)[1]))
+ cr.execute("COMMENT ON COLUMN %s.%s IS '%s'" % (self._table, k, f.string.replace("'", "''")))
+ self.__schema.debug("Table '%s': column '%s' has changed type (DB=%s, def=%s), data moved to column %s !",
+ self._table, k, f_pg_type, f._type, newname)
+
+ # if the field is required and hasn't got a NOT NULL constraint
+ if f.required and f_pg_notnull == 0:
+ # set the field to the default value if any
+ if k in self._defaults:
+ if callable(self._defaults[k]):
+ default = self._defaults[k](self, cr, 1, context)
+ else:
+ default = self._defaults[k]
+
+ if (default is not None):
+ ss = self._columns[k]._symbol_set
+ query = 'UPDATE "%s" SET "%s"=%s WHERE "%s" is NULL' % (self._table, k, ss[0], k)
+ cr.execute(query, (ss[1](default),))
+ # add the NOT NULL constraint
+ cr.commit()
+ try:
+ cr.execute('ALTER TABLE "%s" ALTER COLUMN "%s" SET NOT NULL' % (self._table, k), log_exceptions=False)
+ cr.commit()
+ self.__schema.debug("Table '%s': column '%s': added NOT NULL constraint",
+ self._table, k)
+ except Exception:
+ msg = "Table '%s': unable to set a NOT NULL constraint on column '%s' !\n"\
+ "If you want to have it, you should update the records and execute manually:\n"\
+ "ALTER TABLE %s ALTER COLUMN %s SET NOT NULL"
+ self.__schema.warn(msg, self._table, k, self._table, k)
+ cr.commit()
+ elif not f.required and f_pg_notnull == 1:
+ cr.execute('ALTER TABLE "%s" ALTER COLUMN "%s" DROP NOT NULL' % (self._table, k))
+ cr.commit()
+ self.__schema.debug("Table '%s': column '%s': dropped NOT NULL constraint",
+ self._table, k)
+ # Verify index
+ indexname = '%s_%s_index' % (self._table, k)
+ cr.execute("SELECT indexname FROM pg_indexes WHERE indexname = %s and tablename = %s", (indexname, self._table))
+ res2 = cr.dictfetchall()
+ if not res2 and f.select:
+ cr.execute('CREATE INDEX "%s_%s_index" ON "%s" ("%s")' % (self._table, k, self._table, k))
+ cr.commit()
+ if f._type == 'text':
+ # FIXME: for fields.text columns we should try creating GIN indexes instead (seems most suitable for an ERP context)
+ msg = "Table '%s': Adding (b-tree) index for text column '%s'."\
+ "This is probably useless (does not work for fulltext search) and prevents INSERTs of long texts"\
+ " because there is a length limit for indexable btree values!\n"\
+ "Use a search view instead if you simply want to make the field searchable."
+ self.__schema.warn(msg, self._table, k, f._type)
+ if res2 and not f.select:
+ cr.execute('DROP INDEX "%s_%s_index"' % (self._table, k))
+ cr.commit()
+ msg = "Table '%s': dropping index for column '%s' of type '%s' as it is not required anymore"
+ self.__schema.debug(msg, self._table, k, f._type)
+
+ if isinstance(f, fields.many2one):
+ ref = self.pool.get(f._obj)._table
+ if ref != 'ir_actions':
+ cr.execute('SELECT confdeltype, conname FROM pg_constraint as con, pg_class as cl1, pg_class as cl2, '
+ 'pg_attribute as att1, pg_attribute as att2 '
+ 'WHERE con.conrelid = cl1.oid '
+ 'AND cl1.relname = %s '
+ 'AND con.confrelid = cl2.oid '
+ 'AND cl2.relname = %s '
+ 'AND array_lower(con.conkey, 1) = 1 '
+ 'AND con.conkey[1] = att1.attnum '
+ 'AND att1.attrelid = cl1.oid '
+ 'AND att1.attname = %s '
+ 'AND array_lower(con.confkey, 1) = 1 '
+ 'AND con.confkey[1] = att2.attnum '
+ 'AND att2.attrelid = cl2.oid '
+ 'AND att2.attname = %s '
+ "AND con.contype = 'f'", (self._table, ref, k, 'id'))
+ res2 = cr.dictfetchall()
+ if res2:
+ if res2[0]['confdeltype'] != POSTGRES_CONFDELTYPES.get(f.ondelete.upper(), 'a'):
+ cr.execute('ALTER TABLE "' + self._table + '" DROP CONSTRAINT "' + res2[0]['conname'] + '"')
+ cr.execute('ALTER TABLE "' + self._table + '" ADD FOREIGN KEY ("' + k + '") REFERENCES "' + ref + '" ON DELETE ' + f.ondelete)
+ cr.commit()
+ self.__schema.debug("Table '%s': column '%s': XXX",
+ self._table, k)
+ elif len(res) > 1:
+ netsvc.Logger().notifyChannel('orm', netsvc.LOG_ERROR, "Programming error, column %s->%s has multiple instances !" % (self._table, k))
+ if not res:
+ if not isinstance(f, fields.function) or f.store:
+ # add the missing field
+ cr.execute('ALTER TABLE "%s" ADD COLUMN "%s" %s' % (self._table, k, get_pg_type(f)[1]))
+ cr.execute("COMMENT ON COLUMN %s.%s IS '%s'" % (self._table, k, f.string.replace("'", "''")))
+ self.__schema.debug("Table '%s': added column '%s' with definition=%s",
+ self._table, k, get_pg_type(f)[1])
+
+ # initialize it
+ if not create and k in self._defaults:
+ if callable(self._defaults[k]):
+ default = self._defaults[k](self, cr, 1, context)
+ else:
+ default = self._defaults[k]
+
+ ss = self._columns[k]._symbol_set
+ query = 'UPDATE "%s" SET "%s"=%s' % (self._table, k, ss[0])
+ cr.execute(query, (ss[1](default),))
+ cr.commit()
+ netsvc.Logger().notifyChannel('data', netsvc.LOG_DEBUG, "Table '%s': setting default value of new column %s" % (self._table, k))
+
+ if isinstance(f, fields.function):
+ order = 10
+ if f.store is not True:
+ order = f.store[f.store.keys()[0]][2]
+ todo_update_store.append((order, f, k))
+
+ # and add constraints if needed
+ if isinstance(f, fields.many2one):
+ if not self.pool.get(f._obj):
+ raise except_orm('Programming Error', ('There is no reference available for %s') % (f._obj,))
+ ref = self.pool.get(f._obj)._table
+ # ref = f._obj.replace('.', '_')
+ # ir_actions is inherited so foreign key doesn't work on it
+ if ref != 'ir_actions':
+ cr.execute('ALTER TABLE "%s" ADD FOREIGN KEY ("%s") REFERENCES "%s" ON DELETE %s' % (self._table, k, ref, f.ondelete))
+ self.__schema.debug("Table '%s': added foreign key '%s' with definition=REFERENCES \"%s\" ON DELETE %s",
+ self._table, k, ref, f.ondelete)
+ if f.select:
+ cr.execute('CREATE INDEX "%s_%s_index" ON "%s" ("%s")' % (self._table, k, self._table, k))
+ if f.required:
+ try:
+ cr.commit()
+ cr.execute('ALTER TABLE "%s" ALTER COLUMN "%s" SET NOT NULL' % (self._table, k), log_exceptions=False)
+ self.__schema.debug("Table '%s': column '%s': added a NOT NULL constraint",
+ self._table, k)
+ except Exception:
+ msg = "WARNING: unable to set column %s of table %s not null !\n"\
+ "Try to re-run: openerp-server.py --update=module\n"\
+ "If it doesn't work, update records and execute manually:\n"\
+ "ALTER TABLE %s ALTER COLUMN %s SET NOT NULL"
+ self.__logger.warn(msg, k, self._table, self._table, k)
+ cr.commit()
+ for order, f, k in todo_update_store:
+ todo_end.append((order, self._update_store, (f, k)))
+
+ else:
+ cr.execute("SELECT relname FROM pg_class WHERE relkind IN ('r','v') AND relname=%s", (self._table,))
+ create = not bool(cr.fetchone())
+
+ cr.commit() # start a new transaction
+
+ for (key, con, _) in self._sql_constraints:
+ conname = '%s_%s' % (self._table, key)
+
+ cr.execute("SELECT conname, pg_catalog.pg_get_constraintdef(oid, true) as condef FROM pg_constraint where conname=%s", (conname,))
+ existing_constraints = cr.dictfetchall()
+
+ sql_actions = {
+ 'drop': {
+ 'execute': False,
+ 'query': 'ALTER TABLE "%s" DROP CONSTRAINT "%s"' % (self._table, conname, ),
+ 'msg_ok': "Table '%s': dropped constraint '%s'. Reason: its definition changed from '%%s' to '%s'" % (
+ self._table, conname, con),
+ 'msg_err': "Table '%s': unable to drop \'%s\' constraint !" % (self._table, con),
+ 'order': 1,
+ },
+ 'add': {
+ 'execute': False,
+ 'query': 'ALTER TABLE "%s" ADD CONSTRAINT "%s" %s' % (self._table, conname, con,),
+ 'msg_ok': "Table '%s': added constraint '%s' with definition=%s" % (self._table, conname, con),
+ 'msg_err': "Table '%s': unable to add \'%s\' constraint !\n If you want to have it, you should update the records and execute manually:\n%%s" % (
+ self._table, con),
+ 'order': 2,
+ },
+ }
+
+ if not existing_constraints:
+ # constraint does not exists:
+ sql_actions['add']['execute'] = True
+ sql_actions['add']['msg_err'] = sql_actions['add']['msg_err'] % (sql_actions['add']['query'], )
+ elif con.lower() not in [item['condef'].lower() for item in existing_constraints]:
+ # constraint exists but its definition has changed:
+ sql_actions['drop']['execute'] = True
+ sql_actions['drop']['msg_ok'] = sql_actions['drop']['msg_ok'] % (existing_constraints[0]['condef'].lower(), )
+ sql_actions['add']['execute'] = True
+ sql_actions['add']['msg_err'] = sql_actions['add']['msg_err'] % (sql_actions['add']['query'], )
+
+ # we need to add the constraint:
+ sql_actions = [item for item in sql_actions.values()]
+ sql_actions.sort(key=lambda x: x['order'])
+ for sql_action in [action for action in sql_actions if action['execute']]:
+ try:
+ cr.execute(sql_action['query'])
+ cr.commit()
+ self.__schema.debug(sql_action['msg_ok'])
+ except:
+ self.__schema.warn(sql_action['msg_err'])
+ cr.rollback()
+
+ if create:
+ if hasattr(self, "_sql"):
+ for line in self._sql.split(';'):
+ line2 = line.replace('\n', '').strip()
+ if line2:
+ cr.execute(line2)
+ cr.commit()
+ if store_compute:
+ self._parent_store_compute(cr)
+ cr.commit()
+ return todo_end
+
+ def __init__(self, cr):
+ super(orm, self).__init__(cr)
+
+ if not hasattr(self, '_log_access'):
+ # if not access is not specify, it is the same value as _auto
+ self._log_access = getattr(self, "_auto", True)
+
+ self._columns = self._columns.copy()
+ for store_field in self._columns:
+ f = self._columns[store_field]
+ if hasattr(f, 'digits_change'):
+ f.digits_change(cr)
+ if not isinstance(f, fields.function):
+ continue
+ if not f.store:
+ continue
+ if self._columns[store_field].store is True:
+ sm = {self._name: (lambda self, cr, uid, ids, c={}: ids, None, 10, None)}
+ else:
+ sm = self._columns[store_field].store
+ for object, aa in sm.items():
+ if len(aa) == 4:
+ (fnct, fields2, order, length) = aa
+ elif len(aa) == 3:
+ (fnct, fields2, order) = aa
+ length = None
+ else:
+ raise except_orm('Error',
+ ('Invalid function definition %s in object %s !\nYou must use the definition: store={object:(fnct, fields, priority, time length)}.' % (store_field, self._name)))
+ self.pool._store_function.setdefault(object, [])
+ ok = True
+ for x, y, z, e, f, l in self.pool._store_function[object]:
+ if (x==self._name) and (y==store_field) and (e==fields2):
+ if f == order:
+ ok = False
+ if ok:
+ self.pool._store_function[object].append( (self._name, store_field, fnct, fields2, order, length))
+ self.pool._store_function[object].sort(lambda x, y: cmp(x[4], y[4]))
+
+ for (key, _, msg) in self._sql_constraints:
+ self.pool._sql_error[self._table+'_'+key] = msg
+
+ # Load manual fields
+
+ cr.execute("SELECT id FROM ir_model_fields WHERE name=%s AND model=%s", ('state', 'ir.model.fields'))
+ if cr.fetchone():
+ cr.execute('SELECT * FROM ir_model_fields WHERE model=%s AND state=%s', (self._name, 'manual'))
+ for field in cr.dictfetchall():
+ if field['name'] in self._columns:
+ continue
+ attrs = {
+ 'string': field['field_description'],
+ 'required': bool(field['required']),
+ 'readonly': bool(field['readonly']),
+ 'domain': field['domain'] or None,
+ 'size': field['size'],
+ 'ondelete': field['on_delete'],
+ 'translate': (field['translate']),
+ #'select': int(field['select_level'])
+ }
+
+ if field['ttype'] == 'selection':
+ self._columns[field['name']] = getattr(fields, field['ttype'])(eval(field['selection']), **attrs)
+ elif field['ttype'] == 'reference':
+ self._columns[field['name']] = getattr(fields, field['ttype'])(selection=eval(field['selection']), **attrs)
+ elif field['ttype'] == 'many2one':
+ self._columns[field['name']] = getattr(fields, field['ttype'])(field['relation'], **attrs)
+ elif field['ttype'] == 'one2many':
+ self._columns[field['name']] = getattr(fields, field['ttype'])(field['relation'], field['relation_field'], **attrs)
+ elif field['ttype'] == 'many2many':
+ _rel1 = field['relation'].replace('.', '_')
+ _rel2 = field['model'].replace('.', '_')
+ _rel_name = 'x_%s_%s_%s_rel' % (_rel1, _rel2, field['name'])
+ self._columns[field['name']] = getattr(fields, field['ttype'])(field['relation'], _rel_name, 'id1', 'id2', **attrs)
+ else:
+ self._columns[field['name']] = getattr(fields, field['ttype'])(**attrs)
+ self._inherits_check()
+ self._inherits_reload()
+ if not self._sequence:
+ self._sequence = self._table + '_id_seq'
+ for k in self._defaults:
+ assert (k in self._columns) or (k in self._inherit_fields), 'Default function defined in %s but field %s does not exist !' % (self._name, k,)
+ for f in self._columns:
+ self._columns[f].restart()
+
+ #
+ # Update objects that uses this one to update their _inherits fields
+ #
+
+ def _inherits_reload_src(self):
+ for obj in self.pool.obj_pool.values():
+ if self._name in obj._inherits:
+ obj._inherits_reload()
+
+ def _inherits_reload(self):
+ res = {}
+ for table in self._inherits:
+ res.update(self.pool.get(table)._inherit_fields)
+ for col in self.pool.get(table)._columns.keys():
+ res[col] = (table, self._inherits[table], self.pool.get(table)._columns[col])
+ for col in self.pool.get(table)._inherit_fields.keys():
+ res[col] = (table, self._inherits[table], self.pool.get(table)._inherit_fields[col][2])
+ self._inherit_fields = res
+ self._inherits_reload_src()
+
+ def _inherits_check(self):
+ for table, field_name in self._inherits.items():
+ if field_name not in self._columns:
+ logging.getLogger('init').info('Missing many2one field definition for _inherits reference "%s" in "%s", using default one.' % (field_name, self._name))
+ self._columns[field_name] = fields.many2one(table, string="Automatically created field to link to parent %s" % table,
+ required=True, ondelete="cascade")
+ elif not self._columns[field_name].required or self._columns[field_name].ondelete.lower() != "cascade":
+ logging.getLogger('init').warning('Field definition for _inherits reference "%s" in "%s" must be marked as "required" with ondelete="cascade", forcing it.' % (field_name, self._name))
+ self._columns[field_name].required = True
+ self._columns[field_name].ondelete = "cascade"
+
+ #def __getattr__(self, name):
+ # """
+ # Proxies attribute accesses to the `inherits` parent so we can call methods defined on the inherited parent
+ # (though inherits doesn't use Python inheritance).
+ # Handles translating between local ids and remote ids.
+ # Known issue: doesn't work correctly when using python's own super(), don't involve inherit-based inheritance
+ # when you have inherits.
+ # """
+ # for model, field in self._inherits.iteritems():
+ # proxy = self.pool.get(model)
+ # if hasattr(proxy, name):
+ # attribute = getattr(proxy, name)
+ # if not hasattr(attribute, '__call__'):
+ # return attribute
+ # break
+ # else:
+ # return super(orm, self).__getattr__(name)
+
+ # def _proxy(cr, uid, ids, *args, **kwargs):
+ # objects = self.browse(cr, uid, ids, kwargs.get('context', None))
+ # lst = [obj[field].id for obj in objects if obj[field]]
+ # return getattr(proxy, name)(cr, uid, lst, *args, **kwargs)
+
+ # return _proxy
+
+
+ def fields_get(self, cr, user, fields=None, context=None):
+ """
+ Get the description of list of fields
+
+ :param cr: database cursor
+ :param user: current user id
+ :param fields: list of fields
+ :param context: context arguments, like lang, time zone
+ :return: dictionary of field dictionaries, each one describing a field of the business object
+ :raise AccessError: * if user has no create/write rights on the requested object
+
+ """
+ ira = self.pool.get('ir.model.access')
+ write_access = ira.check(cr, user, self._name, 'write', raise_exception=False, context=context) or \
+ ira.check(cr, user, self._name, 'create', raise_exception=False, context=context)
+ return super(orm, self).fields_get(cr, user, fields, context, write_access)
+
+ def read(self, cr, user, ids, fields=None, context=None, load='_classic_read'):
+ if not context:
+ context = {}
+ self.pool.get('ir.model.access').check(cr, user, self._name, 'read', context=context)
+ if not fields:
+ fields = list(set(self._columns.keys() + self._inherit_fields.keys()))
+ if isinstance(ids, (int, long)):
+ select = [ids]
+ else:
+ select = ids
+ select = map(lambda x: isinstance(x, dict) and x['id'] or x, select)
+ result = self._read_flat(cr, user, select, fields, context, load)
+
+ for r in result:
+ for key, v in r.items():
+ if v is None:
+ r[key] = False
+
+ if isinstance(ids, (int, long, dict)):
+ return result and result[0] or False
+ return result
+
+ def _read_flat(self, cr, user, ids, fields_to_read, context=None, load='_classic_read'):
+ if not context:
+ context = {}
+ if not ids:
+ return []
+ if fields_to_read == None:
+ fields_to_read = self._columns.keys()
+
+ # Construct a clause for the security rules.
+ # 'tables' hold the list of tables necessary for the SELECT including the ir.rule clauses,
+ # or will at least contain self._table.
+ rule_clause, rule_params, tables = self.pool.get('ir.rule').domain_get(cr, user, self._name, 'read', context=context)
+
+ # all inherited fields + all non inherited fields for which the attribute whose name is in load is True
+ fields_pre = [f for f in fields_to_read if
+ f == self.CONCURRENCY_CHECK_FIELD
+ or (f in self._columns and getattr(self._columns[f], '_classic_write'))
+ ] + self._inherits.values()
+
+ res = []
+ if len(fields_pre):
+ def convert_field(f):
+ f_qual = "%s.%s" % (self._table, f) # need fully-qualified references in case len(tables) > 1
+ if f in ('create_date', 'write_date'):
+ return "date_trunc('second', %s) as %s" % (f_qual, f)
+ if f == self.CONCURRENCY_CHECK_FIELD:
+ if self._log_access:
+ return "COALESCE(%s.write_date, %s.create_date, now())::timestamp AS %s" % (self._table, self._table, f,)
+ return "now()::timestamp AS %s" % (f,)
+ if isinstance(self._columns[f], fields.binary) and context.get('bin_size', False):
+ return 'length(%s) as "%s"' % (f_qual, f)
+ return f_qual
+
+ fields_pre2 = map(convert_field, fields_pre)
+ order_by = self._parent_order or self._order
+ select_fields = ','.join(fields_pre2 + [self._table + '.id'])
+ query = 'SELECT %s FROM %s WHERE %s.id IN %%s' % (select_fields, ','.join(tables), self._table)
+ if rule_clause:
+ query += " AND " + (' OR '.join(rule_clause))
+ query += " ORDER BY " + order_by
+ for sub_ids in cr.split_for_in_conditions(ids):
+ if rule_clause:
+ cr.execute(query, [tuple(sub_ids)] + rule_params)
+ if cr.rowcount != len(sub_ids):
+ raise except_orm(_('AccessError'),
+ _('Operation prohibited by access rules, or performed on an already deleted document (Operation: read, Document type: %s).')
+ % (self._description,))
+ else:
+ cr.execute(query, (tuple(sub_ids),))
+ res.extend(cr.dictfetchall())
+ else:
+ res = map(lambda x: {'id': x}, ids)
+
+ for f in fields_pre:
+ if f == self.CONCURRENCY_CHECK_FIELD:
+ continue
+ if self._columns[f].translate:
+ ids = [x['id'] for x in res]
+ #TODO: optimize out of this loop
+ res_trans = self.pool.get('ir.translation')._get_ids(cr, user, self._name+','+f, 'model', context.get('lang', False) or 'en_US', ids)
+ for r in res:
+ r[f] = res_trans.get(r['id'], False) or r[f]
+
+ for table in self._inherits:
+ col = self._inherits[table]
+ cols = [x for x in intersect(self._inherit_fields.keys(), fields_to_read) if x not in self._columns.keys()]
+ if not cols:
+ continue
+ res2 = self.pool.get(table).read(cr, user, [x[col] for x in res], cols, context, load)
+
+ res3 = {}
+ for r in res2:
+ res3[r['id']] = r
+ del r['id']
+
+ for record in res:
+ if not record[col]: # if the record is deleted from _inherits table?
+ continue
+ record.update(res3[record[col]])
+ if col not in fields_to_read:
+ del record[col]
+
+ # all fields which need to be post-processed by a simple function (symbol_get)
+ fields_post = filter(lambda x: x in self._columns and self._columns[x]._symbol_get, fields_to_read)
+ if fields_post:
+ for r in res:
+ for f in fields_post:
+ r[f] = self._columns[f]._symbol_get(r[f])
+ ids = [x['id'] for x in res]
+
+ # all non inherited fields for which the attribute whose name is in load is False
+ fields_post = filter(lambda x: x in self._columns and not getattr(self._columns[x], load), fields_to_read)
+
+ # Compute POST fields
+ todo = {}
+ for f in fields_post:
+ todo.setdefault(self._columns[f]._multi, [])
+ todo[self._columns[f]._multi].append(f)
+ for key, val in todo.items():
+ if key:
+ res2 = self._columns[val[0]].get(cr, self, ids, val, user, context=context, values=res)
+ for pos in val:
+ for record in res:
+ if isinstance(res2[record['id']], str): res2[record['id']] = eval(res2[record['id']]) #TOCHECK : why got string instend of dict in python2.6
+ multi_fields = res2.get(record['id'],{})
+ if multi_fields:
+ record[pos] = multi_fields.get(pos,[])
+ else:
+ for f in val:
+ res2 = self._columns[f].get(cr, self, ids, f, user, context=context, values=res)
+ for record in res:
+ if res2:
+ record[f] = res2[record['id']]
+ else:
+ record[f] = []
+ readonly = None
+ for vals in res:
+ for field in vals.copy():
+ fobj = None
+ if field in self._columns:
+ fobj = self._columns[field]
+
+ if not fobj:
+ continue
+ groups = fobj.read
+ if groups:
+ edit = False
+ for group in groups:
+ module = group.split(".")[0]
+ grp = group.split(".")[1]
+ cr.execute("select count(*) from res_groups_users_rel where gid IN (select res_id from ir_model_data where name=%s and module=%s and model=%s) and uid=%s" \
+ (grp, module, 'res.groups', user))
+ readonly = cr.fetchall()
+ if readonly[0][0] >= 1:
+ edit = True
+ break
+ elif readonly[0][0] == 0:
+ edit = False
+ else:
+ edit = False
+
+ if not edit:
+ if type(vals[field]) == type([]):
+ vals[field] = []
+ elif type(vals[field]) == type(0.0):
+ vals[field] = 0
+ elif type(vals[field]) == type(''):
+ vals[field] = '=No Permission='
+ else:
+ vals[field] = False
+ return res
+
+ def perm_read(self, cr, user, ids, context=None, details=True):
+ """
+ Returns some metadata about the given records.
+
+ :param details: if True, \*_uid fields are replaced with the name of the user
+ :return: list of ownership dictionaries for each requested record
+ :rtype: list of dictionaries with the following keys:
+
+ * id: object id
+ * create_uid: user who created the record
+ * create_date: date when the record was created
+ * write_uid: last user who changed the record
+ * write_date: date of the last change to the record
+ * xmlid: XML ID to use to refer to this record (if there is one), in format ``module.name``
+ """
+ if not context:
+ context = {}
+ if not ids:
+ return []
+ fields = ''
+ uniq = isinstance(ids, (int, long))
+ if uniq:
+ ids = [ids]
+ fields = ['id']
+ if self._log_access:
+ fields += ['create_uid', 'create_date', 'write_uid', 'write_date']
+ quoted_table = '"%s"' % self._table
+ fields_str = ",".join('%s.%s'%(quoted_table, field) for field in fields)
+ query = '''SELECT %s, __imd.module, __imd.name
+ FROM %s LEFT JOIN ir_model_data __imd
+ ON (__imd.model = %%s and __imd.res_id = %s.id)
+ WHERE %s.id IN %%s''' % (fields_str, quoted_table, quoted_table, quoted_table)
+ cr.execute(query, (self._name, tuple(ids)))
+ res = cr.dictfetchall()
+ for r in res:
+ for key in r:
+ r[key] = r[key] or False
+ if details and key in ('write_uid', 'create_uid') and r[key]:
+ try:
+ r[key] = self.pool.get('res.users').name_get(cr, user, [r[key]])[0]
+ except Exception:
+ pass # Leave the numeric uid there
+ r['xmlid'] = ("%(module)s.%(name)s" % r) if r['name'] else False
+ del r['name'], r['module']
+ if uniq:
+ return res[ids[0]]
+ return res
+
+ def _check_concurrency(self, cr, ids, context):
+ if not context:
+ return
+ if not (context.get(self.CONCURRENCY_CHECK_FIELD) and self._log_access):
+ return
+ check_clause = "(id = %s AND %s < COALESCE(write_date, create_date, now())::timestamp)"
+ for sub_ids in cr.split_for_in_conditions(ids):
+ ids_to_check = []
+ for id in sub_ids:
+ id_ref = "%s,%s" % (self._name, id)
+ update_date = context[self.CONCURRENCY_CHECK_FIELD].pop(id_ref, None)
+ if update_date:
+ ids_to_check.extend([id, update_date])
+ if not ids_to_check:
+ continue
+ cr.execute("SELECT id FROM %s WHERE %s" % (self._table, " OR ".join([check_clause]*(len(ids_to_check)/2))), tuple(ids_to_check))
+ res = cr.fetchone()
+ if res:
+ # mention the first one only to keep the error message readable
+ raise except_orm('ConcurrencyException', _('A document was modified since you last viewed it (%s:%d)') % (self._description, res[0]))
+
+ def check_access_rule(self, cr, uid, ids, operation, context=None):
+ """Verifies that the operation given by ``operation`` is allowed for the user
+ according to ir.rules.
+
+ :param operation: one of ``write``, ``unlink``
+ :raise except_orm: * if current ir.rules do not permit this operation.
+ :return: None if the operation is allowed
+ """
+ where_clause, where_params, tables = self.pool.get('ir.rule').domain_get(cr, uid, self._name, operation, context=context)
+ if where_clause:
+ where_clause = ' and ' + ' and '.join(where_clause)
+ for sub_ids in cr.split_for_in_conditions(ids):
+ cr.execute('SELECT ' + self._table + '.id FROM ' + ','.join(tables) +
+ ' WHERE ' + self._table + '.id IN %s' + where_clause,
+ [sub_ids] + where_params)
+ if cr.rowcount != len(sub_ids):
+ raise except_orm(_('AccessError'),
+ _('Operation prohibited by access rules, or performed on an already deleted document (Operation: %s, Document type: %s).')
+ % (operation, self._description))
+
+ def unlink(self, cr, uid, ids, context=None):
+ """
+ Delete records with given ids
+
+ :param cr: database cursor
+ :param uid: current user id
+ :param ids: id or list of ids
+ :param context: (optional) context arguments, like lang, time zone
+ :return: True
+ :raise AccessError: * if user has no unlink rights on the requested object
+ * if user tries to bypass access rules for unlink on the requested object
+ :raise UserError: if the record is default property for other records
+
+ """
+ if not ids:
+ return True
+ if isinstance(ids, (int, long)):
+ ids = [ids]
+
+ result_store = self._store_get_values(cr, uid, ids, None, context)
+
+ self._check_concurrency(cr, ids, context)
+
+ self.pool.get('ir.model.access').check(cr, uid, self._name, 'unlink', context=context)
+
+ properties = self.pool.get('ir.property')
+ domain = [('res_id', '=', False),
+ ('value_reference', 'in', ['%s,%s' % (self._name, i) for i in ids]),
+ ]
+ if properties.search(cr, uid, domain, context=context):
+ raise except_orm(_('Error'), _('Unable to delete this document because it is used as a default property'))
+
+ wf_service = netsvc.LocalService("workflow")
+ for oid in ids:
+ wf_service.trg_delete(uid, self._name, oid, cr)
+
+
+ self.check_access_rule(cr, uid, ids, 'unlink', context=context)
+ for sub_ids in cr.split_for_in_conditions(ids):
+ cr.execute('delete from ' + self._table + ' ' \
+ 'where id IN %s', (sub_ids,))
+ for order, object, store_ids, fields in result_store:
+ if object != self._name:
+ obj = self.pool.get(object)
+ cr.execute('select id from '+obj._table+' where id IN %s', (tuple(store_ids),))
+ rids = map(lambda x: x[0], cr.fetchall())
+ if rids:
+ obj._store_set_values(cr, uid, rids, fields, context)
+ return True
+
+ #
+ # TODO: Validate
+ #
+ def write(self, cr, user, ids, vals, context=None):
+ """
+ Update records with given ids with the given field values
+
+ :param cr: database cursor
+ :param user: current user id
+ :type user: integer
+ :param ids: object id or list of object ids to update according to **vals**
+ :param vals: field values to update, e.g {'field_name': new_field_value, ...}
+ :type vals: dictionary
+ :param context: (optional) context arguments, e.g. {'lang': 'en_us', 'tz': 'UTC', ...}
+ :type context: dictionary
+ :return: True
+ :raise AccessError: * if user has no write rights on the requested object
+ * if user tries to bypass access rules for write on the requested object
+ :raise ValidateError: if user tries to enter invalid value for a field that is not in selection
+ :raise UserError: if a loop would be created in a hierarchy of objects a result of the operation (such as setting an object as its own parent)
+
+ **Note**: The type of field values to pass in ``vals`` for relationship fields is specific:
+
+ + For a many2many field, a list of tuples is expected.
+ Here is the list of tuple that are accepted, with the corresponding semantics ::
+
+ (0, 0, { values }) link to a new record that needs to be created with the given values dictionary
+ (1, ID, { values }) update the linked record with id = ID (write *values* on it)
+ (2, ID) remove and delete the linked record with id = ID (calls unlink on ID, that will delete the object completely, and the link to it as well)
+ (3, ID) cut the link to the linked record with id = ID (delete the relationship between the two objects but does not delete the target object itself)
+ (4, ID) link to existing record with id = ID (adds a relationship)
+ (5) unlink all (like using (3,ID) for all linked records)
+ (6, 0, [IDs]) replace the list of linked IDs (like using (5) then (4,ID) for each ID in the list of IDs)
+
+ Example:
+ [(6, 0, [8, 5, 6, 4])] sets the many2many to ids [8, 5, 6, 4]
+
+ + For a one2many field, a lits of tuples is expected.
+ Here is the list of tuple that are accepted, with the corresponding semantics ::
+
+ (0, 0, { values }) link to a new record that needs to be created with the given values dictionary
+ (1, ID, { values }) update the linked record with id = ID (write *values* on it)
+ (2, ID) remove and delete the linked record with id = ID (calls unlink on ID, that will delete the object completely, and the link to it as well)
+
+ Example:
+ [(0, 0, {'field_name':field_value_record1, ...}), (0, 0, {'field_name':field_value_record2, ...})]
+
+ + For a many2one field, simply use the ID of target record, which must already exist, or ``False`` to remove the link.
+ + For a reference field, use a string with the model name, a comma, and the target object id (example: ``'product.product, 5'``)
+
+ """
+ readonly = None
+ for field in vals.copy():
+ fobj = None
+ if field in self._columns:
+ fobj = self._columns[field]
+ elif field in self._inherit_fields:
+ fobj = self._inherit_fields[field][2]
+ if not fobj:
+ continue
+ groups = fobj.write
+
+ if groups:
+ edit = False
+ for group in groups:
+ module = group.split(".")[0]
+ grp = group.split(".")[1]
+ cr.execute("select count(*) from res_groups_users_rel where gid IN (select res_id from ir_model_data where name=%s and module=%s and model=%s) and uid=%s", \
+ (grp, module, 'res.groups', user))
+ readonly = cr.fetchall()
+ if readonly[0][0] >= 1:
+ edit = True
+ break
+ elif readonly[0][0] == 0:
+ edit = False
+ else:
+ edit = False
+
+ if not edit:
+ vals.pop(field)
+
+ if not context:
+ context = {}
+ if not ids:
+ return True
+ if isinstance(ids, (int, long)):
+ ids = [ids]
+
+ self._check_concurrency(cr, ids, context)
+ self.pool.get('ir.model.access').check(cr, user, self._name, 'write', context=context)
+
+ result = self._store_get_values(cr, user, ids, vals.keys(), context) or []
+
+ # No direct update of parent_left/right
+ vals.pop('parent_left', None)
+ vals.pop('parent_right', None)
+
+ parents_changed = []
++ parent_order = self._parent_order or self._order
+ if self._parent_store and (self._parent_name in vals):
+ # The parent_left/right computation may take up to
+ # 5 seconds. No need to recompute the values if the
- # parent is the same. Get the current value of the parent
++ # parent is the same.
++ # Note: to respect parent_order, nodes must be processed in
++ # order, so ``parents_changed`` must be ordered properly.
+ parent_val = vals[self._parent_name]
+ if parent_val:
- query = "SELECT id FROM %s WHERE id IN %%s AND (%s != %%s OR %s IS NULL)" % \
- (self._table, self._parent_name, self._parent_name)
++ query = "SELECT id FROM %s WHERE id IN %%s AND (%s != %%s OR %s IS NULL) ORDER BY %s" % \
++ (self._table, self._parent_name, self._parent_name, parent_order)
+ cr.execute(query, (tuple(ids), parent_val))
+ else:
- query = "SELECT id FROM %s WHERE id IN %%s AND (%s IS NOT NULL)" % \
- (self._table, self._parent_name)
++ query = "SELECT id FROM %s WHERE id IN %%s AND (%s IS NOT NULL) ORDER BY %s" % \
++ (self._table, self._parent_name, parent_order)
+ cr.execute(query, (tuple(ids),))
+ parents_changed = map(operator.itemgetter(0), cr.fetchall())
+
+ upd0 = []
+ upd1 = []
+ upd_todo = []
+ updend = []
+ direct = []
+ totranslate = context.get('lang', False) and (context['lang'] != 'en_US')
+ for field in vals:
+ if field in self._columns:
+ if self._columns[field]._classic_write and not (hasattr(self._columns[field], '_fnct_inv')):
+ if (not totranslate) or not self._columns[field].translate:
+ upd0.append('"'+field+'"='+self._columns[field]._symbol_set[0])
+ upd1.append(self._columns[field]._symbol_set[1](vals[field]))
+ direct.append(field)
+ else:
+ upd_todo.append(field)
+ else:
+ updend.append(field)
+ if field in self._columns \
+ and hasattr(self._columns[field], 'selection') \
+ and vals[field]:
+ self._check_selection_field_value(cr, user, field, vals[field], context=context)
+
+ if self._log_access:
+ upd0.append('write_uid=%s')
+ upd0.append('write_date=now()')
+ upd1.append(user)
+
+ if len(upd0):
+ self.check_access_rule(cr, user, ids, 'write', context=context)
+ for sub_ids in cr.split_for_in_conditions(ids):
+ cr.execute('update ' + self._table + ' set ' + ','.join(upd0) + ' ' \
+ 'where id IN %s', upd1 + [sub_ids])
+ if cr.rowcount != len(sub_ids):
+ raise except_orm(_('AccessError'),
+ _('One of the records you are trying to modify has already been deleted (Document type: %s).') % self._description)
+
+ if totranslate:
+ # TODO: optimize
+ for f in direct:
+ if self._columns[f].translate:
+ src_trans = self.pool.get(self._name).read(cr, user, ids, [f])[0][f]
+ if not src_trans:
+ src_trans = vals[f]
+ # Inserting value to DB
+ self.write(cr, user, ids, {f: vals[f]})
+ self.pool.get('ir.translation')._set_ids(cr, user, self._name+','+f, 'model', context['lang'], ids, vals[f], src_trans)
+
+
+ # call the 'set' method of fields which are not classic_write
+ upd_todo.sort(lambda x, y: self._columns[x].priority-self._columns[y].priority)
+
+ # default element in context must be removed when call a one2many or many2many
+ rel_context = context.copy()
+ for c in context.items():
+ if c[0].startswith('default_'):
+ del rel_context[c[0]]
+
+ for field in upd_todo:
+ for id in ids:
+ result += self._columns[field].set(cr, self, id, field, vals[field], user, context=rel_context) or []
+
+ for table in self._inherits:
+ col = self._inherits[table]
+ nids = []
+ for sub_ids in cr.split_for_in_conditions(ids):
+ cr.execute('select distinct "'+col+'" from "'+self._table+'" ' \
+ 'where id IN %s', (sub_ids,))
+ nids.extend([x[0] for x in cr.fetchall()])
+
+ v = {}
+ for val in updend:
+ if self._inherit_fields[val][0] == table:
+ v[val] = vals[val]
+ if v:
+ self.pool.get(table).write(cr, user, nids, v, context)
+
+ self._validate(cr, user, ids, context)
+
+ # TODO: use _order to set dest at the right position and not first node of parent
+ # We can't defer parent_store computation because the stored function
+ # fields that are computer may refer (directly or indirectly) to
+ # parent_left/right (via a child_of domain)
+ if parents_changed:
+ if self.pool._init:
+ self.pool._init_parent[self._name] = True
+ else:
+ order = self._parent_order or self._order
+ parent_val = vals[self._parent_name]
+ if parent_val:
+ clause, params = '%s=%%s' % (self._parent_name,), (parent_val,)
+ else:
+ clause, params = '%s IS NULL' % (self._parent_name,), ()
+
+ for id in parents_changed:
+ cr.execute('SELECT parent_left, parent_right FROM %s WHERE id=%%s' % (self._table,), (id,))
+ pleft, pright = cr.fetchone()
+ distance = pright - pleft + 1
+
+ # Positions of current siblings, to locate proper insertion point;
+ # this can _not_ be fetched outside the loop, as it needs to be refreshed
+ # after each update, in case several nodes are sequentially inserted one
+ # next to the other (i.e computed incrementally)
- cr.execute('SELECT parent_right, id FROM %s WHERE %s ORDER BY %s' % (self._table, clause, order), params)
++ cr.execute('SELECT parent_right, id FROM %s WHERE %s ORDER BY %s' % (self._table, clause, parent_order), params)
+ parents = cr.fetchall()
+
+ # Find Position of the element
+ position = None
+ for (parent_pright, parent_id) in parents:
+ if parent_id == id:
+ break
+ position = parent_pright + 1
+
+ # It's the first node of the parent
+ if not position:
+ if not parent_val:
+ position = 1
+ else:
+ cr.execute('select parent_left from '+self._table+' where id=%s', (parent_val,))
+ position = cr.fetchone()[0] + 1
+
+ if pleft < position <= pright:
+ raise except_orm(_('UserError'), _('Recursivity Detected.'))
+
+ if pleft < position:
+ cr.execute('update '+self._table+' set parent_left=parent_left+%s where parent_left>=%s', (distance, position))
+ cr.execute('update '+self._table+' set parent_right=parent_right+%s where parent_right>=%s', (distance, position))
+ cr.execute('update '+self._table+' set parent_left=parent_left+%s, parent_right=parent_right+%s where parent_left>=%s and parent_left<%s', (position-pleft, position-pleft, pleft, pright))
+ else:
+ cr.execute('update '+self._table+' set parent_left=parent_left+%s where parent_left>=%s', (distance, position))
+ cr.execute('update '+self._table+' set parent_right=parent_right+%s where parent_right>=%s', (distance, position))
+ cr.execute('update '+self._table+' set parent_left=parent_left-%s, parent_right=parent_right-%s where parent_left>=%s and parent_left<%s', (pleft-position+distance, pleft-position+distance, pleft+distance, pright+distance))
+
+ result += self._store_get_values(cr, user, ids, vals.keys(), context)
+ result.sort()
+
+ done = {}
+ for order, object, ids_to_update, fields_to_recompute in result:
+ key = (object, tuple(fields_to_recompute))
+ done.setdefault(key, {})
+ # avoid to do several times the same computation
+ todo = []
+ for id in ids_to_update:
+ if id not in done[key]:
+ done[key][id] = True
+ todo.append(id)
+ self.pool.get(object)._store_set_values(cr, user, todo, fields_to_recompute, context)
+
+ wf_service = netsvc.LocalService("workflow")
+ for id in ids:
+ wf_service.trg_write(user, self._name, id, cr)
+ return True
+
+ #
+ # TODO: Should set perm to user.xxx
+ #
+ def create(self, cr, user, vals, context=None):
+ """
+ Create new record with specified value
+
+ :param cr: database cursor
+ :param user: current user id
+ :type user: integer
+ :param vals: field values for new record, e.g {'field_name': field_value, ...}
+ :type vals: dictionary
+ :param context: optional context arguments, e.g. {'lang': 'en_us', 'tz': 'UTC', ...}
+ :type context: dictionary
+ :return: id of new record created
+ :raise AccessError: * if user has no create rights on the requested object
+ * if user tries to bypass access rules for create on the requested object
+ :raise ValidateError: if user tries to enter invalid value for a field that is not in selection
+ :raise UserError: if a loop would be created in a hierarchy of objects a result of the operation (such as setting an object as its own parent)
+
+ **Note**: The type of field values to pass in ``vals`` for relationship fields is specific.
+ Please see the description of the :py:meth:`~osv.osv.osv.write` method for details about the possible values and how
+ to specify them.
+
+ """
+ if not context:
+ context = {}
+ self.pool.get('ir.model.access').check(cr, user, self._name, 'create', context=context)
+
+ vals = self._add_missing_default_values(cr, user, vals, context)
+
+ tocreate = {}
+ for v in self._inherits:
+ if self._inherits[v] not in vals:
+ tocreate[v] = {}
+ else:
+ tocreate[v] = {'id': vals[self._inherits[v]]}
+ (upd0, upd1, upd2) = ('', '', [])
+ upd_todo = []
+ for v in vals.keys():
+ if v in self._inherit_fields:
+ (table, col, col_detail) = self._inherit_fields[v]
+ tocreate[table][v] = vals[v]
+ del vals[v]
+ else:
+ if (v not in self._inherit_fields) and (v not in self._columns):
+ del vals[v]
+
+ # Try-except added to filter the creation of those records whose filds are readonly.
+ # Example : any dashboard which has all the fields readonly.(due to Views(database views))
+ try:
+ cr.execute("SELECT nextval('"+self._sequence+"')")
+ except:
+ raise except_orm(_('UserError'),
+ _('You cannot perform this operation. New Record Creation is not allowed for this object as this object is for reporting purpose.'))
+
+ id_new = cr.fetchone()[0]
+ for table in tocreate:
+ if self._inherits[table] in vals:
+ del vals[self._inherits[table]]
+
+ record_id = tocreate[table].pop('id', None)
+
+ if record_id is None or not record_id:
+ record_id = self.pool.get(table).create(cr, user, tocreate[table], context=context)
+ else:
+ self.pool.get(table).write(cr, user, [record_id], tocreate[table], context=context)
+
+ upd0 += ',' + self._inherits[table]
+ upd1 += ',%s'
+ upd2.append(record_id)
+
+ #Start : Set bool fields to be False if they are not touched(to make search more powerful)
+ bool_fields = [x for x in self._columns.keys() if self._columns[x]._type=='boolean']
+
+ for bool_field in bool_fields:
+ if bool_field not in vals:
+ vals[bool_field] = False
+ #End
+ for field in vals.copy():
+ fobj = None
+ if field in self._columns:
+ fobj = self._columns[field]
+ else:
+ fobj = self._inherit_fields[field][2]
+ if not fobj:
+ continue
+ groups = fobj.write
+ if groups:
+ edit = False
+ for group in groups:
+ module = group.split(".")[0]
+ grp = group.split(".")[1]
+ cr.execute("select count(*) from res_groups_users_rel where gid IN (select res_id from ir_model_data where name='%s' and module='%s' and model='%s') and uid=%s" % \
+ (grp, module, 'res.groups', user))
+ readonly = cr.fetchall()
+ if readonly[0][0] >= 1:
+ edit = True
+ break
+ elif readonly[0][0] == 0:
+ edit = False
+ else:
+ edit = False
+
+ if not edit:
+ vals.pop(field)
+ for field in vals:
+ if self._columns[field]._classic_write:
+ upd0 = upd0 + ',"' + field + '"'
+ upd1 = upd1 + ',' + self._columns[field]._symbol_set[0]
+ upd2.append(self._columns[field]._symbol_set[1](vals[field]))
+ else:
+ if not isinstance(self._columns[field], fields.related):
+ upd_todo.append(field)
+ if field in self._columns \
+ and hasattr(self._columns[field], 'selection') \
+ and vals[field]:
+ self._check_selection_field_value(cr, user, field, vals[field], context=context)
+ if self._log_access:
+ upd0 += ',create_uid,create_date'
+ upd1 += ',%s,now()'
+ upd2.append(user)
+ cr.execute('insert into "'+self._table+'" (id'+upd0+") values ("+str(id_new)+upd1+')', tuple(upd2))
+ self.check_access_rule(cr, user, [id_new], 'create', context=context)
+ upd_todo.sort(lambda x, y: self._columns[x].priority-self._columns[y].priority)
+
+ if self._parent_store and not context.get('defer_parent_store_computation'):
+ if self.pool._init:
+ self.pool._init_parent[self._name] = True
+ else:
+ parent = vals.get(self._parent_name, False)
+ if parent:
+ cr.execute('select parent_right from '+self._table+' where '+self._parent_name+'=%s order by '+(self._parent_order or self._order), (parent,))
+ pleft_old = None
+ result_p = cr.fetchall()
+ for (pleft,) in result_p:
+ if not pleft:
+ break
+ pleft_old = pleft
+ if not pleft_old:
+ cr.execute('select parent_left from '+self._table+' where id=%s', (parent,))
+ pleft_old = cr.fetchone()[0]
+ pleft = pleft_old
+ else:
+ cr.execute('select max(parent_right) from '+self._table)
+ pleft = cr.fetchone()[0] or 0
+ cr.execute('update '+self._table+' set parent_left=parent_left+2 where parent_left>%s', (pleft,))
+ cr.execute('update '+self._table+' set parent_right=parent_right+2 where parent_right>%s', (pleft,))
+ cr.execute('update '+self._table+' set parent_left=%s,parent_right=%s where id=%s', (pleft+1, pleft+2, id_new))
+
+ # default element in context must be remove when call a one2many or many2many
+ rel_context = context.copy()
+ for c in context.items():
+ if c[0].startswith('default_'):
+ del rel_context[c[0]]
+
+ result = []
+ for field in upd_todo:
+ result += self._columns[field].set(cr, self, id_new, field, vals[field], user, rel_context) or []
+ self._validate(cr, user, [id_new], context)
+
+ if not context.get('no_store_function', False):
+ result += self._store_get_values(cr, user, [id_new], vals.keys(), context)
+ result.sort()
+ done = []
+ for order, object, ids, fields2 in result:
+ if not (object, ids, fields2) in done:
+ self.pool.get(object)._store_set_values(cr, user, ids, fields2, context)
+ done.append((object, ids, fields2))
+
+ if self._log_create and not (context and context.get('no_store_function', False)):
+ message = self._description + \
+ " '" + \
+ self.name_get(cr, user, [id_new], context=context)[0][1] + \
+ "' " + _("created.")
+ self.log(cr, user, id_new, message, True, context=context)
+ wf_service = netsvc.LocalService("workflow")
+ wf_service.trg_create(user, self._name, id_new, cr)
+ return id_new
+
+ def _store_get_values(self, cr, uid, ids, fields, context):
+ """Returns an ordered list of fields.functions to call due to
+ an update operation on ``fields`` of records with ``ids``,
+ obtained by calling the 'store' functions of these fields,
+ as setup by their 'store' attribute.
+
+ :return: [(priority, model_name, [record_ids,], [function_fields,])]
+ """
+ # FIXME: rewrite, cleanup, use real variable names
+ # e.g.: http://pastie.org/1222060
+ result = {}
+ fncts = self.pool._store_function.get(self._name, [])
+ for fnct in range(len(fncts)):
+ if fncts[fnct][3]:
+ ok = False
+ if not fields:
+ ok = True
+ for f in (fields or []):
+ if f in fncts[fnct][3]:
+ ok = True
+ break
+ if not ok:
+ continue
+
+ result.setdefault(fncts[fnct][0], {})
+
+ # uid == 1 for accessing objects having rules defined on store fields
+ ids2 = fncts[fnct][2](self, cr, 1, ids, context)
+ for id in filter(None, ids2):
+ result[fncts[fnct][0]].setdefault(id, [])
+ result[fncts[fnct][0]][id].append(fnct)
+ dict = {}
+ for object in result:
+ k2 = {}
+ for id, fnct in result[object].items():
+ k2.setdefault(tuple(fnct), [])
+ k2[tuple(fnct)].append(id)
+ for fnct, id in k2.items():
+ dict.setdefault(fncts[fnct[0]][4], [])
+ dict[fncts[fnct[0]][4]].append((fncts[fnct[0]][4], object, id, map(lambda x: fncts[x][1], fnct)))
+ result2 = []
+ tmp = dict.keys()
+ tmp.sort()
+ for k in tmp:
+ result2 += dict[k]
+ return result2
+
+ def _store_set_values(self, cr, uid, ids, fields, context):
+ """Calls the fields.function's "implementation function" for all ``fields``, on records with ``ids`` (taking care of
+ respecting ``multi`` attributes), and stores the resulting values in the database directly."""
+ if not ids:
+ return True
+ field_flag = False
+ field_dict = {}
+ if self._log_access:
+ cr.execute('select id,write_date from '+self._table+' where id IN %s', (tuple(ids),))
+ res = cr.fetchall()
+ for r in res:
+ if r[1]:
+ field_dict.setdefault(r[0], [])
+ res_date = time.strptime((r[1])[:19], '%Y-%m-%d %H:%M:%S')
+ write_date = datetime.datetime.fromtimestamp(time.mktime(res_date))
+ for i in self.pool._store_function.get(self._name, []):
+ if i[5]:
+ up_write_date = write_date + datetime.timedelta(hours=i[5])
+ if datetime.datetime.now() < up_write_date:
+ if i[1] in fields:
+ field_dict[r[0]].append(i[1])
+ if not field_flag:
+ field_flag = True
+ todo = {}
+ keys = []
+ for f in fields:
+ if self._columns[f]._multi not in keys:
+ keys.append(self._columns[f]._multi)
+ todo.setdefault(self._columns[f]._multi, [])
+ todo[self._columns[f]._multi].append(f)
+ for key in keys:
+ val = todo[key]
+ if key:
+ # uid == 1 for accessing objects having rules defined on store fields
+ result = self._columns[val[0]].get(cr, self, ids, val, 1, context=context)
+ for id, value in result.items():
+ if field_flag:
+ for f in value.keys():
+ if f in field_dict[id]:
+ value.pop(f)
+ upd0 = []
+ upd1 = []
+ for v in value:
+ if v not in val:
+ continue
+ if self._columns[v]._type in ('many2one', 'one2one'):
+ try:
+ value[v] = value[v][0]
+ except:
+ pass
+ upd0.append('"'+v+'"='+self._columns[v]._symbol_set[0])
+ upd1.append(self._columns[v]._symbol_set[1](value[v]))
+ upd1.append(id)
+ if upd0 and upd1:
+ cr.execute('update "' + self._table + '" set ' + \
+ ','.join(upd0) + ' where id = %s', upd1)
+
+ else:
+ for f in val:
+ # uid == 1 for accessing objects having rules defined on store fields
+ result = self._columns[f].get(cr, self, ids, f, 1, context=context)
+ for r in result.keys():
+ if field_flag:
+ if r in field_dict.keys():
+ if f in field_dict[r]:
+ result.pop(r)
+ for id, value in result.items():
+ if self._columns[f]._type in ('many2one', 'one2one'):
+ try:
+ value = value[0]
+ except:
+ pass
+ cr.execute('update "' + self._table + '" set ' + \
+ '"'+f+'"='+self._columns[f]._symbol_set[0] + ' where id = %s', (self._columns[f]._symbol_set[1](value), id))
+ return True
+
+ #
+ # TODO: Validate
+ #
+ def perm_write(self, cr, user, ids, fields, context=None):
+ raise NotImplementedError(_('This method does not exist anymore'))
+
+ # TODO: ameliorer avec NULL
+ def _where_calc(self, cr, user, domain, active_test=True, context=None):
+ """Computes the WHERE clause needed to implement an OpenERP domain.
+ :param domain: the domain to compute
+ :type domain: list
+ :param active_test: whether the default filtering of records with ``active``
+ field set to ``False`` should be applied.
+ :return: the query expressing the given domain as provided in domain
+ :rtype: osv.query.Query
+ """
+ if not context:
+ context = {}
+ domain = domain[:]
+ # if the object has a field named 'active', filter out all inactive
+ # records unless they were explicitely asked for
+ if 'active' in self._columns and (active_test and context.get('active_test', True)):
+ if domain:
+ active_in_args = False
+ for a in domain:
+ if a[0] == 'active':
+ active_in_args = True
+ if not active_in_args:
+ domain.insert(0, ('active', '=', 1))
+ else:
+ domain = [('active', '=', 1)]
+
+ if domain:
+ import expression
+ e = expression.expression(domain)
+ e.parse(cr, user, self, context)
+ tables = e.get_tables()
+ where_clause, where_params = e.to_sql()
+ where_clause = where_clause and [where_clause] or []
+ else:
+ where_clause, where_params, tables = [], [], ['"%s"' % self._table]
+
+ return Query(tables, where_clause, where_params)
+
+ def _check_qorder(self, word):
+ if not regex_order.match(word):
+ raise except_orm(_('AccessError'), _('Invalid "order" specified. A valid "order" specification is a comma-separated list of valid field names (optionally followed by asc/desc for the direction)'))
+ return True
+
+ def _apply_ir_rules(self, cr, uid, query, mode='read', context=None):
+ """Add what's missing in ``query`` to implement all appropriate ir.rules
+ (using the ``model_name``'s rules or the current model's rules if ``model_name`` is None)
+
+ :param query: the current query object
+ """
+ def apply_rule(added_clause, added_params, added_tables, parent_model=None, child_object=None):
+ if added_clause:
+ if parent_model and child_object:
+ # as inherited rules are being applied, we need to add the missing JOIN
+ # to reach the parent table (if it was not JOINed yet in the query)
+ child_object._inherits_join_add(parent_model, query)
+ query.where_clause += added_clause
+ query.where_clause_params += added_params
+ for table in added_tables:
+ if table not in query.tables:
+ query.tables.append(table)
+ return True
+ return False
+
+ # apply main rules on the object
+ rule_obj = self.pool.get('ir.rule')
+ apply_rule(*rule_obj.domain_get(cr, uid, self._name, mode, context=context))
+
+ # apply ir.rules from the parents (through _inherits)
+ for inherited_model in self._inherits:
+ kwargs = dict(parent_model=inherited_model, child_object=self) #workaround for python2.5
+ apply_rule(*rule_obj.domain_get(cr, uid, inherited_model, mode, context=context), **kwargs)
+
+ def _generate_m2o_order_by(self, order_field, query):
+ """
+ Add possibly missing JOIN to ``query`` and generate the ORDER BY clause for m2o fields,
+ either native m2o fields or function/related fields that are stored, including
+ intermediate JOINs for inheritance if required.
+
+ :return: the qualified field name to use in an ORDER BY clause to sort by ``order_field``
+ """
+ if order_field not in self._columns and order_field in self._inherit_fields:
+ # also add missing joins for reaching the table containing the m2o field
+ qualified_field = self._inherits_join_calc(order_field, query)
+ order_field_column = self._inherit_fields[order_field][2]
+ else:
+ qualified_field = '"%s"."%s"' % (self._table, order_field)
+ order_field_column = self._columns[order_field]
+
+ assert order_field_column._type == 'many2one', 'Invalid field passed to _generate_m2o_order_by()'
+ if not order_field_column._classic_write and not getattr(order_field_column, 'store', False):
+ logging.getLogger('orm.search').debug("Many2one function/related fields must be stored " \
+ "to be used as ordering fields! Ignoring sorting for %s.%s",
+ self._name, order_field)
+ return
+
+ # figure out the applicable order_by for the m2o
+ dest_model = self.pool.get(order_field_column._obj)
+ m2o_order = dest_model._order
+ if not regex_order.match(m2o_order):
+ # _order is complex, can't use it here, so we default to _rec_name
+ m2o_order = dest_model._rec_name
+ else:
+ # extract the field names, to be able to qualify them and add desc/asc
+ m2o_order_list = []
+ for order_part in m2o_order.split(","):
+ m2o_order_list.append(order_part.strip().split(" ",1)[0].strip())
+ m2o_order = m2o_order_list
+
+ # Join the dest m2o table if it's not joined yet. We use [LEFT] OUTER join here
+ # as we don't want to exclude results that have NULL values for the m2o
+ src_table, src_field = qualified_field.replace('"','').split('.', 1)
+ query.join((src_table, dest_model._table, src_field, 'id'), outer=True)
+ qualify = lambda field: '"%s"."%s"' % (dest_model._table, field)
+ return map(qualify, m2o_order) if isinstance(m2o_order, list) else qualify(m2o_order)
+
+
+ def _generate_order_by(self, order_spec, query):
+ """
+ Attempt to consruct an appropriate ORDER BY clause based on order_spec, which must be
+ a comma-separated list of valid field names, optionally followed by an ASC or DESC direction.
+
+ :raise" except_orm in case order_spec is malformed
+ """
+ order_by_clause = self._order
+ if order_spec:
+ order_by_elements = []
+ self._check_qorder(order_spec)
+ for order_part in order_spec.split(','):
+ order_split = order_part.strip().split(' ')
+ order_field = order_split[0].strip()
+ order_direction = order_split[1].strip() if len(order_split) == 2 else ''
+ inner_clause = None
+ if order_field == 'id':
+ order_by_clause = '"%s"."%s"' % (self._table, order_field)
+ elif order_field in self._columns:
+ order_column = self._columns[order_field]
+ if order_column._classic_read:
+ inner_clause = '"%s"."%s"' % (self._table, order_field)
+ elif order_column._type == 'many2one':
+ inner_clause = self._generate_m2o_order_by(order_field, query)
+ else:
+ continue # ignore non-readable or "non-joinable" fields
+ elif order_field in self._inherit_fields:
+ parent_obj = self.pool.get(self._inherit_fields[order_field][0])
+ order_column = parent_obj._columns[order_field]
+ if order_column._classic_read:
+ inner_clause = self._inherits_join_calc(order_field, query)
+ elif order_column._type == 'many2one':
+ inner_clause = self._generate_m2o_order_by(order_field, query)
+ else:
+ continue # ignore non-readable or "non-joinable" fields
+ if inner_clause:
+ if isinstance(inner_clause, list):
+ for clause in inner_clause:
+ order_by_elements.append("%s %s" % (clause, order_direction))
+ else:
+ order_by_elements.append("%s %s" % (inner_clause, order_direction))
+ if order_by_elements:
+ order_by_clause = ",".join(order_by_elements)
+
+ return order_by_clause and (' ORDER BY %s ' % order_by_clause) or ''
+
+ def _search(self, cr, user, args, offset=0, limit=None, order=None, context=None, count=False, access_rights_uid=None):
+ """
+ Private implementation of search() method, allowing specifying the uid to use for the access right check.
+ This is useful for example when filling in the selection list for a drop-down and avoiding access rights errors,
+ by specifying ``access_rights_uid=1`` to bypass access rights check, but not ir.rules!
+ This is ok at the security level because this method is private and not callable through XML-RPC.
+
+ :param access_rights_uid: optional user ID to use when checking access rights
+ (not for ir.rules, this is only for ir.model.access)
+ """
+ if context is None:
+ context = {}
+ self.pool.get('ir.model.access').check(cr, access_rights_uid or user, self._name, 'read', context=context)
+
+ query = self._where_calc(cr, user, args, context=context)
+ self._apply_ir_rules(cr, user, query, 'read', context=context)
+ order_by = self._generate_order_by(order, query)
+ from_clause, where_clause, where_clause_params = query.get_sql()
+
+ limit_str = limit and ' limit %d' % limit or ''
+ offset_str = offset and ' offset %d' % offset or ''
+ where_str = where_clause and (" WHERE %s" % where_clause) or ''
+
+ if count:
+ cr.execute('SELECT count("%s".id) FROM ' % self._table + from_clause + where_str + limit_str + offset_str, where_clause_params)
+ res = cr.fetchall()
+ 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]
+
+ # returns the different values ever entered for one field
+ # this is used, for example, in the client when the user hits enter on
+ # a char field
+ def distinct_field_get(self, cr, uid, field, value, args=None, offset=0, limit=None):
+ if not args:
+ args = []
+ if field in self._inherit_fields:
+ return self.pool.get(self._inherit_fields[field][0]).distinct_field_get(cr, uid, field, value, args, offset, limit)
+ else:
+ return self._columns[field].search(cr, self, args, field, value, offset, limit, uid)
+
+ def copy_data(self, cr, uid, id, default=None, context=None):
+ """
+ Copy given record's data with all its fields values
+
+ :param cr: database cursor
+ :param user: current user id
+ :param id: id of the record to copy
+ :param default: field values to override in the original values of the copied record
+ :type default: dictionary
+ :param context: context arguments, like lang, time zone
+ :type context: dictionary
+ :return: dictionary containing all the field values
+ """
+
+ if context is None:
+ context = {}
+
+ # avoid recursion through already copied records in case of circular relationship
+ seen_map = context.setdefault('__copy_data_seen',{})
+ if id in seen_map.setdefault(self._name,[]):
+ return
+ seen_map[self._name].append(id)
+
+ if default is None:
+ default = {}
+ if 'state' not in default:
+ if 'state' in self._defaults:
+ if callable(self._defaults['state']):
+ default['state'] = self._defaults['state'](self, cr, uid, context)
+ else:
+ default['state'] = self._defaults['state']
+
+ context_wo_lang = context.copy()
+ if 'lang' in context:
+ del context_wo_lang['lang']
+ data = self.read(cr, uid, [id,], context=context_wo_lang)
+ if data:
+ data = data[0]
+ else:
+ raise IndexError( _("Record #%d of %s not found, cannot copy!") %( id, self._name))
+
+ fields = self.fields_get(cr, uid, context=context)
+ for f in fields:
+ ftype = fields[f]['type']
+
+ if self._log_access and f in ('create_date', 'create_uid', 'write_date', 'write_uid'):
+ del data[f]
+
+ if f in default:
+ data[f] = default[f]
+ elif 'function' in fields[f]:
+ del data[f]
+ elif ftype == 'many2one':
+ try:
+ data[f] = data[f] and data[f][0]
+ except:
+ pass
+ elif ftype in ('one2many', 'one2one'):
+ res = []
+ rel = self.pool.get(fields[f]['relation'])
+ if data[f]:
+ # duplicate following the order of the ids
+ # because we'll rely on it later for copying
+ # translations in copy_translation()!
+ data[f].sort()
+ for rel_id in data[f]:
+ # the lines are first duplicated using the wrong (old)
+ # parent but then are reassigned to the correct one thanks
+ # to the (0, 0, ...)
+ d = rel.copy_data(cr, uid, rel_id, context=context)
+ if d:
+ res.append((0, 0, d))
+ data[f] = res
+ elif ftype == 'many2many':
+ data[f] = [(6, 0, data[f])]
+
+ del data['id']
+
+ # make sure we don't break the current parent_store structure and
+ # force a clean recompute!
+ for parent_column in ['parent_left', 'parent_right']:
+ data.pop(parent_column, None)
+
+ for v in self._inherits:
+ del data[self._inherits[v]]
+ return data
+
+ def copy_translations(self, cr, uid, old_id, new_id, context=None):
+ if context is None:
+ context = {}
+
+ # avoid recursion through already copied records in case of circular relationship
+ seen_map = context.setdefault('__copy_translations_seen',{})
+ if old_id in seen_map.setdefault(self._name,[]):
+ return
+ seen_map[self._name].append(old_id)
+
+ trans_obj = self.pool.get('ir.translation')
+ fields = self.fields_get(cr, uid, context=context)
+
+ translation_records = []
+ for field_name, field_def in fields.items():
+ # we must recursively copy the translations for o2o and o2m
+ if field_def['type'] in ('one2one', 'one2many'):
+ target_obj = self.pool.get(field_def['relation'])
+ old_record, new_record = self.read(cr, uid, [old_id, new_id], [field_name], context=context)
+ # here we rely on the order of the ids to match the translations
+ # as foreseen in copy_data()
+ old_children = sorted(old_record[field_name])
+ new_children = sorted(new_record[field_name])
+ for (old_child, new_child) in zip(old_children, new_children):
+ target_obj.copy_translations(cr, uid, old_child, new_child, context=context)
+ # and for translatable fields we keep them for copy
+ elif field_def.get('translate'):
+ trans_name = ''
+ if field_name in self._columns:
+ trans_name = self._name + "," + field_name
+ elif field_name in self._inherit_fields:
+ trans_name = self._inherit_fields[field_name][0] + "," + field_name
+ if trans_name:
+ trans_ids = trans_obj.search(cr, uid, [
+ ('name', '=', trans_name),
+ ('res_id', '=', old_id)
+ ])
+ translation_records.extend(trans_obj.read(cr, uid, trans_ids, context=context))
+
+ for record in translation_records:
+ del record['id']
+ record['res_id'] = new_id
+ trans_obj.create(cr, uid, record, context=context)
+
+
+ def copy(self, cr, uid, id, default=None, context=None):
+ """
+ Duplicate record with given id updating it with default values
+
+ :param cr: database cursor
+ :param uid: current user id
+ :param id: id of the record to copy
+ :param default: dictionary of field values to override in the original values of the copied record, e.g: ``{'field_name': overriden_value, ...}``
+ :type default: dictionary
+ :param context: context arguments, like lang, time zone
+ :type context: dictionary
+ :return: True
+
+ """
+ if context is None:
+ context = {}
+ context = context.copy()
+ data = self.copy_data(cr, uid, id, default, context)
+ new_id = self.create(cr, uid, data, context)
+ self.copy_translations(cr, uid, id, new_id, context)
+ return new_id
+
+ def exists(self, cr, uid, ids, context=None):
+ if type(ids) in (int, long):
+ ids = [ids]
+ query = 'SELECT count(1) FROM "%s"' % (self._table)
+ cr.execute(query + "WHERE ID IN %s", (tuple(ids),))
+ return cr.fetchone()[0] == len(ids)
+
+ def check_recursion(self, cr, uid, ids, context=None, parent=None):
+ warnings.warn("You are using deprecated %s.check_recursion(). Please use the '_check_recursion()' instead!" % \
+ self._name, DeprecationWarning, stacklevel=3)
+ assert parent is None or parent in self._columns or parent in self._inherit_fields,\
+ "The 'parent' parameter passed to check_recursion() must be None or a valid field name"
+ return self._check_recursion(cr, uid, ids, context, parent)
+
+ def _check_recursion(self, cr, uid, ids, context=None, parent=None):
+ """
+ Verifies that there is no loop in a hierarchical structure of records,
+ by following the parent relationship using the **parent** field until a loop
+ is detected or until a top-level record is found.
+
+ :param cr: database cursor
+ :param uid: current user id
+ :param ids: list of ids of records to check
+ :param parent: optional parent field name (default: ``self._parent_name = parent_id``)
+ :return: **True** if the operation can proceed safely, or **False** if an infinite loop is detected.
+ """
+
+ if not parent:
+ parent = self._parent_name
+ ids_parent = ids[:]
+ query = 'SELECT distinct "%s" FROM "%s" WHERE id IN %%s' % (parent, self._table)
+ while ids_parent:
+ ids_parent2 = []
+ for i in range(0, len(ids), cr.IN_MAX):
+ sub_ids_parent = ids_parent[i:i+cr.IN_MAX]
+ cr.execute(query, (tuple(sub_ids_parent),))
+ ids_parent2.extend(filter(None, map(lambda x: x[0], cr.fetchall())))
+ ids_parent = ids_parent2
+ for i in ids_parent:
+ if i in ids:
+ return False
+ return True
+
+ def _get_xml_ids(self, cr, uid, ids, *args, **kwargs):
+ """Find out the XML ID(s) of any database record.
+
+ **Synopsis**: ``_get_xml_ids(cr, uid, ids) -> { 'id': ['module.xml_id'] }``
+
+ :return: map of ids to the list of their fully qualified XML IDs
+ (empty list when there's none).
+ """
+ model_data_obj = self.pool.get('ir.model.data')
+ data_ids = model_data_obj.search(cr, uid, [('model', '=', self._name), ('res_id', 'in', ids)])
+ data_results = model_data_obj.read(cr, uid, data_ids, ['module', 'name', 'res_id'])
+ result = {}
+ for id in ids:
+ # can't use dict.fromkeys() as the list would be shared!
+ result[id] = []
+ for record in data_results:
+ result[record['res_id']].append('%(module)s.%(name)s' % record)
+ return result
+
+ def get_xml_id(self, cr, uid, ids, *args, **kwargs):
+ """Find out the XML ID of any database record, if there
+ is one. This method works as a possible implementation
+ for a function field, to be able to add it to any
+ model object easily, referencing it as ``osv.osv.get_xml_id``.
+
+ When multiple XML IDs exist for a record, only one
+ of them is returned (randomly).
+
+ **Synopsis**: ``get_xml_id(cr, uid, ids) -> { 'id': 'module.xml_id' }``
+
+ :return: map of ids to their fully qualified XML ID,
+ defaulting to an empty string when there's none
+ (to be usable as a function field).
+ """
+ results = self._get_xml_ids(cr, uid, ids)
+ for k, v in results.items():
+ if results[k]:
+ results[k] = v[0]
+ else:
+ results[k] = ''
+ return results
+
+ # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+