diff --git a/bin/addons/base/base.sql b/bin/addons/base/base.sql index 71bfda541c4..90da118f475 100644 --- a/bin/addons/base/base.sql +++ b/bin/addons/base/base.sql @@ -288,6 +288,7 @@ CREATE TABLE ir_module_module ( description text, demo boolean default False, web boolean DEFAULT FALSE, + license character varying(32), primary key(id) ); ALTER TABLE ir_module_module add constraint name_uniq unique (name); diff --git a/bin/addons/base/i18n/base.pot b/bin/addons/base/i18n/base.pot index 5207ac37788..a52ba51755a 100644 --- a/bin/addons/base/i18n/base.pot +++ b/bin/addons/base/i18n/base.pot @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: OpenERP Server 6.0.0-rc1\n" "Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2010-11-18 16:11:41+0000\n" -"PO-Revision-Date: 2010-11-18 16:11:41+0000\n" +"POT-Creation-Date: 2010-11-27 03:19:38+0000\n" +"PO-Revision-Date: 2010-11-27 03:19:38+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -112,11 +112,6 @@ msgstr "" msgid "Created Views" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-emblem-important" -msgstr "" - #. module: base #: field:res.partner,ref:0 msgid "Reference" @@ -149,11 +144,6 @@ msgstr "" msgid "Swaziland" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_CANCEL" -msgstr "" - #. module: base #: model:res.partner.category,name:base.res_partner_category_woodsuppliers0 msgid "Wood Suppliers" @@ -199,11 +189,6 @@ msgstr "" msgid "new" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_GOTO_TOP" -msgstr "" - #. module: base #: field:ir.actions.report.xml,multi:0 msgid "On multiple doc." @@ -235,11 +220,6 @@ msgstr "" 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 "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_DELETE" -msgstr "" - #. module: base #: sql_constraint:res.lang:0 msgid "The name of the language must be unique !" @@ -260,11 +240,6 @@ msgstr "" msgid "%y - Year without century as a decimal number [00,99]." msgstr "" -#. module: base -#: selection:maintenance.contract.wizard,state:0 -msgid "Validated" -msgstr "" - #. module: base #: field:res.partner,credit_limit:0 msgid "Credit Limit" @@ -295,11 +270,6 @@ msgstr "" msgid "ir.ui.view_sc" msgstr "" -#. module: base -#: field:res.widget.user,widget_id:0 -msgid "Widget" -msgstr "" - #. module: base #: view:ir.model.access:0 #: field:ir.model.access,group_id:0 @@ -367,6 +337,11 @@ msgstr "" msgid "Bosnian / bosanski jezik" msgstr "" +#. module: base +#: field:ir.ui.menu,web_icon_data:0 +msgid "Web Icons" +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." @@ -377,11 +352,6 @@ msgstr "" msgid "This ISO code is the name of po files to use for translations" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_MEDIA_REWIND" -msgstr "" - #. module: base #: field:ir.actions.todo,note:0 #: selection:ir.property,type:0 @@ -419,11 +389,6 @@ msgstr "" msgid "Palau" msgstr "" -#. module: base -#: view:ir.values:0 -msgid "Action To Launch" -msgstr "" - #. module: base #: view:res.partner:0 msgid "Sales & Purchases" @@ -444,11 +409,6 @@ msgstr "" msgid "Context dictionary as Python expression, empty by default (Default: {})" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_CUT" -msgstr "" - #. module: base #: model:ir.actions.act_window,name:base.ir_action_wizard #: view:ir.actions.wizard:0 @@ -472,11 +432,6 @@ msgstr "" msgid "Select the Action Window, Report, Wizard to be executed." msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-gtk-jump-to-ltr" -msgstr "" - #. module: base #: view:base.language.export:0 msgid "Export done" @@ -538,11 +493,6 @@ msgstr "" msgid "Event Type" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_DIALOG_ERROR" -msgstr "" - #. module: base #: 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." @@ -554,8 +504,8 @@ msgid "Partner Form" msgstr "" #. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_INDEX" +#: selection:base.language.install,lang:0 +msgid "Swedish / svenska" msgstr "" #. module: base @@ -601,11 +551,6 @@ msgstr "" msgid "base.language.export" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_DIALOG_QUESTION" -msgstr "" - #. module: base #: model:res.country,name:base.pg msgid "Papua New Guinea" @@ -616,11 +561,6 @@ msgstr "" msgid "Report Type, e.g. pdf, html, raw, sxw, odt, html2html, mako2html, ..." msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-folder-yellow" -msgstr "" - #. module: base #: model:res.partner.category,name:base.res_partner_category_4 msgid "Basic Partner" @@ -774,36 +714,16 @@ msgstr "" msgid "Type" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_FILE" -msgstr "" - #. module: base #: model:res.country,name:base.gu msgid "Guam (USA)" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_EDIT" -msgstr "" - #. module: base #: model:ir.ui.menu,name:base.menu_hr_project msgid "Human Resources Dashboard" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_GO_DOWN" -msgstr "" - -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_OK" -msgstr "" - #. module: base #: selection:ir.actions.server,state:0 #: selection:workflow.activity,kind:0 @@ -896,11 +816,6 @@ msgstr "" msgid "Module Name" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_JUSTIFY_FILL" -msgstr "" - #. module: base #: model:res.country,name:base.mh msgid "Marshall Islands" @@ -971,16 +886,6 @@ msgstr "" msgid "ir.exports" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_MISSING_IMAGE" -msgstr "" - -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_REMOVE" -msgstr "" - #. module: base #: code:addons/base/module/wizard/base_update_translations.py:0 #, python-format @@ -1047,11 +952,6 @@ msgstr "" 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 -#: field:ir.default,value:0 -msgid "Default Value" -msgstr "" - #. module: base #: field:partner.sms.send,user:0 #: field:res.config.users,login:0 @@ -1080,11 +980,6 @@ msgstr "" msgid "Float" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_COPY" -msgstr "" - #. module: base #: model:ir.model,name:base.model_res_request_link msgid "res.request.link" @@ -1157,11 +1052,6 @@ msgstr "" msgid "You can not read this document! (%s)" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_FIND_AND_REPLACE" -msgstr "" - #. module: base #: model:ir.actions.act_window,help:base.open_module_tree msgid "List all certified modules available to configure your OpenERP. Modules that are installed are flagged as such. You can search for a specific module using the name or the description of the module. You do not need to install modules one by one, you can install many at the same time by clicking on the schedule button in this list. Then, apply the schedule upgrade from Action menu once for all the ones you have scheduled for installation." @@ -1192,11 +1082,6 @@ msgstr "" msgid "Serbian / српски језик" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_YES" -msgstr "" - #. module: base #: 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" @@ -1280,11 +1165,6 @@ msgstr "" msgid "Can not remove root user!" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_JUSTIFY_LEFT" -msgstr "" - #. module: base #: model:res.country,name:base.mw msgid "Malawi" @@ -1340,11 +1220,6 @@ msgstr "" msgid "Could you check your contract information ?" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_CLEAR" -msgstr "" - #. module: base #: help:res.config.users,password:0 #: help:res.users,password:0 @@ -1398,11 +1273,6 @@ msgstr "" msgid "Logo" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_PROPERTIES" -msgstr "" - #. module: base #: view:res.partner.address:0 msgid "Search Contact" @@ -1455,11 +1325,6 @@ msgstr "" 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 -#: selection:ir.ui.menu,icon:0 -msgid "terp-stock_align_left_24" -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." @@ -1538,10 +1403,8 @@ msgid "Enter the field/expression that will return the list. E.g. select the sal msgstr "" #. module: base -#: field:ir.property,fields_id:0 #: selection:ir.translation,type:0 -#: field:multi_company.default,field_id:0 -msgid "Field" +msgid "Wizard Field" msgstr "" #. module: base @@ -1549,16 +1412,6 @@ msgstr "" msgid "Groups (no group = global)" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_SELECT_COLOR" -msgstr "" - -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_NO" -msgstr "" - #. module: base #: selection:res.config.users,view:0 #: selection:res.config.view,view:0 @@ -1592,7 +1445,8 @@ msgid "Madagascar" msgstr "" #. module: base -#: constraint:ir.model:0 +#: code:addons/base/ir/ir_model.py:0 +#, python-format msgid "The Object name must start with x_ and not contain any special character !" msgstr "" @@ -1619,14 +1473,8 @@ msgid "Original View" msgstr "" #. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-camera_test" -msgstr "" - -#. module: base -#: code:addons/base/res/res_user.py:0 -#, python-format -msgid "Make sure you have no users linked with the group(s)!" +#: view:ir.values:0 +msgid "Action To Launch" msgstr "" #. module: base @@ -1759,24 +1607,20 @@ msgstr "" msgid "You Can Not Load Translation For language Due To Invalid Language/Country Code" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_PRINT_PREVIEW" -msgstr "" - #. module: base #: model:res.country,name:base.si msgid "Slovenia" msgstr "" #. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-stock_format-default" +#: model:ir.ui.menu,name:base.menu_email_gateway_form +msgid "Messages" msgstr "" #. module: base -#: model:ir.ui.menu,name:base.menu_email_gateway_form -msgid "Messages" +#: code:addons/base/module/wizard/base_update_translations.py:0 +#, python-format +msgid "Error!" msgstr "" #. module: base @@ -1819,21 +1663,11 @@ msgstr "" msgid "Norfolk Island" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_MEDIA_PLAY" -msgstr "" - #. module: base #: selection:base.language.install,lang:0 msgid "Korean (KR) / 한국어 (KR)" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_OPEN" -msgstr "" - #. module: base #: field:ir.actions.server,action_id:0 #: selection:ir.actions.server,state:0 @@ -1850,11 +1684,6 @@ msgstr "" msgid "Error! You can not create recursive companies." msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-go-home" -msgstr "" - #. module: base #: selection:maintenance.contract,state:0 msgid "Valid" @@ -1913,11 +1742,6 @@ msgstr "" msgid "Sweden" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-document-new" -msgstr "" - #. module: base #: selection:ir.actions.act_window.view,view_mode:0 #: selection:ir.ui.view,type:0 @@ -1936,21 +1760,6 @@ msgstr "" msgid "Bank Account Type" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-project" -msgstr "" - -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-personal+" -msgstr "" - -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-personal-" -msgstr "" - #. module: base #: field:base.language.export,config_logo:0 #: field:base.language.import,config_logo:0 @@ -2017,11 +1826,6 @@ msgstr "" msgid "Draft" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_JUSTIFY_CENTER" -msgstr "" - #. module: base #: selection:res.config.users,view:0 #: selection:res.config.view,view:0 @@ -2118,11 +1922,6 @@ msgstr "" msgid "Prefix" msgstr "" -#. module: base -#: field:ir.actions.server,loop_action:0 -msgid "Loop Action" -msgstr "" - #. module: base #: selection:base.language.install,lang:0 msgid "German / Deutsch" @@ -2179,8 +1978,14 @@ msgid "Module" msgstr "" #. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_BOLD" +#: 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 "" #. module: base @@ -2248,11 +2053,6 @@ msgstr "" msgid "Please specify an action to launch !" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_JUSTIFY_RIGHT" -msgstr "" - #. module: base #: view:res.payterm:0 msgid "Payment Term" @@ -2291,16 +2091,6 @@ msgstr "" msgid "If not set, acts as a default value for new resources" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_SAVE" -msgstr "" - -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-account" -msgstr "" - #. module: base #: code:addons/base/module/module.py:0 #, python-format @@ -2374,6 +2164,11 @@ msgstr "" msgid "VAT" msgstr "" +#. module: base +#: field:ir.ui.menu,web_icon_hover_data:0 +msgid "Web Icons Hover" +msgstr "" + #. module: base #: view:res.lang:0 msgid "12. %w ==> 5 ( Friday is the 6th day)" @@ -2406,18 +2201,14 @@ msgid "Can not create the module file:\n" " %s" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-mail-forward" -msgstr "" - #. module: base #: model:res.country,name:base.nr msgid "Nauru" msgstr "" #. module: base -#: sql_constraint:ir.module.module:0 +#: code:addons/base/module/module.py:0 +#, python-format msgid "The certificate ID of the module must be unique !" msgstr "" @@ -2440,11 +2231,6 @@ msgstr "" msgid "Montenegro" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_QUIT" -msgstr "" - #. module: base #: view:ir.cron:0 msgid "Technical Data" @@ -2473,16 +2259,6 @@ msgstr "" msgid "Libya" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-purchase" -msgstr "" - -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-stock_effects-object-colorize" -msgstr "" - #. module: base #: model:res.country,name:base.cf msgid "Central African Republic" @@ -2493,11 +2269,6 @@ msgstr "" msgid "Liechtenstein" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-dolar_ok!" -msgstr "" - #. module: base #: model:ir.model,name:base.model_partner_sms_send #: view:partner.sms.send:0 @@ -2514,6 +2285,11 @@ msgstr "" msgid "Portugal" 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 #: selection:maintenance.contract,state:0 msgid "Unvalid" @@ -2654,11 +2430,6 @@ msgstr "" msgid "Summary" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-mail-replied" -msgstr "" - #. module: base #: field:multi_company.default,expression:0 msgid "Expression" @@ -2752,8 +2523,8 @@ msgid "License" msgstr "" #. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_SAVE_AS" +#: field:ir.attachment,url:0 +msgid "Url" msgstr "" #. module: base @@ -2794,16 +2565,6 @@ msgstr "" msgid "Equatorial Guinea" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-stage" -msgstr "" - -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-gdu-smart-failing" -msgstr "" - #. module: base #: view:base.module.import:0 #: model:ir.actions.act_window,name:base.action_view_base_module_import @@ -2829,8 +2590,8 @@ msgid "FYROM" msgstr "" #. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_UNDELETE" +#: selection:ir.model.fields,select_level:0 +msgid "Advanced Search" msgstr "" #. module: base @@ -2843,11 +2604,6 @@ msgstr "" msgid "Bolivia" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-folder-orange" -msgstr "" - #. module: base #: model:res.country,name:base.gh msgid "Ghana" @@ -2891,11 +2647,6 @@ msgstr "" msgid "Spanish (PR) / Español (PR)" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_PASTE" -msgstr "" - #. module: base #: model:res.country,name:base.gt msgid "Guatemala" @@ -2914,6 +2665,11 @@ msgstr "" 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" @@ -3007,11 +2763,6 @@ msgstr "" msgid "Suffix value of the record for the sequence" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_CONNECT" -msgstr "" - #. module: base #: selection:base.language.install,lang:0 msgid "Spanish (PY) / Español (PY)" @@ -3105,11 +2856,6 @@ msgstr "" msgid "Expression to be satisfied if we want the transition done." msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-gtk-media-pause" -msgstr "" - #. module: base #: selection:base.language.install,lang:0 msgid "Spanish (PA) / Español (PA)" @@ -3188,11 +2934,6 @@ msgstr "" msgid "If set to true, the action will not be displayed on the right toolbar of a form view." msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-gtk-go-back-rtl" -msgstr "" - #. module: base #: model:res.country,name:base.al msgid "Albania" @@ -3230,11 +2971,6 @@ msgstr "" msgid "Mexico" msgstr "" -#. module: base -#: selection:base.language.install,lang:0 -msgid "Swedish / svenska" -msgstr "" - #. module: base #: model:ir.ui.menu,name:base.menu_base_config_plugins msgid "Plugins" @@ -3467,16 +3203,6 @@ msgstr "" msgid "Translation" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_DIALOG_WARNING" -msgstr "" - -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_ZOOM_IN" -msgstr "" - #. module: base #: selection:res.request,state:0 msgid "closed" @@ -3502,22 +3228,12 @@ msgstr "" msgid "Products" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-accessories-archiver-minus" -msgstr "" - #. module: base #: field:ir.actions.act_window,domain:0 #: field:ir.filters,domain:0 msgid "Domain Value" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_REDO" -msgstr "" - #. module: base #: view:ir.actions.server:0 msgid "SMS Configuration" @@ -3574,14 +3290,14 @@ msgid "Unable to process module \"%s\" because an external dependency is not met msgstr "" #. module: base -#: view:workflow.activity:0 -#: field:workflow.activity,flow_start:0 -msgid "Flow Start" +#: selection:ir.translation,type:0 +msgid "Wizard Button" msgstr "" #. module: base -#: model:ir.model,name:base.model_res_partner_title -msgid "res.partner.title" +#: code:addons/__init__.py:0 +#, python-format +msgid "module base cannot be loaded! (hint: verify addons-path)" msgstr "" #. module: base @@ -3673,11 +3389,6 @@ msgstr "" msgid "Partner Addresses" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-gtk-stop" -msgstr "" - #. module: base #: selection:base.language.install,lang:0 msgid "Indonesian / Bahasa Indonesia" @@ -3701,16 +3412,6 @@ msgstr "" msgid "ir.actions.url" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_MEDIA_STOP" -msgstr "" - -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_DND_MULTIPLE" -msgstr "" - #. module: base #: model:ir.actions.act_window,name:base.action_partner_addess_tree #: view:res.partner:0 @@ -3749,26 +3450,11 @@ msgstr "" msgid "Created Menus" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-idea" -msgstr "" - #. module: base #: field:workflow.triggers,workitem_id:0 msgid "Workitem" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_DIALOG_AUTHENTICATION" -msgstr "" - -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_ZOOM_OUT" -msgstr "" - #. module: base #: field:ir.actions.act_window.view,act_window_id:0 #: view:ir.actions.actions:0 @@ -3800,11 +3486,6 @@ msgstr "" msgid "Current Year without Century: %(y)s" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-mrp" -msgstr "" - #. module: base #: field:ir.actions.server,trigger_obj_id:0 msgid "Trigger On" @@ -3852,31 +3533,16 @@ msgstr "" msgid "Menus" msgstr "" -#. module: base -#: selection:ir.module.module.dependency,state:0 -msgid "Uninstallable" -msgstr "" - #. module: base #: view:base.module.upgrade:0 msgid "The selected modules have been updated / installed !" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_SORT_DESCENDING" -msgstr "" - #. module: base #: model:res.country,name:base.il msgid "Israel" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-stock_symbol-selection" -msgstr "" - #. module: base #: model:ir.actions.act_window,name:base.action_maintenance_contract_form #: model:ir.ui.menu,name:base.menu_maintenance_contract @@ -3905,11 +3571,6 @@ msgstr "" msgid "Defined Reports" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-tools" -msgstr "" - #. module: base #: view:ir.actions.report.xml:0 msgid "Report xml" @@ -3933,11 +3594,6 @@ msgstr "" msgid "Subflow" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_UNDO" -msgstr "" - #. module: base #: field:workflow.transition,signal:0 msgid "Signal (button Name)" @@ -3956,22 +3612,6 @@ msgstr "" msgid "Unread" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-sale" -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 "" - #. module: base #: view:res.lang:0 msgid "%d - Day of the month as a decimal number [01,31]." @@ -3982,11 +3622,6 @@ msgstr "" msgid "%I - Hour (12-hour clock) as a decimal number [01,12]." msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_ADD" -msgstr "" - #. module: base #: field:ir.cron,doall:0 msgid "Repeat Missed" @@ -4259,6 +3894,12 @@ msgstr "" msgid "False means for every user" msgstr "" +#. module: base +#: code:addons/base/module/module.py:0 +#, python-format +msgid "The name of the module must be unique !" +msgstr "" + #. module: base #: model:res.country,name:base.mz msgid "Mozambique" @@ -4326,11 +3967,6 @@ msgstr "" msgid "Integer" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-mail-" -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" @@ -4352,11 +3988,6 @@ msgstr "" msgid "Transition" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-gtk-select-all" -msgstr "" - #. module: base #: field:ir.cron,active:0 #: field:ir.sequence,active:0 @@ -4392,7 +4023,6 @@ msgstr "" #: code:addons/base/module/module.py:0 #: code:addons/base/res/res_currency.py:0 #: code:addons/base/res/res_user.py:0 -#: code:addons/base/res/ir_property.py:0 #, python-format msgid "Error" msgstr "" @@ -4473,11 +4103,6 @@ msgstr "" msgid "Read" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_INDENT" -msgstr "" - #. module: base #: sql_constraint:res.country:0 msgid "The name of the country must be unique !" @@ -4507,6 +4132,11 @@ msgstr "" msgid "Password" msgstr "" +#. module: base +#: field:ir.ui.menu,web_icon:0 +msgid "Icon File" +msgstr "" + #. module: base #: model:ir.actions.act_window,name:base.action_model_fields #: view:ir.model:0 @@ -4569,11 +4199,6 @@ msgstr "" msgid "Chinese (CN) / 简体中文" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_MEDIA_NEXT" -msgstr "" - #. module: base #: field:res.bank,street:0 #: field:res.partner.address,street:0 @@ -4596,11 +4221,6 @@ msgstr "" msgid "Canada" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-rating-rated" -msgstr "" - #. module: base #: selection:ir.module.module.dependency,state:0 msgid "Unknown" @@ -4612,7 +4232,8 @@ msgid "Change My Preferences" msgstr "" #. module: base -#: constraint:ir.actions.act_window:0 +#: code:addons/base/ir/ir_actions.py:0 +#, python-format msgid "Invalid model name in the action definition." msgstr "" @@ -4631,11 +4252,6 @@ msgstr "" msgid "Burkina Faso" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_MEDIA_FORWARD" -msgstr "" - #. module: base #: selection:ir.actions.todo,state:0 msgid "Skipped" @@ -4739,11 +4355,6 @@ msgstr "" msgid "French (CH) / Français (CH)" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_NEW" -msgstr "" - #. module: base #: help:res.config.users,action_id:0 #: help:res.users,action_id:0 @@ -4772,16 +4383,6 @@ msgstr "" msgid "Connect Events to Actions" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_SORT_ASCENDING" -msgstr "" - -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_ABOUT" -msgstr "" - #. module: base #: model:ir.model,name:base.model_base_update_translations msgid "base.update.translations" @@ -4848,11 +4449,6 @@ msgstr "" msgid "Kuwait" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-go-week" -msgstr "" - #. module: base #: field:workflow.workitem,inst_id:0 msgid "Instance" @@ -4888,11 +4484,6 @@ msgstr "" msgid "Accepted Users" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_UNDERLINE" -msgstr "" - #. module: base #: view:ir.values:0 msgid "Values for Event Type" @@ -4903,11 +4494,6 @@ msgstr "" msgid "Always Searchable" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_CLOSE" -msgstr "" - #. module: base #: model:res.country,name:base.hk msgid "Hong Kong" @@ -4918,11 +4504,6 @@ msgstr "" 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 "" - #. module: base #: 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." @@ -4938,11 +4519,6 @@ msgstr "" msgid "Morocco" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-graph" -msgstr "" - #. module: base #: view:res.lang:0 msgid "2. %a ,%A ==> Fri, Friday" @@ -5004,11 +4580,6 @@ msgstr "" msgid "Nepal" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-dolar" -msgstr "" - #. module: base #: help:ir.cron,args:0 msgid "Arguments to be passed to the method. e.g. (uid,)" @@ -5025,8 +4596,8 @@ msgid "Bulk SMS send" msgstr "" #. module: base -#: model:ir.ui.menu,name:base.next_id_2 -msgid "User Interface" +#: view:res.lang:0 +msgid "%Y - Year with century as a decimal number." msgstr "" #. module: base @@ -5039,11 +4610,6 @@ msgstr "" msgid "Update Modules List" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-accessories-archiver" -msgstr "" - #. module: base #: code:addons/base/module/module.py:0 #, python-format @@ -5097,6 +4663,12 @@ msgstr "" msgid "Module Upgrade Install" msgstr "" +#. module: base +#: view:workflow.activity:0 +#: field:workflow.activity,flow_start:0 +msgid "Flow Start" +msgstr "" + #. module: base #: model:ir.model,name:base.model_ir_actions_configuration_wizard msgid "ir.actions.configuration.wizard" @@ -5197,21 +4769,11 @@ msgstr "" msgid "Iteration" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-stock" -msgstr "" - #. module: base #: model:res.country,name:base.ae msgid "United Arab Emirates" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_MEDIA_RECORD" -msgstr "" - #. module: base #: model:ir.ui.menu,name:base.menu_crm_case_job_req_main msgid "Recruitment" @@ -5255,6 +4817,12 @@ msgstr "" msgid "Waiting" msgstr "" +#. module: base +#: code:addons/__init__.py:0 +#, 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" @@ -5312,11 +4880,6 @@ msgstr "" msgid "Mali" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_UNINDENT" -msgstr "" - #. module: base #: help:res.config.users,email:0 #: help:res.users,email:0 @@ -5325,11 +4888,6 @@ msgid "If an email is provided, the user will be sent a message welcoming him.\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 "terp-face-plain" -msgstr "" - #. module: base #: selection:base.language.install,lang:0 msgid "Flemish (BE) / Vlaams (BE)" @@ -5370,13 +4928,8 @@ msgid "View Type" msgstr "" #. module: base -#: view:res.lang:0 -msgid "%Y - Year with century as a decimal number." -msgstr "" - -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_DIALOG_INFO" +#: model:ir.ui.menu,name:base.next_id_2 +msgid "User Interface" msgstr "" #. module: base @@ -5395,11 +4948,6 @@ msgstr "" msgid "Couldn't find previous ir.actions.todo" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_GO_BACK" -msgstr "" - #. module: base #: view:ir.actions.act_window:0 msgid "General Settings" @@ -5420,11 +4968,6 @@ msgstr "" msgid "Algeria" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-stock_format-scientific" -msgstr "" - #. module: base #: model:res.country,name:base.be msgid "Belgium" @@ -5516,8 +5059,8 @@ msgid "PO File" msgstr "" #. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_SPELL_CHECK" +#: model:res.country,name:base.nt +msgid "Neutral Zone" msgstr "" #. module: base @@ -5577,21 +5120,11 @@ msgstr "" msgid "Bad customers" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_HARDDISK" -msgstr "" - #. module: base #: report:ir.module.reference.graph:0 msgid "Reports :" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_APPLY" -msgstr "" - #. module: base #: model:res.country,name:base.gy msgid "Guyana" @@ -5654,11 +5187,6 @@ msgstr "" msgid "Fields Description" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_CDROM" -msgstr "" - #. module: base #: view:ir.attachment:0 #: view:ir.cron:0 @@ -5682,11 +5210,6 @@ msgstr "" msgid "Readonly" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_ITALIC" -msgstr "" - #. module: base #: selection:ir.module.module,state:0 #: selection:ir.module.module.dependency,state:0 @@ -5710,11 +5233,6 @@ msgstr "" msgid "Telugu / తెలుగు" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-dialog-close" -msgstr "" - #. module: base #: model:res.country,name:base.lr msgid "Liberia" @@ -5729,11 +5247,6 @@ msgstr "" msgid "Notes" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-folder-blue" -msgstr "" - #. module: base #: field:ir.property,value_binary:0 #: field:ir.property,value_datetime:0 @@ -5754,7 +5267,6 @@ msgstr "" #: field:ir.sequence.type,code:0 #: selection:ir.translation,type:0 #: field:res.bank,code:0 -#: field:res.currency,code:0 #: field:res.partner.bank.type,code:0 msgid "Code" msgstr "" @@ -5774,11 +5286,6 @@ msgstr "" msgid "Minutes" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-gnome-cpu-frequency-applet+" -msgstr "" - #. module: base #: selection:ir.translation,type:0 msgid "Help" @@ -5848,8 +5355,8 @@ msgid "Flow Stop" msgstr "" #. module: base -#: selection:ir.cron,interval_type:0 -msgid "Weeks" +#: model:res.country,name:base.ar +msgid "Argentina" msgstr "" #. module: base @@ -5859,7 +5366,6 @@ msgstr "" #. module: base #: code:addons/base/module/wizard/base_module_import.py:0 -#: code:addons/base/ir/ir_values.py: #, python-format msgid "Error !" msgstr "" @@ -5869,11 +5375,6 @@ msgstr "" msgid "country_id" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-accessories-archiver+" -msgstr "" - #. module: base #: field:ir.cron,interval_type:0 msgid "Interval Unit" @@ -5912,11 +5413,6 @@ msgstr "" msgid "Chinese (TW) / 正體字" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_GO_UP" -msgstr "" - #. module: base #: model:ir.model,name:base.model_res_request msgid "res.request" @@ -5932,23 +5428,6 @@ msgstr "" msgid "Todo" msgstr "" -#. module: base -#: 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 #: field:ir.attachment,datas:0 msgid "File Content" @@ -5965,6 +5444,7 @@ msgid "The group that a user must have to be authorized to validate this transit msgstr "" #. module: base +#: constraint:res.config.users:0 #: constraint:res.users:0 msgid "The chosen company is not in the allowed companies for this user" msgstr "" @@ -6006,11 +5486,6 @@ msgstr "" msgid "Day of the year: %(doy)s" msgstr "" -#. module: base -#: model:res.country,name:base.nt -msgid "Neutral Zone" -msgstr "" - #. module: base #: view:ir.model:0 #: view:ir.model.fields:0 @@ -6079,8 +5554,8 @@ msgid "Done" msgstr "" #. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_GOTO_FIRST" +#: selection:maintenance.contract.wizard,state:0 +msgid "Validated" msgstr "" #. module: base @@ -6119,11 +5594,6 @@ msgstr "" msgid "To Do" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-check" -msgstr "" - #. module: base #: selection:base.language.install,lang:0 msgid "Estonian / Eesti keel" @@ -6177,6 +5647,11 @@ msgstr "" msgid "Address" msgstr "" +#. module: base +#: field:ir.ui.menu,web_icon_hover:0 +msgid "Icon hover File" +msgstr "" + #. module: base #: field:ir.module.module,latest_version:0 msgid "Installed version" @@ -6192,11 +5667,6 @@ msgstr "" msgid "Mauritania" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-calendar" -msgstr "" - #. module: base #: model:ir.model,name:base.model_ir_translation msgid "ir.translation" @@ -6224,11 +5694,6 @@ msgstr "" msgid "Parent Company" msgstr "" -#. module: base -#: field:ir.translation,src:0 -msgid "Source" -msgstr "" - #. module: base #: selection:base.language.install,lang:0 msgid "Spanish (CR) / Español (CR)" @@ -6250,8 +5715,8 @@ msgid "Examples" msgstr "" #. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_MEDIA_PAUSE" +#: field:ir.default,value:0 +msgid "Default Value" msgstr "" #. module: base @@ -6259,11 +5724,6 @@ msgstr "" msgid "Tools" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-gtk-go-back-ltr" -msgstr "" - #. module: base #: model:res.country,name:base.kn msgid "Saint Kitts & Nevis Anguilla" @@ -6277,11 +5737,6 @@ msgid "No rate found \n" "at the date: %s" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_HOME" -msgstr "" - #. module: base #: field:ir.model,name:0 #: field:ir.model.fields,model:0 @@ -6402,8 +5857,8 @@ msgid "Import module" msgstr "" #. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_DISCONNECT" +#: field:ir.actions.server,loop_action:0 +msgid "Loop Action" msgstr "" #. module: base @@ -6491,11 +5946,6 @@ msgstr "" msgid "Romania" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_PREFERENCES" -msgstr "" - #. module: base #: help:ir.cron,doall:0 msgid "Enable this if you want to execute missed occurences as soon as the server restarts." @@ -6522,11 +5972,6 @@ msgstr "" msgid "Timezone" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_GOTO_LAST" -msgstr "" - #. module: base #: model:ir.model,name:base.model_ir_actions_report_xml #: selection:ir.ui.menu,action:0 @@ -6605,6 +6050,12 @@ msgstr "" msgid "Module Update" msgstr "" +#. module: base +#: code:addons/base/module/wizard/base_module_upgrade.py:0 +#, python-format +msgid "Following modules are not installed or unknown: %s" +msgstr "" + #. module: base #: view:ir.cron:0 #: field:ir.cron,user_id:0 @@ -6686,7 +6137,8 @@ msgid "The new user's real name, used for searching and most listings" msgstr "" #. module: base -#: sql_constraint:ir.model.fields:0 +#: code:addons/base/ir/ir_model.py:0 +#, python-format msgid "Size of the field can never be less than 1 !" msgstr "" @@ -6840,6 +6292,12 @@ msgstr "" msgid "Copy Object" msgstr "" +#. module: base +#: code:addons/base/res/res_user.py:0 +#, python-format +msgid "Group(s) cannot be deleted, because some user(s) still belong to them: %s !" +msgstr "" + #. module: base #: model:ir.actions.act_window,name:base.action_country_state #: model:ir.ui.menu,name:base.menu_country_state_partner @@ -6907,11 +6365,6 @@ msgstr "" msgid "Scheduler" msgstr "" -#. module: base -#: view:res.lang:0 -msgid "%w - Weekday as a decimal number [0(Sunday),6]." -msgstr "" - #. module: base #: help:ir.cron,numbercall:0 msgid "Number of time the function is called,\n" @@ -7003,11 +6456,6 @@ msgstr "" msgid "State" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-administration" -msgstr "" - #. module: base #: selection:base.language.install,lang:0 msgid "Galician / Galego" @@ -7060,8 +6508,9 @@ msgid "workflow.triggers" msgstr "" #. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-hr" +#: code:addons/base/ir/ir_model.py:0 +#, python-format +msgid "Invalid search criterions" msgstr "" #. module: base @@ -7079,11 +6528,6 @@ msgstr "" msgid "- type,name,res_id,src,value" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_DND" -msgstr "" - #. module: base #: model:res.country,name:base.hm msgid "Heard and McDonald Islands" @@ -7149,11 +6593,6 @@ msgstr "" msgid "Binary" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_FLOPPY" -msgstr "" - #. module: base #: field:ir.actions.server,sms:0 #: selection:ir.actions.server,state:0 @@ -7278,11 +6717,6 @@ msgstr "" msgid "Occitan (FR, post 1500) / Occitan" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_ZOOM_FIT" -msgstr "" - #. module: base #: model:ir.ui.menu,name:base.menu_emails #: model:ir.ui.menu,name:base.menu_mail_gateway @@ -7322,11 +6756,6 @@ msgstr "" msgid "Modules to update" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "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." @@ -7352,11 +6781,6 @@ msgstr "" msgid "Croatian / hrvatski jezik" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_GO_FORWARD" -msgstr "" - #. module: base #: field:base.language.install,overwrite:0 msgid "Overwrite Existing Terms" @@ -7409,11 +6833,6 @@ msgstr "" msgid "Send Email" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_SELECT_FONT" -msgstr "" - #. module: base #: field:res.config.users,menu_id:0 #: field:res.users,menu_id:0 @@ -7425,13 +6844,6 @@ msgstr "" msgid "choose" 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 "" - #. module: base #: help:ir.model,osv_memory:0 msgid "Indicates whether this object model lives in memory only, i.e. is not persisted (osv.osv_memory)" @@ -7541,11 +6953,6 @@ msgstr "" msgid "Next" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-report" -msgstr "" - #. module: base #: help:ir.cron,function:0 msgid "Name of the method to be called on the object when this scheduler is executed." @@ -7561,11 +6968,6 @@ msgstr "" msgid "Miscellaneous" msgstr "" -#. module: base -#: field:ir.attachment,url:0 -msgid "Url" -msgstr "" - #. module: base #: model:res.country,name:base.cn msgid "China" @@ -7615,11 +7017,6 @@ msgstr "" msgid "Bulgaria" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-folder-green" -msgstr "" - #. module: base #: model:res.country,name:base.ao msgid "Angola" @@ -7630,11 +7027,6 @@ msgstr "" msgid "French Southern Territories" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_HELP" -msgstr "" - #. module: base #: model:ir.model,name:base.model_res_currency #: field:res.company,currency_id:0 @@ -7677,11 +7069,6 @@ msgstr "" msgid "Click on Update below to start the process..." msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-go-today" -msgstr "" - #. module: base #: model:res.country,name:base.ir msgid "Iran" @@ -7701,7 +7088,6 @@ msgstr "" #. module: base #: field:base.language.export,state:0 #: field:ir.ui.menu,icon_pict:0 -#: field:res.widget.wizard,widget_id:0 msgid "unknown" msgstr "" @@ -7780,13 +7166,10 @@ msgid "Base Object" msgstr "" #. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-crm" -msgstr "" - -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_STRIKETHROUGH" +#: field:ir.property,fields_id:0 +#: selection:ir.translation,type:0 +#: field:multi_company.default,field_id:0 +msgid "Field" msgstr "" #. module: base @@ -7794,11 +7177,6 @@ msgstr "" msgid "Dependencies :" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-partner" -msgstr "" - #. module: base #: field:ir.model.fields,field_description:0 msgid "Field Label" @@ -7843,11 +7221,6 @@ msgstr "" msgid "Information" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-call-start" -msgstr "" - #. module: base #: view:res.widget.user:0 msgid "User Widgets" @@ -7887,13 +7260,14 @@ msgid "Auto-Refresh" msgstr "" #. module: base -#: selection:ir.ui.view,type:0 -msgid "Diagram" +#: code:addons/base/ir/ir_model.py:0 +#, python-format +msgid "The osv_memory field can only be compared with = and != operator." msgstr "" #. module: base -#: model:res.country,name:base.wf -msgid "Wallis and Futuna Islands" +#: selection:ir.ui.view,type:0 +msgid "Diagram" msgstr "" #. module: base @@ -7901,22 +7275,12 @@ msgstr "" msgid "Name it to easily find a record" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-locked" -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 -#: selection:ir.ui.menu,icon:0 -msgid "terp-personal" -msgstr "" - #. module: base #: constraint:ir.rule:0 msgid "Rules are not supported for osv_memory objects !" @@ -7973,13 +7337,8 @@ msgid "The destination activity." msgstr "" #. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_REFRESH" -msgstr "" - -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_STOP" +#: sql_constraint:maintenance.contract:0 +msgid "Your maintenance contract is already subscribed in the system !" msgstr "" #. module: base @@ -7993,11 +7352,6 @@ msgstr "" msgid "Technical guide" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_CONVERT" -msgstr "" - #. module: base #: model:res.country,name:base.tz msgid "Tanzania" @@ -8019,8 +7373,8 @@ msgid "Other Actions Configuration" msgstr "" #. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_EXECUTE" +#: selection:ir.module.module.dependency,state:0 +msgid "Uninstallable" msgstr "" #. module: base @@ -8058,9 +7412,8 @@ msgid "Ean Check" msgstr "" #. module: base -#: code:addons/base/res/res_user.py:0 +#: sql_constraint:res.config.users:0 #: sql_constraint:res.users:0 -#, python-format msgid "You can not have two users with the same login !" msgstr "" @@ -8086,8 +7439,8 @@ msgid "Menu Tips" msgstr "" #. module: base -#: sql_constraint:ir.module.module:0 -msgid "The name of the module must be unique !" +#: field:ir.translation,src:0 +msgid "Source" msgstr "" #. module: base @@ -8139,13 +7492,9 @@ msgid "Dominican Republic" msgstr "" #. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_COLOR_PICKER" -msgstr "" - -#. module: base -#: model:res.country,name:base.sa -msgid "Saudi Arabia" +#: field:res.widget.user,widget_id:0 +#: field:res.widget.wizard,widget_id:0 +msgid "Widget" msgstr "" #. module: base @@ -8190,11 +7539,6 @@ msgstr "" msgid "XML path" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-go-year" -msgstr "" - #. module: base #: selection:ir.actions.todo,restart:0 msgid "On Skip" @@ -8216,15 +7560,11 @@ msgid "Low" msgstr "" #. module: base -#: constraint:ir.ui.menu:0 +#: code:addons/base/ir/ir_ui_menu.py:0 +#, python-format msgid "Error ! You can not create recursive Menu." msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-gtk-jump-to-rtl" -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" @@ -8273,11 +7613,6 @@ msgstr "" msgid "Object Relation" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_PRINT" -msgstr "" - #. module: base #: view:ir.rule:0 #: view:res.partner:0 @@ -8361,11 +7696,6 @@ msgstr "" msgid "You cannot remove the field '%s' !" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_JUMP_TO" -msgstr "" - #. module: base #: field:ir.exports,resource:0 #: view:ir.property:0 @@ -8389,6 +7719,12 @@ msgstr "" msgid "View Ordering" msgstr "" +#. module: base +#: code:addons/base/module/wizard/base_module_upgrade.py:0 +#, python-format +msgid "Unmet dependency !" +msgstr "" + #. module: base #: view:base.language.import:0 msgid "Supported file formats: *.csv (Comma-separated values) or *.po (GetText Portable Objects)" @@ -8427,8 +7763,8 @@ msgid "Aruba" msgstr "" #. module: base -#: model:res.country,name:base.ar -msgid "Argentina" +#: selection:ir.cron,interval_type:0 +msgid "Weeks" msgstr "" #. module: base @@ -8447,8 +7783,20 @@ msgid "Segmentation" msgstr "" #. module: base -#: selection:ir.ui.menu,icon:0 -msgid "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 @@ -8478,6 +7826,11 @@ msgstr "" msgid "Launch" msgstr "" +#. module: base +#: model:res.country,name:base.sa +msgid "Saudi Arabia" +msgstr "" + #. module: base #: field:ir.actions.act_window,limit:0 msgid "Limit" @@ -8519,11 +7872,6 @@ msgstr "" msgid "Virgin Islands (British)" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_MEDIA_PREVIOUS" -msgstr "" - #. module: base #: view:ir.property:0 #: model:ir.ui.menu,name:base.next_id_15 @@ -8536,8 +7884,8 @@ msgid "Czech / Čeština" msgstr "" #. module: base -#: selection:ir.model.fields,select_level:0 -msgid "Advanced Search" +#: model:res.country,name:base.wf +msgid "Wallis and Futuna Islands" msgstr "" #. module: base @@ -8586,8 +7934,8 @@ msgid "Action Source" msgstr "" #. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_NETWORK" +#: view:res.lang:0 +msgid "%w - Weekday as a decimal number [0(Sunday),6]." msgstr "" #. module: base @@ -8638,11 +7986,6 @@ msgstr "" msgid "%X - Appropriate time representation." msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-mail_delete" -msgstr "" - #. module: base #: selection:base.language.install,lang:0 msgid "Spanish (SV) / Español (SV)" @@ -8653,29 +7996,21 @@ msgstr "" 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.ui.menu,icon:0 -msgid "terp-go-month" -msgstr "" - #. module: base #: view:res.company:0 msgid "Portrait" msgstr "" -#. module: base -#: selection:ir.translation,type:0 -msgid "Wizard Button" -msgstr "" - #. module: base #: selection:ir.translation,type:0 msgid "Report/Template" msgstr "" #. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_DIRECTORY" +#: 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 @@ -8725,11 +8060,6 @@ msgstr "" msgid "Action to Launch" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "STOCK_REVERT_TO_SAVED" -msgstr "" - #. module: base #: view:ir.cron:0 msgid "Execution" @@ -8795,11 +8125,6 @@ msgstr "" msgid "System Update" msgstr "" -#. module: base -#: selection:ir.translation,type:0 -msgid "Wizard Field" -msgstr "" - #. module: base #: help:ir.sequence,prefix:0 msgid "Prefix value of the record for the sequence" @@ -8827,11 +8152,6 @@ msgstr "" msgid "General Information" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-product" -msgstr "" - #. module: base #: model:res.country,name:base.tc msgid "Turks and Caicos Islands" @@ -8842,11 +8162,6 @@ msgstr "" msgid "Account Owner" msgstr "" -#. module: base -#: selection:ir.ui.menu,icon:0 -msgid "terp-mail-message-new" -msgstr "" - #. module: base #: code:addons/base/res/res_user.py:0 #, python-format @@ -8958,51 +8273,3 @@ msgstr "" msgid "Russian / русский язык" msgstr "" -#. module: base -#: code:addons/base/module/wizard/base_module_upgrade.py:0 -#, python-format -msgid "Unmet dependency !" -msgstr "" - -#. module: base -#: code:addons/base/module/wizard/base_module_upgrade.py:0 -#, python-format -msgid "Following modules are not installed or unknown: %s" -msgstr "" - -#. module: base -#: code:addons/base/ir/ir_model.py:0 -#, python-format -msgid "Invalid search criterions" -msgstr "" - -#. module: base -#: code:addons/base/ir/ir_model.py:0 -#, python-format -msgid "The osv_memory field can only be compared with = and != operator." -msgstr "" - -#. module: base -#: code:addons/base/ir/ir_values.py:0 -#, python-format -msgid "You do not have the permission to perform this operation !!!" -msgstr "" - -#. module: base -#: code:addons/base/res/ir_property.py:0 -#, python-format -msgid "Invalid type" -msgstr "" - -#. module: base -#: code:addons/__init__.py:0 -#, python-format -msgid "Could not load base module" -msgstr "" - -#. module: base -#: code:addons/__init__.py:0 -#, python-format -msgid "module base cannot be loaded! (hint: verify addons-path)" -msgstr "" - diff --git a/bin/addons/base/ir/ir_model.py b/bin/addons/base/ir/ir_model.py index a0040a836df..583985b5930 100644 --- a/bin/addons/base/ir/ir_model.py +++ b/bin/addons/base/ir/ir_model.py @@ -401,6 +401,12 @@ class ir_model_data(osv.osv): self.doinit = True self.unlink_mark = {} + def _auto_init(self, cr, context=None): + super(ir_model_data, self)._auto_init(cr, context) + cr.execute('SELECT indexname FROM pg_indexes WHERE indexname = \'ir_model_data_module_name_index\'') + if not cr.fetchone(): + cr.execute('CREATE INDEX ir_model_data_module_name_index ON ir_model_data (module, name)') + @tools.cache() def _get_id(self, cr, uid, module, xml_id): """Returns the id of the ir.model.data record corresponding to a given module and xml_id (cached) or raise a ValueError if not found""" @@ -448,18 +454,19 @@ class ir_model_data(osv.osv): action_id = False if xml_id: - cr.execute('select id,res_id from ir_model_data where module=%s and name=%s', (module,xml_id)) + cr.execute('''SELECT imd.id, imd.res_id, md.id + FROM ir_model_data imd LEFT JOIN %s md ON (imd.res_id = md.id) + WHERE imd.module=%%s AND imd.name=%%s''' % model_obj._table, + (module, xml_id)) results = cr.fetchall() - for action_id2,res_id2 in results: - cr.execute('select id from '+model_obj._table+' where id=%s', (res_id2,)) - result3 = cr.fetchone() - if not result3: + for imd_id2,res_id2,real_id2 in results: + if not real_id2: self._get_id.clear_cache(cr.dbname, uid, module, xml_id) self.get_object_reference.clear_cache(cr.dbname, uid, module, xml_id) - cr.execute('delete from ir_model_data where id=%s', (action_id2,)) + cr.execute('delete from ir_model_data where id=%s', (imd_id2,)) res_id = False else: - res_id,action_id = res_id2,action_id2 + res_id,action_id = res_id2,imd_id2 if action_id and res_id: model_obj.write(cr, uid, [res_id], values, context=context) diff --git a/bin/addons/base/ir/ir_values.py b/bin/addons/base/ir/ir_values.py index 21ee1a66f93..602e2a10a80 100644 --- a/bin/addons/base/ir/ir_values.py +++ b/bin/addons/base/ir/ir_values.py @@ -72,21 +72,21 @@ class ir_values(osv.osv): 'name': fields.char('Name', size=128), 'model_id': fields.many2one('ir.model', 'Object', size=128, help="This field is not used, it only helps you to select a good model."), - 'model': fields.char('Object Name', size=128), + 'model': fields.char('Object Name', size=128, select=True), 'action_id': fields.many2one('ir.actions.actions', 'Action', help="This field is not used, it only helps you to select the right action."), 'value': fields.text('Value'), 'value_unpickle': fields.function(_value_unpickle, fnct_inv=_value_pickle, method=True, type='text', string='Value'), 'object': fields.boolean('Is Object'), - 'key': fields.selection([('action','Action'),('default','Default')], 'Type', size=128), - 'key2' : fields.char('Event Type',help="The kind of action or button in the client side that will trigger the action.", size=128), + 'key': fields.selection([('action','Action'),('default','Default')], 'Type', size=128, select=True), + 'key2' : fields.char('Event Type',help="The kind of action or button in the client side that will trigger the action.", size=128, select=True), 'meta': fields.text('Meta Datas'), 'meta_unpickle': fields.function(_value_unpickle, fnct_inv=_value_pickle, method=True, type='text', string='Metadata'), - 'res_id': fields.integer('Object ID', help="Keep 0 if the action must appear on all resources."), - 'user_id': fields.many2one('res.users', 'User', ondelete='cascade'), - 'company_id': fields.many2one('res.company', 'Company') + 'res_id': fields.integer('Object ID', help="Keep 0 if the action must appear on all resources.", select=True), + 'user_id': fields.many2one('res.users', 'User', ondelete='cascade', select=True), + 'company_id': fields.many2one('res.company', 'Company', select=True) } _defaults = { 'key': lambda *a: 'action', @@ -94,11 +94,11 @@ class ir_values(osv.osv): 'company_id': lambda *a: False } - def _auto_init(self, cr, context={}): + def _auto_init(self, cr, context=None): super(ir_values, self)._auto_init(cr, context) - cr.execute('SELECT indexname FROM pg_indexes WHERE indexname = \'ir_values_key_model_key2_index\'') + cr.execute('SELECT indexname FROM pg_indexes WHERE indexname = \'ir_values_key_model_key2_res_id_user_id_idx\'') if not cr.fetchone(): - cr.execute('CREATE INDEX ir_values_key_model_key2_index ON ir_values (key, model, key2)') + cr.execute('CREATE INDEX ir_values_key_model_key2_res_id_user_id_idx ON ir_values (key, model, key2, res_id, user_id)') def set(self, cr, uid, key, key2, name, models, value, replace=True, isobject=False, meta=False, preserve_user=False, company=False): if isinstance(value, unicode): diff --git a/bin/addons/base/ir/workflow/workflow.py b/bin/addons/base/ir/workflow/workflow.py index a117688399d..dda5dd46276 100644 --- a/bin/addons/base/ir/workflow/workflow.py +++ b/bin/addons/base/ir/workflow/workflow.py @@ -175,7 +175,7 @@ class wkf_instance(osv.osv): 'res_type': fields.char('Resource Object', size=64, select=True), 'state': fields.char('State', size=32, select=True), } - def _auto_init(self, cr, context={}): + def _auto_init(self, cr, context=None): super(wkf_instance, self)._auto_init(cr, context) cr.execute('SELECT indexname FROM pg_indexes WHERE indexname = \'wkf_instance_res_id_res_type_state_index\'') if not cr.fetchone(): diff --git a/bin/addons/base/module/module.py b/bin/addons/base/module/module.py index bdd76d75e0c..27979bfb2cc 100644 --- a/bin/addons/base/module/module.py +++ b/bin/addons/base/module/module.py @@ -57,7 +57,7 @@ class module_category(osv.osv): return result _columns = { - 'name': fields.char("Name", size=128, required=True), + 'name': fields.char("Name", size=128, required=True, select=True), 'parent_id': fields.many2one('ir.module.category', 'Parent Category', select=True), 'child_ids': fields.one2many('ir.module.category', 'parent_id', 'Child Categories'), 'module_nr': fields.function(_module_nbr, method=True, string='Number of Modules', type='integer') @@ -96,26 +96,34 @@ class module(osv.osv): mlist = self.browse(cr, uid, ids, context=context) mnames = {} for m in mlist: - mnames[m.name] = m.id + # skip uninstalled modules below, + # no data to find anyway + if m.state in ('installed', 'to upgrade', 'to remove'): + mnames[m.name] = m.id res[m.id] = { 'menus_by_module':[], 'reports_by_module':[], 'views_by_module': [] } + + if not mnames: + return res + view_id = model_data_obj.search(cr,uid,[('module','in', mnames.keys()), ('model','in',('ir.ui.view','ir.actions.report.xml','ir.ui.menu'))]) for data_id in model_data_obj.browse(cr,uid,view_id,context): # We use try except, because views or menus may not exist try: key = data_id.model + res_mod_dic = res[mnames[data_id.module]] if key=='ir.ui.view': v = view_obj.browse(cr,uid,data_id.res_id) aa = v.inherit_id and '* INHERIT ' or '' - res[mnames[data_id.module]]['views_by_module'].append(aa + v.name + '('+v.type+')') + res_mod_dic['views_by_module'].append(aa + v.name + '('+v.type+')') elif key=='ir.actions.report.xml': - res[mnames[data_id.module]]['reports_by_module'].append(report_obj.browse(cr,uid,data_id.res_id).name) + res_mod_dic['reports_by_module'].append(report_obj.browse(cr,uid,data_id.res_id).name) elif key=='ir.ui.menu': - res[mnames[data_id.module]]['menus_by_module'].append(menu_obj.browse(cr,uid,data_id.res_id).complete_name) + res_mod_dic['menus_by_module'].append(menu_obj.browse(cr,uid,data_id.res_id).complete_name) except KeyError, e: self.__logger.warning( 'Data not found for reference %s[%s:%s.%s]', data_id.model, @@ -344,8 +352,8 @@ class module(osv.osv): 'maintainer': terp.get('maintainer', False), 'contributors': ', '.join(terp.get('contributors', [])) or False, 'website': terp.get('website', ''), - 'license': terp.get('license', 'GPL-2'), - 'certificate': terp.get('certificate') or None, + 'license': terp.get('license', 'AGPL-3'), + 'certificate': terp.get('certificate') or False, 'web': terp.get('web') or False, } @@ -353,34 +361,40 @@ class module(osv.osv): def update_list(self, cr, uid, context={}): res = [0, 0] # [update, add] - # iterate through installed modules and mark them as being so + known_mods = self.browse(cr, uid, self.search(cr, uid, [])) + known_mods_names = dict([(m.name, m) for m in known_mods]) + + # iterate through detected modules and update/create them in db for mod_name in addons.get_modules(): - ids = self.search(cr, uid, [('name','=',mod_name)]) + mod = known_mods_names.get(mod_name) terp = self.get_module_info(mod_name) values = self.get_values_from_terp(terp) - if ids: - id = ids[0] - mod = self.browse(cr, uid, id) + if mod: + updated_values = {} + for key in values: + old = getattr(mod, key) + updated = isinstance(values[key], basestring) and tools.ustr(values[key]) or values[key] + if not old == updated: + updated_values[key] = values[key] if terp.get('installable', True) and mod.state == 'uninstallable': - self.write(cr, uid, id, {'state': 'uninstalled'}) + updated_values['state'] = 'uninstalled' if parse_version(terp.get('version', '')) > parse_version(mod.latest_version or ''): - self.write(cr, uid, id, {'url': ''}) res[0] += 1 - self.write(cr, uid, id, values) - cr.execute('DELETE FROM ir_module_module_dependency WHERE module_id = %s', (id,)) + if updated_values: + self.write(cr, uid, mod.id, updated_values) else: mod_path = addons.get_module_path(mod_name) if not mod_path: continue if not terp or not terp.get('installable', True): continue - - ids = self.search(cr, uid, [('name','=',mod_name)]) id = self.create(cr, uid, dict(name=mod_name, state='uninstalled', **values)) + mod = self.browse(cr, uid, id) res[1] += 1 - self._update_dependencies(cr, uid, id, terp.get('depends', [])) - self._update_category(cr, uid, id, terp.get('category', 'Uncategorized')) + + self._update_dependencies(cr, uid, mod, terp.get('depends', [])) + self._update_category(cr, uid, mod, terp.get('category', 'Uncategorized')) return res @@ -412,39 +426,49 @@ class module(osv.osv): self.write(cr, uid, mod.id, self.get_values_from_terp(terp)) cr.execute('DELETE FROM ir_module_module_dependency ' \ 'WHERE module_id = %s', (mod.id,)) - self._update_dependencies(cr, uid, mod.id, terp.get('depends', + self._update_dependencies(cr, uid, mod, terp.get('depends', [])) - self._update_category(cr, uid, mod.id, terp.get('category', + self._update_category(cr, uid, mod, terp.get('category', 'Uncategorized')) # Import module zimp = zipimport.zipimporter(fname) zimp.load_module(mod.name) return res - def _update_dependencies(self, cr, uid, id, depends=None): + def _update_dependencies(self, cr, uid, mod_browse, depends=None): if depends is None: depends = [] - for d in depends: - cr.execute('INSERT INTO ir_module_module_dependency (module_id, name) values (%s, %s)', (id, d)) + existing = set(x.name for x in mod_browse.dependencies_id) + needed = set(depends) + for dep in (needed - existing): + cr.execute('INSERT INTO ir_module_module_dependency (module_id, name) values (%s, %s)', (mod_browse.id, dep)) + for dep in (existing - needed): + cr.execute('DELETE FROM ir_module_module_dependency WHERE module_id = %s and name = %s', (mod_browse.id, dep)) + + def _update_category(self, cr, uid, mod_browse, category='Uncategorized'): + current_category = mod_browse.category_id + current_category_path = [] + while current_category: + current_category_path.insert(0, current_category.name) + current_category = current_category.parent_id - def _update_category(self, cr, uid, id, category='Uncategorized'): categs = category.split('/') - p_id = None - while categs: - if p_id is not None: - cr.execute('select id from ir_module_category where name=%s and parent_id=%s', (categs[0], p_id)) - else: - cr.execute('select id from ir_module_category where name=%s and parent_id is NULL', (categs[0],)) - c_id = cr.fetchone() - if not c_id: - cr.execute('select nextval(\'ir_module_category_id_seq\')') - c_id = cr.fetchone()[0] - cr.execute('insert into ir_module_category (id, name, parent_id) values (%s, %s, %s)', (c_id, categs[0], p_id)) - else: - c_id = c_id[0] - p_id = c_id - categs = categs[1:] - self.write(cr, uid, [id], {'category_id': p_id}) + if categs != current_category_path: + p_id = None + while categs: + if p_id is not None: + cr.execute('SELECT id FROM ir_module_category WHERE name=%s AND parent_id=%s', (categs[0], p_id)) + else: + cr.execute('SELECT id FROM ir_module_category WHERE name=%s AND parent_id is NULL', (categs[0],)) + c_id = cr.fetchone() + if not c_id: + cr.execute('INSERT INTO ir_module_category (name, parent_id) VALUES (%s, %s) RETURNING id', (categs[0], p_id)) + c_id = cr.fetchone()[0] + else: + c_id = c_id[0] + p_id = c_id + categs = categs[1:] + self.write(cr, uid, [mod_browse.id], {'category_id': p_id}) def update_translations(self, cr, uid, ids, filter_lang=None, context=None): logger = logging.getLogger('i18n') diff --git a/bin/import_xml.rng b/bin/import_xml.rng index 0495b334f78..75c4e8b05e7 100644 --- a/bin/import_xml.rng +++ b/bin/import_xml.rng @@ -196,7 +196,6 @@ - diff --git a/bin/netsvc.py b/bin/netsvc.py index 7cb7e73c9df..716fe0f5d20 100644 --- a/bin/netsvc.py +++ b/bin/netsvc.py @@ -132,8 +132,8 @@ class ExportService(object): LOG_NOTSET = 'notset' LOG_DEBUG_SQL = 'debug_sql' -LOG_DEBUG_RPC = 'debug_rpc' LOG_DEBUG_RPC_ANSWER = 'debug_rpc_answer' +LOG_DEBUG_RPC = 'debug_rpc' LOG_DEBUG = 'debug' LOG_TEST = 'test' LOG_INFO = 'info' diff --git a/bin/report/render/rml2pdf/customfonts.py b/bin/report/render/rml2pdf/customfonts.py index e4f15aa8d8b..a60c2d267f5 100644 --- a/bin/report/render/rml2pdf/customfonts.py +++ b/bin/report/render/rml2pdf/customfonts.py @@ -3,6 +3,7 @@ # # OpenERP, Open Source Management Solution # Copyright (C) 2004-2009 P. Christeas, Tiny SPRL (). +# Copyright (C) 2010 OpenERP SA. (http://www.openerp.com) # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -19,15 +20,22 @@ # ############################################################################## -from reportlab import rl_config -import os +import glob import logging +import os +import platform +from reportlab import rl_config + +from tools import config """This module allows the mapping of some system-available TTF fonts to the reportlab engine. This file could be customized per distro (although most Linux/Unix ones) should have the same filenames, only need the code below). + +Due to an awful configuration that ships with reportlab at many Linux +and Ubuntu distros, we have to override the search path, too. """ CustomTTFonts = [ ('Helvetica',"DejaVu Sans", "DejaVuSans.ttf", 'normal'), @@ -42,16 +50,41 @@ CustomTTFonts = [ ('Helvetica',"DejaVu Sans", "DejaVuSans.ttf", 'normal'), ('Times-Roman',"Liberation Serif Bold", "LiberationSerif-Bold.ttf", 'bold'), ('Times-Roman',"Liberation Serif Italic", "LiberationSerif-Italic.ttf", 'italic'), ('Times-Roman',"Liberation Serif BoldItalic", "LiberationSerif-BoldItalic.ttf", 'bolditalic'), - ('ZapfDingbats',"DejaVu Serif", "DejaVuSerif.ttf", 'normal'), - ('ZapfDingbats',"DejaVu Serif Bold", "DejaVuSerif-Bold.ttf", 'bold'), - ('ZapfDingbats',"DejaVu Serif Italic", "DejaVuSerif-Italic.ttf", 'italic'), - ('ZapfDingbats',"DejaVu Serif BoldItalic", "DejaVuSerif-BoldItalic.ttf", 'bolditalic'), ('Courier',"FreeMono", "FreeMono.ttf", 'normal'), ('Courier',"FreeMono Bold", "FreeMonoBold.ttf", 'bold'), ('Courier',"FreeMono Oblique", "FreeMonoOblique.ttf", 'italic'), ('Courier',"FreeMono BoldOblique", "FreeMonoBoldOblique.ttf", 'bolditalic'),] -__foundFonts = [] + +TTFSearchPath_Linux = ( + '/usr/share/fonts/truetype', # SuSE + '/usr/share/fonts/dejavu', '/usr/share/fonts/liberation', # Fedora, RHEL + '/usr/share/fonts/truetype/*', # Ubuntu, + '/usr/share/fonts/TTF/*', # at Mandriva/Mageia + ) + +TTFSearchPath_Windows = ( + 'c:/winnt/fonts', + 'c:/windows/fonts' + ) + +TTFSearchPath_Darwin = ( + #mac os X - from + #http://developer.apple.com/technotes/tn/tn2024.html + '~/Library/Fonts', + '/Library/Fonts', + '/Network/Library/Fonts', + '/System/Library/Fonts', + ) + +TTFSearchPathMap = { + 'Darwin': TTFSearchPath_Darwin, + 'Windows': TTFSearchPath_Windows, + 'Linux': TTFSearchPath_Linux, +} + +# ----- The code below is less distro-specific, please avoid editing! ------- +__foundFonts = None def FindCustomFonts(): """Fill the __foundFonts list with those filenames, whose fonts @@ -64,22 +97,37 @@ def FindCustomFonts(): dirpath = [] log = logging.getLogger('report.fonts') global __foundFonts - for dirname in rl_config.TTFSearchPath: - abp = os.path.abspath(dirname) - if os.path.isdir(abp): - dirpath.append(abp) - - for k, (name, font, fname, mode) in enumerate(CustomTTFonts): - if fname in __foundFonts: + __foundFonts = {} + searchpath = [] + + if config.get('fonts_search_path'): + searchpath += map(str.strip, config.get('fonts_search_path').split(',')) + + local_platform = platform.system() + if local_platform in TTFSearchPathMap: + searchpath += TTFSearchPathMap[local_platform] + + # Append the original search path of reportlab (at the end) + searchpath += rl_config.TTFSearchPath + + # Perform the search for font files ourselves, as reportlab's + # TTFOpenFile is not very good at it. + for dirglob in searchpath: + dirglob = os.path.expanduser(dirglob) + for dirname in glob.iglob(dirglob): + abp = os.path.abspath(dirname) + if os.path.isdir(abp): + dirpath.append(abp) + + for k, (name, font, filename, mode) in enumerate(CustomTTFonts): + if filename in __foundFonts: continue for d in dirpath: - if os.path.exists(os.path.join(d, fname)): - log.debug("Found font %s in %s as %s", fname, d, name) - __foundFonts.append(fname) + abs_filename = os.path.join(d, filename) + if os.path.exists(abs_filename): + log.debug("Found font %s at %s", filename, abs_filename) + __foundFonts[filename] = abs_filename break - - # print "Found fonts:", __foundFonts - def SetCustomFonts(rmldoc): """ Map some font names to the corresponding TTF fonts @@ -90,11 +138,13 @@ def SetCustomFonts(rmldoc): avoid system-wide processing (cache it, instead). """ global __foundFonts - if not len(__foundFonts): + if __foundFonts is None: FindCustomFonts() - for name, font, fname, mode in CustomTTFonts: - if os.path.isabs(fname) or fname in __foundFonts: - rmldoc.setTTFontMapping(name, font, fname, mode) + for name, font, filename, mode in CustomTTFonts: + if os.path.isabs(filename) and os.path.exists(filename): + rmldoc.setTTFontMapping(name, font, filename, mode) + elif filename in __foundFonts: + rmldoc.setTTFontMapping(name, font, __foundFonts[filename], mode) return True #eof diff --git a/bin/report/render/rml2pdf/trml2pdf.py b/bin/report/render/rml2pdf/trml2pdf.py index c8b64f4075b..cbe847eea1c 100644 --- a/bin/report/render/rml2pdf/trml2pdf.py +++ b/bin/report/render/rml2pdf/trml2pdf.py @@ -35,6 +35,7 @@ import base64 from reportlab.platypus.doctemplate import ActionFlowable from tools.safe_eval import safe_eval as eval from reportlab.lib.units import inch,cm,mm +from reportlab.pdfbase import pdfmetrics try: from cStringIO import StringIO @@ -485,11 +486,18 @@ class _rml_canvas(object): self.canvas.drawPath(self.path, **utils.attr_get(node, [], {'fill':'bool','stroke':'bool'})) def setFont(self, node): - fname = node.get('name') - try: - return self.canvas.setFont(fname, utils.unit_get(node.get('size'))) - except KeyError, e: - raise KeyError('Font "%s" is not registered in the engine' % fname) + fontname = node.get('name') + if fontname not in pdfmetrics.getRegisteredFontNames()\ + or fontname not in pdfmetrics.standardFonts: + # let reportlab attempt to find it + try: + pdfmetrics.getFont(fontname) + except Exception: + logging.getLogger('report.fonts').debug('Could not locate font %s, substituting default: %s', + fontname, + self.canvas._fontname) + fontname = self.canvas._fontname + return self.canvas.setFont(fontname, utils.unit_get(node.get('size'))) def render(self, node): tags = { diff --git a/bin/tools/convert.py b/bin/tools/convert.py index 0f091ad4a56..49d56b15b1e 100644 --- a/bin/tools/convert.py +++ b/bin/tools/convert.py @@ -62,7 +62,7 @@ class ConvertError(Exception): return 'Exception:\n\t%s\nUsing file:\n%s' % (self.orig, self.d) def _ref(self, cr): - return lambda x: self.id_get(cr, False, x) + return lambda x: self.id_get(cr, x) def _obj(pool, cr, uid, model_str, context=None): model = pool.get(model_str) @@ -139,7 +139,7 @@ def _eval_xml(self, node, pool, cr, uid, idref, context=None): m = re.findall('[^%]%\((.*?)\)[ds]', s) for id in m: if not id in idref: - idref[id]=self.id_get(cr, False, id) + idref[id]=self.id_get(cr, id) return s % idref _fix_multiple_roots(node) return '\n'\ @@ -177,7 +177,7 @@ def _eval_xml(self, node, pool, cr, uid, idref, context=None): args = [] a_eval = node.get('eval','') if a_eval: - idref['ref'] = lambda x: self.id_get(cr, False, x) + idref['ref'] = lambda x: self.id_get(cr, x) args = unsafe_eval(a_eval, idref) for n in node: return_val = _eval_xml(self,n, pool, cr, uid, idref, context) @@ -262,7 +262,7 @@ class xml_import(object): def get_uid(self, cr, uid, data_node, node): node_uid = node.get('uid','') or (len(data_node) and data_node.get('uid','')) if node_uid: - return self.id_get(cr, None, node_uid) + return self.id_get(cr, node_uid) return uid def _test_xml_id(self, xml_id): @@ -290,7 +290,7 @@ form: module.record_id""" % (xml_id,) ids = self.pool.get(d_model).search(cr, self.uid, unsafe_eval(d_search, idref)) if d_id: try: - ids.append(self.id_get(cr, d_model, d_id)) + ids.append(self.id_get(cr, d_id)) except: # d_id cannot be found. doesn't matter in this case pass @@ -334,10 +334,10 @@ form: module.record_id""" % (xml_id,) groups_value = [] for group in g_names: if group.startswith('-'): - group_id = self.id_get(cr, 'res.groups', group[1:]) + group_id = self.id_get(cr, group[1:]) groups_value.append((3, group_id)) else: - group_id = self.id_get(cr, 'res.groups', group) + group_id = self.id_get(cr, group) groups_value.append((4, group_id)) res['groups_id'] = groups_value @@ -377,10 +377,10 @@ form: module.record_id""" % (xml_id,) groups_value = [] for group in g_names: if group.startswith('-'): - group_id = self.id_get(cr, 'res.groups', group[1:]) + group_id = self.id_get(cr, group[1:]) groups_value.append((3, group_id)) else: - group_id = self.id_get(cr, 'res.groups', group) + group_id = self.id_get(cr, group) groups_value.append((4, group_id)) res['groups_id'] = groups_value @@ -425,8 +425,8 @@ form: module.record_id""" % (xml_id,) self._test_xml_id(xml_id) type = rec.get('type','').encode('utf-8') or 'ir.actions.act_window' view_id = False - if rec.get('view'): - view_id = self.id_get(cr, 'ir.actions.act_window', rec.get('view','').encode('utf-8')) + if rec.get('view_id'): + view_id = self.id_get(cr, rec.get('view_id','').encode('utf-8')) domain = rec.get('domain','').encode('utf-8') or '{}' res_model = rec.get('res_model','').encode('utf-8') src_model = rec.get('src_model','').encode('utf-8') @@ -438,7 +438,7 @@ form: module.record_id""" % (xml_id,) uid = self.uid active_id = str("active_id") # for further reference in client/bin/tools/__init__.py def ref(str_id): - return self.id_get(cr, None, str_id) + return self.id_get(cr, str_id) # Include all locals() in eval_context, for backwards compatibility eval_context = { @@ -489,10 +489,10 @@ form: module.record_id""" % (xml_id,) groups_value = [] for group in g_names: if group.startswith('-'): - group_id = self.id_get(cr, 'res.groups', group[1:]) + group_id = self.id_get(cr, group[1:]) groups_value.append((3, group_id)) else: - group_id = self.id_get(cr, 'res.groups', group) + group_id = self.id_get(cr, group) groups_value.append((4, group_id)) res['groups_id'] = groups_value @@ -527,7 +527,7 @@ form: module.record_id""" % (xml_id,) model = str(rec.get('model','')) w_ref = rec.get('ref','') if w_ref: - id = self.id_get(cr, model, w_ref) + id = self.id_get(cr, w_ref) else: number_children = len(rec) assert number_children > 0,\ @@ -579,7 +579,7 @@ form: module.record_id""" % (xml_id,) # The parent attribute was specified, if non-empty determine its ID, otherwise # explicitly make a top-level menu if rec.get('parent'): - menu_parent_id = self.id_get(cr, 'ir.ui.menu', rec.get('parent','')) + menu_parent_id = self.id_get(cr, rec.get('parent','')) else: # we get here with , explicit clear of parent, or # if no parent attribute at all but menu name is not a menu path @@ -588,7 +588,7 @@ form: module.record_id""" % (xml_id,) if rec.get('name'): values['name'] = rec.get('name') try: - res = [ self.id_get(cr, 'ir.ui.menu', rec.get('id','')) ] + res = [ self.id_get(cr, rec.get('id','')) ] except: res = None @@ -603,7 +603,7 @@ form: module.record_id""" % (xml_id,) } values['icon'] = icons.get(a_type,'STOCK_NEW') if a_type=='act_window': - a_id = self.id_get(cr, 'ir.actions.%s'% a_type, a_action) + a_id = self.id_get(cr, a_action) cr.execute('select view_type,view_mode,name,view_id,target from ir_act_window where id=%s', (int(a_id),)) rrres = cr.fetchone() assert rrres, "No window action defined for this id %s !\n" \ @@ -628,7 +628,7 @@ form: module.record_id""" % (xml_id,) if not values.get('name', False): values['name'] = action_name elif a_type=='wizard': - a_id = self.id_get(cr, 'ir.actions.%s'% a_type, a_action) + a_id = self.id_get(cr, a_action) cr.execute('select name from ir_act_wizard where id=%s', (int(a_id),)) resw = cr.fetchone() if (not values.get('name', False)) and resw: @@ -647,10 +647,10 @@ form: module.record_id""" % (xml_id,) groups_value = [] for group in g_names: if group.startswith('-'): - group_id = self.id_get(cr, 'res.groups', group[1:]) + group_id = self.id_get(cr, group[1:]) groups_value.append((3, group_id)) else: - group_id = self.id_get(cr, 'res.groups', group) + group_id = self.id_get(cr, group) groups_value.append((4, group_id)) values['groups_id'] = groups_value @@ -664,7 +664,7 @@ form: module.record_id""" % (xml_id,) if rec.get('action') and pid: a_action = rec.get('action').encode('utf8') a_type = rec.get('type','').encode('utf8') or 'act_window' - a_id = self.id_get(cr, 'ir.actions.%s' % a_type, a_action) + a_id = self.id_get(cr, a_action) action = "ir.actions.%s,%d" % (a_type, a_id) self.pool.get('ir.model.data').ir_set(cr, self.uid, 'action', 'tree_but_open', 'Menuitem', [('ir.ui.menu', int(pid))], action, True, True, xml_id=rec_id) return ('ir.ui.menu', pid) @@ -692,7 +692,7 @@ form: module.record_id""" % (xml_id,) context = self.get_context(data_node, rec, eval_dict) uid = self.get_uid(cr, self.uid, data_node, rec) if rec_id: - ids = [self.id_get(cr, rec_model, rec_id)] + ids = [self.id_get(cr, rec_id)] elif rec_src: q = unsafe_eval(rec_src, eval_dict) ids = self.pool.get(rec_model).search(cr, uid, q, context=context) @@ -814,10 +814,10 @@ form: module.record_id""" % (xml_id,) else: if f_name in model._columns \ and model._columns[f_name]._type == 'reference': - val = self.model_id_get(cr, f_model, f_ref) + val = self.model_id_get(cr, f_ref) f_val = val[0] + ',' + str(val[1]) else: - f_val = self.id_get(cr, f_model, f_ref) + f_val = self.id_get(cr, f_ref) else: f_val = _eval_xml(self,field, self.pool, cr, self.uid, self.idref) if model._columns.has_key(f_name): @@ -832,23 +832,19 @@ form: module.record_id""" % (xml_id,) cr.commit() return rec_model, id - def id_get(self, cr, model, id_str): + def id_get(self, cr, id_str): if id_str in self.idref: return self.idref[id_str] - res = self.model_id_get(cr, model, id_str) + res = self.model_id_get(cr, id_str) if res and len(res)>1: res = res[1] return res - def model_id_get(self, cr, model, id_str): + def model_id_get(self, cr, id_str): model_data_obj = self.pool.get('ir.model.data') mod = self.module if '.' in id_str: mod,id_str = id_str.split('.') - result = model_data_obj._get_id(cr, self.uid, mod, id_str) - res = model_data_obj.read(cr, self.uid, [result], ['model', 'res_id']) - if res and res[0] and res[0]['res_id']: - return res[0]['model'], int(res[0]['res_id']) - return False + return model_data_obj.get_object_reference(cr, self.uid, mod, id_str) def parse(self, de): if not de.tag in ['terp', 'openerp']: diff --git a/bin/tools/misc.py b/bin/tools/misc.py index 7a416052d21..620302c51f5 100644 --- a/bin/tools/misc.py +++ b/bin/tools/misc.py @@ -76,20 +76,19 @@ def init_db(cr): p_id = None while categs: if p_id is not None: - cr.execute('select id \ - from ir_module_category \ - where name=%s and parent_id=%s', (categs[0], p_id)) + cr.execute('SELECT id \ + FROM ir_module_category \ + WHERE name=%s AND parent_id=%s', (categs[0], p_id)) else: - cr.execute('select id \ - from ir_module_category \ - where name=%s and parent_id is NULL', (categs[0],)) + cr.execute('SELECT id \ + FROM ir_module_category \ + WHERE name=%s AND parent_id IS NULL', (categs[0],)) c_id = cr.fetchone() if not c_id: - cr.execute('select nextval(\'ir_module_category_id_seq\')') + cr.execute('INSERT INTO ir_module_category \ + (name, parent_id) \ + VALUES (%s, %s) RETURNING id', (categs[0], p_id)) c_id = cr.fetchone()[0] - cr.execute('insert into ir_module_category \ - (id, name, parent_id) \ - values (%s, %s, %s)', (c_id, categs[0], p_id)) else: c_id = c_id[0] p_id = c_id @@ -104,23 +103,23 @@ def init_db(cr): state = 'uninstalled' else: state = 'uninstallable' - cr.execute('select nextval(\'ir_module_module_id_seq\')') - id = cr.fetchone()[0] - cr.execute('insert into ir_module_module \ - (id, author, website, name, shortdesc, description, \ - category_id, state, certificate, web) \ - values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)', ( - id, info.get('author', ''), + cr.execute('INSERT INTO ir_module_module \ + (author, website, name, shortdesc, description, \ + category_id, state, certificate, web, license) \ + VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s) RETURNING id', ( + info.get('author', ''), info.get('website', ''), i, info.get('name', False), info.get('description', ''), p_id, state, info.get('certificate') or None, - info.get('web') or False)) - cr.execute('insert into ir_model_data \ - (name,model,module, res_id, noupdate) values (%s,%s,%s,%s,%s)', ( + info.get('web') or False, + info.get('license') or 'AGPL-3')) + id = cr.fetchone()[0] + cr.execute('INSERT INTO ir_model_data \ + (name,model,module, res_id, noupdate) VALUES (%s,%s,%s,%s,%s)', ( 'module_meta_information', 'ir.module.module', i, id, True)) dependencies = info.get('depends', []) for d in dependencies: - cr.execute('insert into ir_module_module_dependency \ - (module_id,name) values (%s, %s)', (id, d)) + cr.execute('INSERT INTO ir_module_module_dependency \ + (module_id,name) VALUES (%s, %s)', (id, d)) cr.commit() def find_in_path(name):