diff --git a/openerp/addons/base/__openerp__.py b/openerp/addons/base/__openerp__.py index 090fc0c5526..5b65bff4bd7 100644 --- a/openerp/addons/base/__openerp__.py +++ b/openerp/addons/base/__openerp__.py @@ -80,6 +80,7 @@ 'demo_xml': [ 'base_demo.xml', 'res/res_partner_demo.xml', + 'res/res_partner_demo.yml', 'res/res_widget_demo.xml', ], 'test': [ diff --git a/openerp/addons/base/base.sql b/openerp/addons/base/base.sql index 26d70b7ede6..441fe536a0a 100644 --- a/openerp/addons/base/base.sql +++ b/openerp/addons/base/base.sql @@ -146,17 +146,15 @@ select setval('ir_ui_menu_id_seq', 2); CREATE TABLE res_users ( id serial NOT NULL, - name varchar(64) not null, active boolean default True, login varchar(64) NOT NULL UNIQUE, password varchar(64) default null, - email varchar(64) default null, - context_tz varchar(64) default null, - signature text, - context_lang varchar(64) default '', + tz varchar(64) default null, + lang varchar(64) default '', -- No FK references below, will be added later by ORM -- (when the destination rows exist) company_id int, + partner_id int, primary key(id) ); alter table res_users add constraint res_users_login_uniq unique (login); @@ -385,7 +383,7 @@ CREATE TABLE ir_model_relation ( -- Users --------------------------------- -insert into res_users (id,login,password,name,active,company_id,context_lang) values (1,'admin','admin','Administrator',True,1,'en_US'); +insert into res_users (id,login,password,active,company_id,partner_id,lang) values (1,'admin','admin',True,1,1,'en_US'); insert into ir_model_data (name,module,model,noupdate,res_id) values ('user_root','base','res.users',True,1); -- Compatibility purpose, to remove V6.0 diff --git a/openerp/addons/base/base_data.xml b/openerp/addons/base/base_data.xml index 7f5b4dec109..0bf4fc9cdb5 100644 --- a/openerp/addons/base/base_data.xml +++ b/openerp/addons/base/base_data.xml @@ -4,7 +4,6 @@ ir.ui.menu.tree ir.ui.menu - tree @@ -1061,6 +1060,13 @@ + 45, Rue du Palais + Paris + 75016 + + +33 1 49 51 23 94 + info@yourcompany.com + www.yourcompany.com @@ -1082,24 +1088,29 @@ Your Company - Web: www.companyname.com - Tel: +1-212-555-12345 - IBAN: XX12 3456 7890 1234 5678 - SWIFT: SWIFTCODE - VAT: Company vat number + Your Company Slogan + Web: http://www.yourcompany.com - Tel: +33 1 49 51 23 94 + Bank Accounts... to be configured in menu Settings > Accounting/Invoicing. - - Administrator + + Administrator + + + + + + - + + Administrator - - - @@ -1624,7 +1635,7 @@ - Reserve + International Bank diff --git a/openerp/addons/base/base_demo.xml b/openerp/addons/base/base_demo.xml index a0149096902..34feb3af990 100644 --- a/openerp/addons/base/base_demo.xml +++ b/openerp/addons/base/base_demo.xml @@ -1,19 +1,6 @@ - - - Fabien D'souza - Chaussee de Namur - 1367 - Gerompont - (+32).81.81.37.00 - default - - - - - demo demo diff --git a/openerp/addons/base/i18n/it.po b/openerp/addons/base/i18n/it.po index 5fc3ece66a8..e1f369680a2 100644 --- a/openerp/addons/base/i18n/it.po +++ b/openerp/addons/base/i18n/it.po @@ -7,14 +7,15 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.4\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-02-08 00:44+0000\n" -"PO-Revision-Date: 2012-02-16 22:06+0000\n" -"Last-Translator: Davide Corio - agilebg.com \n" +"PO-Revision-Date: 2012-08-10 18:42+0000\n" +"Last-Translator: Leonardo Pistone - Agile BG - Domsense " +"\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-19 04:40+0000\n" -"X-Generator: Launchpad (build 15637)\n" +"X-Launchpad-Export-Date: 2012-08-11 05:45+0000\n" +"X-Generator: Launchpad (build 15780)\n" #. module: base #: model:res.country,name:base.sh @@ -849,6 +850,10 @@ msgid "" "Launch Manually Once: after hacing been launched manually, it sets " "automatically to Done." msgstr "" +"Manuale: Esegui manualmente\n" +"Automatico: Viene eseguito ogni volta che il sistema viene riconfigurato \n" +"Esegui manualmente una volta sola: una volta lanciata l'esecuzione, lo stato " +"viene impostato autmaticamente su \"Eseguito\"" #. module: base #: selection:base.language.install,lang:0 @@ -1593,7 +1598,7 @@ msgstr "Login" #: model:ir.actions.act_window,name:base.action_wizard_update_translations #: model:ir.ui.menu,name:base.menu_wizard_update_translations msgid "Synchronize Terms" -msgstr "" +msgstr "Sincronizza Termini" #. module: base #: view:ir.actions.server:0 @@ -2980,7 +2985,7 @@ msgstr "Armenia" #: 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 "Parametri Configurazione" +msgstr "Parametri di configurazione" #. module: base #: constraint:ir.cron:0 @@ -3077,7 +3082,7 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_wiki_quality_manual msgid "Wiki: Quality Manual" -msgstr "" +msgstr "Wiki: Manuale della Qualità" #. module: base #: selection:ir.actions.act_window.view,view_mode:0 @@ -3105,7 +3110,7 @@ msgstr "Settore Risorse Umane" #. module: base #: model:ir.ui.menu,name:base.menu_dashboard_admin msgid "Administration Dashboard" -msgstr "" +msgstr "Dashboard di Amministrazione" #. module: base #: code:addons/orm.py:4408 @@ -3748,7 +3753,7 @@ msgstr "" #. module: base #: model:ir.module.category,name:base.module_category_human_resources msgid "Human Resources" -msgstr "" +msgstr "Risorse Umane" #. module: base #: model:ir.actions.act_window,name:base.action_country @@ -3808,7 +3813,7 @@ msgstr "Partita IVA" #. module: base #: field:res.users,new_password:0 msgid "Set password" -msgstr "" +msgstr "Nuova password" #. module: base #: view:res.lang:0 @@ -4737,7 +4742,7 @@ msgstr "Kenia" #: model:ir.actions.act_window,name:base.action_translation #: model:ir.ui.menu,name:base.menu_action_translation msgid "Translated Terms" -msgstr "" +msgstr "Termini Tradotti" #. module: base #: view:res.partner.event:0 @@ -6368,7 +6373,7 @@ msgstr "Menu" #. module: base #: selection:ir.actions.todo,type:0 msgid "Launch Manually Once" -msgstr "" +msgstr "Esegui manualmente una volta sola" #. module: base #: model:ir.module.category,name:base.module_category_hidden @@ -6741,6 +6746,8 @@ msgid "" "password, otherwise leave empty. After a change of password, the user has to " "login again." msgstr "" +"Per modificare la password scrivila qui, altrimenti lascia il campo vuoto. " +"Dopo aver cambiato la password, l'utente deve fare nuovamente login." #. module: base #: view:publisher_warranty.contract:0 @@ -6929,7 +6936,7 @@ msgstr "" #. module: base #: view:ir.property:0 msgid "Parameters that are used by all resources." -msgstr "" +msgstr "Parametri utilizzati da tutte le risorse" #. module: base #: model:res.country,name:base.mz @@ -9394,7 +9401,7 @@ msgstr "" #: model:ir.model,name:base.model_ir_model #: model:ir.ui.menu,name:base.ir_model_model_menu msgid "Models" -msgstr "" +msgstr "Modelli" #. module: base #: code:addons/base/ir/ir_cron.py:292 @@ -9405,7 +9412,7 @@ msgstr "" #. module: base #: selection:ir.actions.todo,type:0 msgid "Launch Manually" -msgstr "" +msgstr "Esegui manualmente" #. module: base #: model:res.country,name:base.be @@ -10753,7 +10760,7 @@ msgstr "Nazione" #. module: base #: model:ir.ui.menu,name:base.next_id_5 msgid "Sequences & Identifiers" -msgstr "" +msgstr "Sequenze e Identificatori" #. module: base #: model:ir.module.module,description:base.module_l10n_th @@ -12636,7 +12643,7 @@ msgstr "ir.values" #. module: base #: model:res.groups,name:base.group_no_one msgid "Technical Features" -msgstr "" +msgstr "Funzionalità tecniche" #. module: base #: selection:base.language.install,lang:0 @@ -12656,7 +12663,7 @@ msgstr "" #: view:ir.model.data:0 #: model:ir.ui.menu,name:base.ir_model_data_menu msgid "External Identifiers" -msgstr "" +msgstr "Identificatori Esterni" #. module: base #: model:res.groups,name:base.group_sale_salesman @@ -12950,6 +12957,7 @@ msgid "" "Please define at least one SMTP server, or provide the SMTP parameters " "explicitly." msgstr "" +"Definire almeno un server SMTP, o fornire esplicitamente i parametri SMTP" #. module: base #: view:ir.attachment:0 @@ -12993,7 +13001,7 @@ msgstr "Gabon" #. module: base #: model:res.groups,name:base.group_multi_company msgid "Multi Companies" -msgstr "" +msgstr "Multi-azienda" #. module: base #: view:ir.model:0 @@ -13166,7 +13174,7 @@ msgstr "Varie" #: view:ir.mail_server:0 #: model:ir.ui.menu,name:base.menu_mail_servers msgid "Outgoing Mail Servers" -msgstr "" +msgstr "Server della Posta in Uscita" #. module: base #: model:res.country,name:base.cn diff --git a/openerp/addons/base/i18n/nl.po b/openerp/addons/base/i18n/nl.po index 818bd5c4602..45560f7e363 100644 --- a/openerp/addons/base/i18n/nl.po +++ b/openerp/addons/base/i18n/nl.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.0\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-02-08 00:44+0000\n" -"PO-Revision-Date: 2012-02-19 13:01+0000\n" +"PO-Revision-Date: 2012-08-09 06:15+0000\n" "Last-Translator: Erwin \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-19 04:38+0000\n" -"X-Generator: Launchpad (build 15637)\n" +"X-Launchpad-Export-Date: 2012-08-10 04:58+0000\n" +"X-Generator: Launchpad (build 15761)\n" #. module: base #: model:res.country,name:base.sh @@ -1443,7 +1443,7 @@ msgstr "" "U kunt de navolgende extra data toevoegen aan een verkooporder:\n" "* Aanvraagdatum\n" "* Bevestigde datum\n" -"* Effectieve datum\n" +"* Boek datum\n" #. module: base #: model:ir.module.module,shortdesc:base.module_account_sequence @@ -8110,7 +8110,7 @@ msgstr "Kenmerk" #. module: base #: model:ir.module.module,shortdesc:base.module_analytic msgid "Analytic Accounting" -msgstr "Kostenplaats boekhouding" +msgstr "Kostenplaatsen" #. module: base #: view:ir.actions.report.xml:0 diff --git a/openerp/addons/base/ir/ir.xml b/openerp/addons/base/ir/ir.xml index b587a846b91..fac2946e204 100644 --- a/openerp/addons/base/ir/ir.xml +++ b/openerp/addons/base/ir/ir.xml @@ -6,7 +6,6 @@ ir.values.form.action ir.values - form
@@ -29,7 +28,6 @@ ir.values.form.defaults ir.values - form @@ -52,7 +50,6 @@ ir.values.tree.action ir.values - tree @@ -65,7 +62,6 @@ ir.values.search.action ir.values - search ir.sequence.form ir.sequence - form @@ -179,7 +174,6 @@ ir.sequence.tree ir.sequence - tree @@ -197,7 +191,6 @@ ir.sequence.search ir.sequence - search @@ -223,7 +216,6 @@ ir.sequence.type.form ir.sequence.type - form @@ -239,7 +231,6 @@ ir.sequence.type.tree ir.sequence.type - tree @@ -251,7 +242,6 @@ ir.sequence.type.search ir.sequence.type - search @@ -276,7 +266,6 @@ ir.actions.actions ir.actions.actions - form @@ -290,7 +279,6 @@ ir.actions.actions.tree ir.actions.actions - tree @@ -301,7 +289,6 @@ ir.actions.actions.search ir.actions.actions - search @@ -327,7 +314,6 @@ ir.actions.report.xml ir.actions.report.xml - form @@ -372,7 +358,6 @@ ir.actions.report.xml.tree ir.actions.report.xml - tree @@ -387,7 +372,6 @@ ir.actions.report.xml.search ir.actions.report.xml - search ir.actions.windows.tree ir.actions.act_window - tree @@ -428,7 +411,6 @@ ir.actions.windows.form ir.actions.act_window - form @@ -491,7 +473,6 @@ ir.actions.windows.search ir.actions.act_window - search @@ -527,7 +508,6 @@ ir.actions.wizard.tree ir.actions.wizard - tree @@ -540,7 +520,6 @@ ir.actions.wizard ir.actions.wizard - form @@ -558,7 +537,6 @@ ir.actions.wizard.search ir.actions.wizard - search ir.needaction_users_rel.tree ir.needaction_users_rel - tree 10 @@ -607,7 +584,6 @@ ir.ui.view ir.ui.view - form @@ -633,7 +609,6 @@ ir.ui.view.tree ir.ui.view - tree @@ -649,7 +624,6 @@ ir.ui.view.search ir.ui.view - search @@ -686,7 +660,6 @@ ir.ui.view.custom.search ir.ui.view.custom - search @@ -697,7 +670,6 @@ ir.ui.view.custom.form ir.ui.view.custom - form @@ -713,7 +685,6 @@ ir.ui.view.custom.tree ir.ui.view.custom - tree @@ -734,7 +705,6 @@ ir.attachment.view ir.attachment - form @@ -773,7 +743,6 @@ ir.attachment.view.tree ir.attachment - tree @@ -788,7 +757,6 @@ ir.attachment.search ir.attachment - search @@ -831,7 +799,6 @@ ir.model.form ir.model - form @@ -921,7 +888,6 @@ ir.model.tree ir.model - tree @@ -935,7 +901,6 @@ ir.model.search ir.model - search @@ -957,7 +922,6 @@ ir.model.fields.form ir.model.fields - form @@ -1000,7 +964,6 @@ ir.model.fields.tree ir.model.fields - tree @@ -1015,7 +978,6 @@ ir.model.fields.search ir.model.fields - search @@ -1044,7 +1006,6 @@ ir.model.data.form ir.model.data - form @@ -1071,7 +1032,6 @@ ir.model.data.list ir.model.data - tree @@ -1084,7 +1044,6 @@ ir.model.data.search ir.model.data - search ir.model.constraint.form ir.model.constraint - form @@ -1123,7 +1081,6 @@ ir.model.constraint.list ir.model.constraint - tree @@ -1137,7 +1094,6 @@ ir.model.relation.form ir.model.relation - form @@ -1153,7 +1109,6 @@ ir.model.relation.list ir.model.relation - tree @@ -1214,7 +1169,6 @@ Translations ir.translation - search Translations ir.translation - form @@ -1257,7 +1210,6 @@ Translations ir.translation - tree @@ -1286,7 +1238,6 @@ ir.ui.view_sc ir.ui.view_sc - form @@ -1299,7 +1250,6 @@ ir.ui.view_sc ir.ui.view_sc - tree @@ -1311,7 +1261,6 @@ ir.ui.menu.tree ir.ui.menu - tree @@ -1324,7 +1273,6 @@ ir.ui.menu.form2 ir.ui.menu - form @@ -1364,7 +1312,6 @@ ir.ui.menu.search ir.ui.menu - search @@ -1389,7 +1336,6 @@ ir.cron.tree ir.cron - tree @@ -1406,7 +1352,6 @@ ir.cron.form ir.cron - form @@ -1444,7 +1389,6 @@ ir.cron.search ir.cron - search @@ -1463,7 +1407,6 @@ ir.cron.calendar ir.cron - calendar @@ -1490,7 +1433,6 @@ ir.model.access.tree ir.model.access - tree @@ -1506,7 +1448,6 @@ ir.model.access.form ir.model.access - form @@ -1528,7 +1469,6 @@ ir.model.access.search ir.model.access - search @@ -1561,7 +1501,6 @@ Record rules ir.rule - form @@ -1604,7 +1543,6 @@ Record rules ir.rule - tree @@ -1621,7 +1559,6 @@ Record rules ir.rule - search @@ -1657,7 +1594,6 @@ Server Action ir.actions.server - form @@ -1747,7 +1683,6 @@ Server Actions ir.actions.server - tree @@ -1761,7 +1696,6 @@ ir.actions.server.search ir.actions.server - search @@ -1791,7 +1725,6 @@ ir.actions.todo Config Wizard Steps - tree @@ -1809,7 +1742,6 @@ ir.actions.todo Config Wizard Steps - form
@@ -1839,7 +1771,6 @@ ir.actions.todo ir.actions.todo.select - search @@ -1875,7 +1806,6 @@ ir.mail.server.form ir.mail_server - form @@ -1902,7 +1832,6 @@ ir.mail.server.list ir.mail_server - tree @@ -1917,7 +1846,6 @@ ir.mail.server.search ir.mail_server - search ir.config_parameter.search ir.config_parameter - search @@ -16,7 +15,6 @@ ir.config_parameter.list ir.config_parameter - tree @@ -27,7 +25,6 @@ ir.config_parameter.form ir.config_parameter - form diff --git a/openerp/addons/base/ir/ir_filters.xml b/openerp/addons/base/ir/ir_filters.xml index fec6b0a604e..e4b10d41a03 100644 --- a/openerp/addons/base/ir/ir_filters.xml +++ b/openerp/addons/base/ir/ir_filters.xml @@ -14,7 +14,6 @@ ir.filters.form ir.filters - form @@ -35,7 +34,6 @@ ir.filters.tree ir.filters - tree @@ -50,7 +48,6 @@ ir.filters.search ir.filters - search diff --git a/openerp/addons/base/ir/ir_ui_view.py b/openerp/addons/base/ir/ir_ui_view.py index ac3644a28f7..b2805884f18 100644 --- a/openerp/addons/base/ir/ir_ui_view.py +++ b/openerp/addons/base/ir/ir_ui_view.py @@ -24,6 +24,7 @@ from lxml import etree from tools import graph from tools.safe_eval import safe_eval as eval import tools +from tools.view_validation import valid_view import os import logging @@ -47,11 +48,22 @@ view_custom() class view(osv.osv): _name = 'ir.ui.view' + + def _type_field(self, cr, uid, ids, name, args, context=None): + result = {} + for record in self.browse(cr, uid, ids, context): + # Get the type from the inherited view if any. + if record.inherit_id: + result[record.id] = record.inherit_id.type + else: + result[record.id] = etree.fromstring(record.arch.encode('utf8')).tag + return result + _columns = { 'name': fields.char('View Name',size=64, required=True), 'model': fields.char('Object', size=64, required=True, select=True), 'priority': fields.integer('Sequence', required=True), - 'type': fields.selection(( + 'type': fields.function(_type_field, type='selection', selection=[ ('tree','Tree'), ('form','Form'), ('mdx','mdx'), @@ -60,7 +72,7 @@ class view(osv.osv): ('diagram','Diagram'), ('gantt', 'Gantt'), ('kanban', 'Kanban'), - ('search','Search')), 'View Type', required=True, select=True), + ('search','Search')], string='View Type', required=True, select=True, store=True), 'arch': fields.text('View Architecture', required=True), 'inherit_id': fields.many2one('ir.ui.view', 'Inherited View', ondelete='cascade', select=True), 'field_parent': fields.char('Child Field',size=64), @@ -76,6 +88,11 @@ class view(osv.osv): # Holds the RNG schema _relaxng_validator = None + def create(self, cr, uid, values, context=None): + if 'type' in values: + _logger.warning("Setting the `type` field is deprecated in the `ir.ui.view` model.") + return super(osv.osv, self).create(cr, uid, values, context) + def _relaxng(self): if not self._relaxng_validator: frng = tools.file_open(os.path.join('base','rng','view.rng')) @@ -123,6 +140,8 @@ class view(osv.osv): for error in validator.error_log: _logger.error(tools.ustr(error)) return False + if not valid_view(view_arch): + return False return True _constraints = [ @@ -133,7 +152,7 @@ class view(osv.osv): super(view, self)._auto_init(cr, context) cr.execute('SELECT indexname FROM pg_indexes WHERE indexname = \'ir_ui_view_model_type_inherit_id\'') if not cr.fetchone(): - cr.execute('CREATE INDEX ir_ui_view_model_type_inherit_id ON ir_ui_view (model, type, inherit_id)') + cr.execute('CREATE INDEX ir_ui_view_model_type_inherit_id ON ir_ui_view (model, inherit_id)') def get_inheriting_views_arch(self, cr, uid, view_id, model, context=None): """Retrieves the architecture of views that inherit from the given view, from the sets of diff --git a/openerp/addons/base/ir/wizard/wizard_menu_view.xml b/openerp/addons/base/ir/wizard/wizard_menu_view.xml index 9f5d912ed1a..7fd32b256e2 100644 --- a/openerp/addons/base/ir/wizard/wizard_menu_view.xml +++ b/openerp/addons/base/ir/wizard/wizard_menu_view.xml @@ -4,7 +4,6 @@ Create Menu wizard.ir.model.menu.create - form diff --git a/openerp/addons/base/ir/workflow/workflow_view.xml b/openerp/addons/base/ir/workflow/workflow_view.xml index c20eeaed085..44dbc54c718 100644 --- a/openerp/addons/base/ir/workflow/workflow_view.xml +++ b/openerp/addons/base/ir/workflow/workflow_view.xml @@ -12,7 +12,6 @@ workflow.form workflow - form @@ -28,7 +27,6 @@ workflow.search workflow - search @@ -39,7 +37,6 @@ workflow.diagram workflow - diagram @@ -61,7 +58,6 @@ workflow.tree workflow - tree @@ -89,7 +85,6 @@ workflow.activity.form workflow.activity - form @@ -145,7 +140,6 @@ workflow.activity.tree workflow.activity - tree @@ -160,7 +154,6 @@ workflow.activity.search workflow.activity - search @@ -197,7 +190,6 @@ workflow.transition.form workflow.transition - form @@ -221,7 +213,6 @@ workflow.transition.tree workflow.transition - tree @@ -235,7 +226,6 @@ workflow.transition.search workflow.transition - search @@ -263,7 +253,6 @@ workflow.instance.form workflow.instance - form @@ -280,7 +269,6 @@ workflow.instance.tree workflow.instance - tree @@ -293,7 +281,6 @@ workflow.instance.search workflow.instance - search @@ -324,7 +311,6 @@ workflow.workitem.form workflow.workitem - form @@ -342,7 +328,6 @@ workflow.workitem.tree workflow.workitem - tree @@ -356,7 +341,6 @@ workflow.workitem.search workflow.workitem - search diff --git a/openerp/addons/base/module/module.py b/openerp/addons/base/module/module.py index dcd7182b270..fb10d78e5fe 100644 --- a/openerp/addons/base/module/module.py +++ b/openerp/addons/base/module/module.py @@ -139,14 +139,17 @@ class module(osv.osv): # We use try except, because views or menus may not exist. try: res_mod_dic = res[module_rec.id] - for v in view_obj.browse(cr, uid, imd_models.get('ir.ui.view', []), context=context): + view_ids = imd_models.get('ir.ui.view', []) + for v in view_obj.browse(cr, uid, view_ids, context=context): aa = v.inherit_id and '* INHERIT ' or '' res_mod_dic['views_by_module'].append(aa + v.name + '('+v.type+')') - for rx in report_obj.browse(cr, uid, imd_models.get('ir.actions.report.xml', []), context=context): + report_ids = imd_models.get('ir.actions.report.xml', []) + for rx in report_obj.browse(cr, uid, report_ids, context=context): res_mod_dic['reports_by_module'].append(rx.name) - for um in menu_obj.browse(cr, uid, imd_models.get('ir.ui.menu', []), context=context): + menu_ids = imd_models.get('ir.ui.menu', []) + for um in menu_obj.browse(cr, uid, menu_ids, context=context): res_mod_dic['menus_by_module'].append(um.complete_name) except KeyError, e: _logger.warning( diff --git a/openerp/addons/base/module/module_view.xml b/openerp/addons/base/module/module_view.xml index 6139895021b..19f9dbdaa44 100644 --- a/openerp/addons/base/module/module_view.xml +++ b/openerp/addons/base/module/module_view.xml @@ -7,7 +7,6 @@ ir.module.category.form ir.module.category - form @@ -23,7 +22,6 @@ ir.module.category.tree ir.module.category - tree child_ids @@ -38,7 +36,6 @@ ir.module.module.list.select ir.module.module - search Modules Kanban ir.module.module - kanban @@ -69,7 +65,7 @@ -
+
@@ -108,7 +104,6 @@ ir.module.module.form ir.module.module - form @@ -170,7 +165,6 @@ ir.module.module.tree ir.module.module - tree diff --git a/openerp/addons/base/module/wizard/base_export_language_view.xml b/openerp/addons/base/module/wizard/base_export_language_view.xml index 9927a647c1b..88e411845c3 100644 --- a/openerp/addons/base/module/wizard/base_export_language_view.xml +++ b/openerp/addons/base/module/wizard/base_export_language_view.xml @@ -5,7 +5,6 @@ Export Translations base.language.export - form diff --git a/openerp/addons/base/module/wizard/base_import_language_view.xml b/openerp/addons/base/module/wizard/base_import_language_view.xml index f6466479bff..727de4e381b 100644 --- a/openerp/addons/base/module/wizard/base_import_language_view.xml +++ b/openerp/addons/base/module/wizard/base_import_language_view.xml @@ -5,7 +5,6 @@ Import Translation base.language.import - form diff --git a/openerp/addons/base/module/wizard/base_language_install_view.xml b/openerp/addons/base/module/wizard/base_language_install_view.xml index d31956c6a04..46870c3ff7c 100644 --- a/openerp/addons/base/module/wizard/base_language_install_view.xml +++ b/openerp/addons/base/module/wizard/base_language_install_view.xml @@ -5,7 +5,6 @@ Load a Translation base.language.install - form diff --git a/openerp/addons/base/module/wizard/base_module_configuration_view.xml b/openerp/addons/base/module/wizard/base_module_configuration_view.xml index 61f920b4333..909a655f1ef 100644 --- a/openerp/addons/base/module/wizard/base_module_configuration_view.xml +++ b/openerp/addons/base/module/wizard/base_module_configuration_view.xml @@ -5,7 +5,6 @@ Module Configuration base.module.configuration - form
- - + +
@@ -126,13 +122,13 @@ res.partner.bank.tree res.partner.bank - tree + @@ -140,7 +136,6 @@ res.partner.bank.search res.partner.bank - search @@ -155,7 +150,7 @@ res.partner.bank form tree,form - Configure your company's bank accounts. You can reorder bank accounts from the list view. If you use the accounting application of OpenERP, journals and accounts will be created automatically based on these data. + Configure your company's bank accounts and select those that must appear on the report footer. You can reorder bank accounts from the list view. If you use the accounting application of OpenERP, journals and accounts will be created automatically based on these data. res.company.form res.company - form @@ -51,10 +50,10 @@
- +
- +
@@ -102,7 +101,6 @@ res.company.tree res.company - tree child_ids @@ -131,7 +129,6 @@ multi_company.default.tree multi_company.default - tree @@ -148,7 +145,6 @@ multi_company.default.form multi_company.default - form @@ -173,7 +169,6 @@ multi_company.default.search multi_company.default - search diff --git a/openerp/addons/base/res/res_config.xml b/openerp/addons/base/res/res_config.xml index a734644302f..bdfd6ab329c 100644 --- a/openerp/addons/base/res/res_config.xml +++ b/openerp/addons/base/res/res_config.xml @@ -1,13 +1,11 @@ - res.config.view.base res.config - form - +
diff --git a/openerp/addons/base/res/res_widget_view.xml b/openerp/addons/base/res/res_widget_view.xml index 74a17a98ce7..bad582f97db 100644 --- a/openerp/addons/base/res/res_widget_view.xml +++ b/openerp/addons/base/res/res_widget_view.xml @@ -4,7 +4,6 @@ res.widget.search res.widget - search @@ -14,7 +13,6 @@ res.widget.form res.widget - form
@@ -29,7 +27,6 @@ res.widget.tree res.widget - tree @@ -49,7 +46,6 @@ res.widget.user.tree res.widget.user - tree @@ -61,7 +57,6 @@ res.widget.user.form res.widget.user - form @@ -85,7 +80,6 @@ Homepage Widgets Management res.widget.wizard - form
diff --git a/openerp/addons/base/res/company_icon.png b/openerp/addons/base/static/src/img/company_image.png similarity index 100% rename from openerp/addons/base/res/company_icon.png rename to openerp/addons/base/static/src/img/company_image.png diff --git a/openerp/addons/base/static/src/img/partner_image.png b/openerp/addons/base/static/src/img/partner_image.png new file mode 100644 index 00000000000..87fdbc5af55 Binary files /dev/null and b/openerp/addons/base/static/src/img/partner_image.png differ diff --git a/openerp/addons/base/test/base_test.xml b/openerp/addons/base/test/base_test.xml index d3c1df9bd21..27bcabfc8f9 100644 --- a/openerp/addons/base/test/base_test.xml +++ b/openerp/addons/base/test/base_test.xml @@ -7,7 +7,7 @@ --> - ASUStek + ASUSTeK diff --git a/openerp/addons/base/test/test_osv_expression.yml b/openerp/addons/base/test/test_osv_expression.yml index fa7a69b74e9..d607b17f801 100644 --- a/openerp/addons/base/test/test_osv_expression.yml +++ b/openerp/addons/base/test/test_osv_expression.yml @@ -2,22 +2,8 @@ Testing for hierarchical search in M2M - !python {model: res.partner }: | - ids = self.search(cr, uid, [('category_id', 'child_of','supplier')]) + ids = self.search(cr, uid, [('category_id', 'child_of',ref('res_partner_category_0'))]) assert len(ids) >= 1, ids - -- - Test hierarchical search in M2M with child ID1 -- - !python {model: res.partner }: | - ids = self.search(cr, uid, [('category_id', 'child_of','Components Supplier')]) - assert len(ids) >= 1, ids -- - Test hierarchical search in M2M with child ID2 -- - !python {model: res.partner }: | - ids = self.search(cr, uid, [('category_id', 'child_of','Miscellaneous Suppliers')]) - assert len(ids) >= 1, ids - - "1.0 Setup test partner categories: parent root" - @@ -464,8 +450,8 @@ !python {model: res.partner }: | all_ids = self.search(cr, uid, [('name', '=like', 'A_e_or')]) assert len(all_ids) == 1, "Must match one partner (Axelor), got %r"%all_ids - all_ids = self.search(cr, uid, [('name', '=ilike', 'm_____')]) - assert len(all_ids) == 1, "Must match *only* one partner (Maxtor), got %r"%all_ids + all_ids = self.search(cr, uid, [('name', '=ilike', 'v%')]) + assert len(all_ids) >= 1, "Must match one partner (Vicking Direct), got %r"%all_ids - Check that =like/=ilike expressions (no wildcard variants of like/ilike) are working on translated field. - @@ -512,7 +498,7 @@ Testing for Many2Many field with category supplier and active=False - !python {model: res.partner }: | - vals = {'category_id': [(6, 0, [ref("base.res_partner_category_8")])], + vals = {'category_id': [(6, 0, [ref("base.res_partner_category_1")])], 'name': 'OpenERP Test', 'active': False, 'child_ids': [(0, 0, {'name': 'address of OpenERP Test', 'country_id': ref("base.be")})] diff --git a/openerp/modules/__init__.py b/openerp/modules/__init__.py index f28c397bb23..56265e353a2 100644 --- a/openerp/modules/__init__.py +++ b/openerp/modules/__init__.py @@ -24,11 +24,7 @@ """ -import openerp.modules.db -import openerp.modules.graph -import openerp.modules.loading -import openerp.modules.migration -import openerp.modules.module +from . import db, graph, loading, migration, module, registry # TODO temporarily expose those things from openerp.modules.module import \ diff --git a/openerp/modules/registry.py b/openerp/modules/registry.py index 7c7a5c96f8d..ae9772b661a 100644 --- a/openerp/modules/registry.py +++ b/openerp/modules/registry.py @@ -22,6 +22,7 @@ """ Models registries. """ +from contextlib import contextmanager import logging import threading @@ -43,12 +44,12 @@ class Registry(object): """ def __init__(self, db_name): - self.models = {} # model name/model instance mapping + self.models = {} # model name/model instance mapping self._sql_error = {} self._store_function = {} self._init = True self._init_parent = {} - + # modules fully loaded (maintained during init phase by `loading` module) self._init_modules = set() @@ -119,6 +120,17 @@ class Registry(object): for model in self.models.itervalues(): model.clear_caches() + @contextmanager + def cursor(self, auto_commit=True): + cr = self.db.cursor() + try: + yield cr + if auto_commit: + cr.commit() + finally: + cr.close() + + class RegistryManager(object): """ Model registries manager. @@ -196,7 +208,6 @@ class RegistryManager(object): del cls.registries[db_name] openerp.cron.cancel(db_name) - @classmethod def delete_all(cls): """Delete all the registries. """ diff --git a/openerp/osv/fields.py b/openerp/osv/fields.py index 4ff23956050..5a47601f8a5 100644 --- a/openerp/osv/fields.py +++ b/openerp/osv/fields.py @@ -45,6 +45,7 @@ import openerp.tools as tools from openerp.tools.translate import _ from openerp.tools import float_round, float_repr import simplejson +from openerp.tools.html_sanitize import html_sanitize _logger = logging.getLogger(__name__) @@ -109,6 +110,7 @@ class _column(object): self.selectable = True self.group_operator = args.get('group_operator', False) self.groups = False # CSV list of ext IDs of groups that can access this field + self.deprecated = False # Optional deprecation warning for a in args: if args[a]: setattr(self, a, args[a]) @@ -227,6 +229,14 @@ class char(_column): class text(_column): _type = 'text' +class html(text): + _type = 'html' + _symbol_c = '%s' + def _symbol_f(x): + return html_sanitize(x) + + _symbol_set = (_symbol_c, _symbol_f) + import __builtin__ class float(_column): @@ -648,6 +658,20 @@ class many2many(_column): col2 = '%s_id' % dest_model._table return (tbl, col1, col2) + def _get_query_and_where_params(self, cr, model, ids, values, where_params): + """ Extracted from ``get`` to facilitate fine-tuning of the generated + query. """ + query = 'SELECT %(rel)s.%(id2)s, %(rel)s.%(id1)s \ + FROM %(rel)s, %(from_c)s \ + WHERE %(rel)s.%(id1)s IN %%s \ + AND %(rel)s.%(id2)s = %(tbl)s.id \ + %(where_c)s \ + %(order_by)s \ + %(limit)s \ + OFFSET %(offset)d' \ + % values + return query, where_params + def get(self, cr, model, ids, name, user=None, offset=0, context=None, values=None): if not context: context = {} @@ -685,15 +709,7 @@ class many2many(_column): if self._limit is not None: limit_str = ' LIMIT %d' % self._limit - query = 'SELECT %(rel)s.%(id2)s, %(rel)s.%(id1)s \ - FROM %(rel)s, %(from_c)s \ - WHERE %(rel)s.%(id1)s IN %%s \ - AND %(rel)s.%(id2)s = %(tbl)s.id \ - %(where_c)s \ - %(order_by)s \ - %(limit)s \ - OFFSET %(offset)d' \ - % {'rel': rel, + query, where_params = self._get_query_and_where_params(cr, model, ids, {'rel': rel, 'from_c': from_c, 'tbl': obj._table, 'id1': id1, @@ -702,7 +718,8 @@ class many2many(_column): 'limit': limit_str, 'order_by': order_by, 'offset': offset, - } + }, where_params) + cr.execute(query, [tuple(ids),] + where_params) for r in cr.fetchall(): res[r[1]].append(r[0]) diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index d8861a20c26..7c8085ea8ed 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -545,6 +545,7 @@ FIELDS_TO_PGTYPES = { fields.boolean: 'bool', fields.integer: 'int4', fields.text: 'text', + fields.html: 'text', fields.date: 'date', fields.datetime: 'timestamp', fields.binary: 'bytea', @@ -2442,9 +2443,9 @@ class BaseModel(object): context=context) result_template = dict.fromkeys(aggregated_fields, False) - result_template.update({groupby + '_count':0}) + result_template[groupby + '_count'] = 0 if groupby_list and len(groupby_list) > 1: - result_template.update(__context={'group_by': groupby_list[1:]}) + result_template['__context'] = {'group_by': groupby_list[1:]} # Merge the left_side (current results as dicts) with the right_side (all # possible values as m2o pairs). Both lists are supposed to be using the @@ -2463,10 +2464,8 @@ class BaseModel(object): grouped_value = right_side[0] if not grouped_value in known_values: line = dict(result_template) - line.update({ - groupby: right_side, - '__domain': [(groupby,'=',grouped_value)] + domain, - }) + line[groupby] = right_side + line['__domain'] = [(groupby,'=',grouped_value)] + domain result.append(line) known_values[grouped_value] = line while read_group_result or all_groups: @@ -3598,6 +3597,14 @@ class BaseModel(object): record[f] = res2[record['id']] else: record[f] = [] + + # Warn about deprecated fields now that fields_pre and fields_post are computed + # Explicitly use list() because we may receive tuples + for f in list(fields_pre) + list(fields_post): + field_column = self._all_columns.get(f) and self._all_columns.get(f).column + if field_column and field_column.deprecated: + _logger.warning('Field %s.%s is deprecated: %s', self._name, f, field_column.deprecated) + readonly = None for vals in res: for field in vals.copy(): @@ -3975,6 +3982,9 @@ class BaseModel(object): direct = [] totranslate = context.get('lang', False) and (context['lang'] != 'en_US') for field in vals: + field_column = self._all_columns.get(field) and self._all_columns.get(field).column + if field_column and field_column.deprecated: + _logger.warning('Field %s.%s is deprecated: %s', self._name, field, field_column.deprecated) 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: @@ -4197,7 +4207,7 @@ class BaseModel(object): 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.')) + _('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: diff --git a/openerp/release.py b/openerp/release.py index f0f1f049cb6..a151e939d20 100644 --- a/openerp/release.py +++ b/openerp/release.py @@ -30,9 +30,9 @@ RELEASE_LEVELS_DISPLAY = {ALPHA: ALPHA, # properly comparable using normal operarors, for example: # (6,1,0,'beta',0) < (6,1,0,'candidate',1) < (6,1,0,'candidate',2) # (6,1,0,'candidate',2) < (6,1,0,'final',0) < (6,1,2,'final',0) -version_info = (6,2,0,ALPHA,0) -version = '.'.join(map(str,version_info[:2])) + RELEASE_LEVELS_DISPLAY[version_info[3]] + str(version_info[4] or '') -major_version = '.'.join(map(str,version_info[:2])) +version_info = (7, 0, 0, ALPHA, 0) +version = '.'.join(map(str, version_info[:2])) + RELEASE_LEVELS_DISPLAY[version_info[3]] + str(version_info[4] or '') +serie = major_version = '.'.join(map(str, version_info[:2])) description = 'OpenERP Server' long_desc = '''OpenERP is a complete ERP and CRM. The main features are accounting (analytic diff --git a/openerp/service/web_services.py b/openerp/service/web_services.py index 5b44fdf615f..1dfd61c1daf 100644 --- a/openerp/service/web_services.py +++ b/openerp/service/web_services.py @@ -75,10 +75,10 @@ def _initialize_db(serv, id, db_name, demo, lang, user_password): mids = modobj.search(cr, 1, [('state', '=', 'installed')]) modobj.update_translations(cr, 1, mids, lang) - cr.execute('UPDATE res_users SET password=%s, context_lang=%s, active=True WHERE login=%s', ( + cr.execute('UPDATE res_users SET password=%s, lang=%s, active=True WHERE login=%s', ( user_password, lang, 'admin')) - cr.execute('SELECT login, password, name ' \ - ' FROM res_users ' \ + cr.execute('SELECT login, password ' \ + ' FROM res_users ' \ ' ORDER BY login') serv.actions[id].update(users=cr.dictfetchall(), clean=True) cr.commit() @@ -425,7 +425,7 @@ OpenERP is an ERP+CRM program for small and medium businesses. The whole source code is distributed under the terms of the GNU Public Licence. -(c) 2003-TODAY, Fabien Pinckaers - Tiny sprl''') +(c) 2003-TODAY - OpenERP SA''') if extended: return info, release.version diff --git a/openerp/tests/__init__.py b/openerp/tests/__init__.py index 913c5c759c9..d3ab62ebc1c 100644 --- a/openerp/tests/__init__.py +++ b/openerp/tests/__init__.py @@ -8,18 +8,18 @@ Tests can be explicitely added to the `fast_suite` or `checks` lists or not. See the :ref:`test-framework` section in the :ref:`features` list. """ -import test_expression -import test_ir_sequence -import test_orm -import test_uninstall +from . import test_expression, test_html_sanitize, test_ir_sequence, test_orm,\ + test_view_validation, test_uninstall fast_suite = [ test_ir_sequence, - ] +] checks = [ test_expression, + test_html_sanitize, test_orm, - ] + test_view_validation, +] # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/tests/addons/test_exceptions/view.xml b/openerp/tests/addons/test_exceptions/view.xml index 9c87e7ddbcb..180029e739a 100644 --- a/openerp/tests/addons/test_exceptions/view.xml +++ b/openerp/tests/addons/test_exceptions/view.xml @@ -5,7 +5,6 @@ Test exceptions test.exceptions.model - form