From 8de550dea8de6316b760f9a366cb59d060e053c3 Mon Sep 17 00:00:00 2001 From: "Amit Bhavsar (Open ERP)" Date: Wed, 24 Aug 2011 11:07:29 +0530 Subject: [PATCH 01/13] [usability],hide the partner categories in simple view bzr revid: amb@tinyerp.com-20110824053729-dkyk9e282azevs6q --- openerp/addons/base/res/partner/partner_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openerp/addons/base/res/partner/partner_view.xml b/openerp/addons/base/res/partner/partner_view.xml index 763147fb47e..8d56087fd6c 100644 --- a/openerp/addons/base/res/partner/partner_view.xml +++ b/openerp/addons/base/res/partner/partner_view.xml @@ -584,7 +584,7 @@ Manage the partner categories in order to better classify them for tracking and analysis purposes. A partner may belong to several categories and categories have a hierarchy structure: a partner belonging to a category also belong to his parent category. - + Date: Fri, 26 Aug 2011 18:17:36 +0200 Subject: [PATCH 02/13] [FIX] registry: use a unique list of models to load per module This is necessary to preserve the model loading order as defined in the module. This was broken when the metaclass was introduced to make the explicit model constructor call optional. One consequence is that the order in which the classes are declared in the module really defines their initialization order, even if the constructors are later called explcitly in a different order. This latter case should be fairly rare, and easy to fix too - simply putting the class declaration in the right order. bzr revid: odo@openerp.com-20110826161736-lgnpurtbcqtbseey --- openerp/modules/registry.py | 11 +++-------- openerp/osv/orm.py | 17 ++++++----------- 2 files changed, 9 insertions(+), 19 deletions(-) diff --git a/openerp/modules/registry.py b/openerp/modules/registry.py index 11f484a71a0..1cb31cd8d28 100644 --- a/openerp/modules/registry.py +++ b/openerp/modules/registry.py @@ -70,15 +70,10 @@ class Registry(object): res = [] - # Instanciate classes registered through their constructor and - # add them to the pool. - for klass in openerp.osv.orm.module_class_list.get(module, []): - res.append(klass.createInstance(self, cr)) - - # Instanciate classes automatically discovered. + # Instantiate registered classes (via metamodel discovery or via explicit + # constructor call), and add them to the pool. for cls in openerp.osv.orm.MetaModel.module_to_models.get(module, []): - if cls not in openerp.osv.orm.module_class_list.get(module, []): - res.append(cls.createInstance(self, cr)) + res.append(cls.createInstance(self, cr)) return res diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index d4a5d808990..d328d54059e 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -70,9 +70,6 @@ from openerp.tools import SKIPPED_ELEMENT_TYPES regex_order = re.compile('^(([a-z0-9_]+|"[a-z0-9_]+")( *desc| *asc)?( *, *|))+$', re.I) regex_object_name = re.compile(r'^[a-z0-9_.]+$') -# Mapping between openerp module names and their osv classes. -module_class_list = {} - # Super-user identifier (aka Administrator aka root) ROOT_USER_ID = 1 @@ -806,23 +803,21 @@ class orm_template(object): return obj def __new__(cls): - """ Register this model. + """Register this model. This doesn't create an instance but simply register the model as being part of the module where it is defined. - - TODO make it possible to not even have to call the constructor - to be registered. - """ - # Set the module name (e.g. base, sale, accounting, ...) on the class. module = cls.__module__.split('.')[0] if not hasattr(cls, '_module'): cls._module = module - # Remember which models to instanciate for this module. - module_class_list.setdefault(cls._module, []).append(cls) + # Record this class in the list of models to instantiate for this module, + # managed by the metaclass. + module_model_list = MetaModel.module_to_models.setdefault(cls._module, []) + if cls not in module_model_list: + module_model_list.append(cls) # Since we don't return an instance here, the __init__ # method won't be called. From 3f691a6c49bc7046d693a54229ff6084227feb70 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Sun, 28 Aug 2011 01:32:22 +0200 Subject: [PATCH 03/13] [IMP] res.partner.canal into crm.case.channel bzr revid: al@openerp.com-20110827233222-cy0w9z3jdm8ye1b2 --- openerp/addons/base/__openerp__.py | 1 - openerp/addons/base/res/partner/crm.py | 16 ---------- openerp/addons/base/res/partner/crm_demo.xml | 18 ----------- openerp/addons/base/res/partner/crm_view.xml | 32 ------------------- .../addons/base/security/ir.model.access.csv | 2 -- 5 files changed, 69 deletions(-) delete mode 100644 openerp/addons/base/res/partner/crm_demo.xml diff --git a/openerp/addons/base/__openerp__.py b/openerp/addons/base/__openerp__.py index c36dcecdf30..d7c73930b5f 100644 --- a/openerp/addons/base/__openerp__.py +++ b/openerp/addons/base/__openerp__.py @@ -82,7 +82,6 @@ 'demo_xml': [ 'base_demo.xml', 'res/partner/partner_demo.xml', - 'res/partner/crm_demo.xml', 'res/res_widget_demo.xml', ], 'test': [ diff --git a/openerp/addons/base/res/partner/crm.py b/openerp/addons/base/res/partner/crm.py index d7decade3ca..4425b7e6984 100644 --- a/openerp/addons/base/res/partner/crm.py +++ b/openerp/addons/base/res/partner/crm.py @@ -23,22 +23,6 @@ import time from osv import osv from osv import fields -# -# Sale/Purchase Canal, Media -# -class res_partner_canal(osv.osv): - _name = "res.partner.canal" - _description = "Channels" - _order = 'name' - _columns = { - 'name': fields.char('Channel Name', size=64, required=True), - 'active': fields.boolean('Active'), - } - _defaults = { - 'active': lambda *a: 1, - } -res_partner_canal() - class res_partner_event(osv.osv): _name = "res.partner.event" _columns = { diff --git a/openerp/addons/base/res/partner/crm_demo.xml b/openerp/addons/base/res/partner/crm_demo.xml deleted file mode 100644 index 03c69ef51d7..00000000000 --- a/openerp/addons/base/res/partner/crm_demo.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - website - - - phone - - - direct - - - E-mail - - - - diff --git a/openerp/addons/base/res/partner/crm_view.xml b/openerp/addons/base/res/partner/crm_view.xml index 51944da65c8..bc5904c9e9f 100644 --- a/openerp/addons/base/res/partner/crm_view.xml +++ b/openerp/addons/base/res/partner/crm_view.xml @@ -2,39 +2,7 @@ - - res.partner.canal.tree - res.partner.canal - tree - - - - - - - - - res.partner.canal.form - res.partner.canal - form - -
- - - - -
- - Channels - res.partner.canal - form - tree,form - Track from where is coming your leads and opportunities by creating specific channels that will be maintained at the creation of a document in the system. Some examples of channels can be: Website, Phone Call, Reseller, etc. - - - res.partner.event.form diff --git a/openerp/addons/base/security/ir.model.access.csv b/openerp/addons/base/security/ir.model.access.csv index f3e19f49535..8949052f89b 100644 --- a/openerp/addons/base/security/ir.model.access.csv +++ b/openerp/addons/base/security/ir.model.access.csv @@ -64,8 +64,6 @@ "access_res_partner_bank_type_group_user","res_partner_bank_type group_user","model_res_partner_bank_type",,1,0,0,0 "access_res_partner_bank_type_field_group_partner_manager","res_partner_bank_type_field group_partner_manager","model_res_partner_bank_type_field","group_partner_manager",1,1,1,1 "access_res_partner_bank_type_field_group_user","res_partner_bank_type_field group_user","model_res_partner_bank_type_field",,1,0,0,0 -"access_res_partner_canal_group_user","res_partner_canal group_user","model_res_partner_canal","group_user",1,0,0,0 -"access_res_partner_canal_group_partner_manager","res_partner_canal group_partner_manager","model_res_partner_canal","group_partner_manager",1,1,1,1 "access_res_partner_category_group_user","res_partner_category group_user","model_res_partner_category","group_user",1,0,0,0 "access_res_partner_category_group_partner_manager","res_partner_category group_partner_manager","model_res_partner_category","group_partner_manager",1,1,1,1 "access_res_partner_event_group_user","res_partner_event group_user","model_res_partner_event","group_user",1,0,0,0 From e6db9e4b715150d3756d56ad2f1980770039b97f Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Sun, 28 Aug 2011 02:13:14 +0200 Subject: [PATCH 04/13] [IMP] renames in base/res bzr revid: al@openerp.com-20110828001314-roc7o38bz22mr580 --- openerp/addons/base/__openerp__.py | 24 ++++++------- openerp/addons/base/res/__init__.py | 13 +++++-- openerp/addons/base/res/partner/__init__.py | 34 ------------------- .../base/res/partner/partner_report.xml | 9 ----- .../base/res/{partner => }/report/__init__.py | 0 .../{partner => }/report/business_card.xml | 0 .../{partner => }/report/business_card.xsl | 0 .../{partner => }/report/partner_address.xml | 0 .../{partner => }/report/partner_address.xsl | 0 .../base/res/{partner/bank.py => res_bank.py} | 0 .../bank_view.xml => res_bank_view.xml} | 0 .../base/res/{country.py => res_country.py} | 0 ...{country_view.xml => res_country_view.xml} | 0 .../{partner/partner.py => res_partner.py} | 0 .../partner_data.xml => res_partner_data.xml} | 0 .../partner_demo.xml => res_partner_demo.xml} | 0 .../{partner/crm.py => res_partner_event.py} | 0 ...rm_view.xml => res_partner_event_view.xml} | 0 .../addons/base/res/res_partner_report.xml | 9 +++++ ...data.xml => res_partner_shortcut_data.xml} | 0 .../partner_view.xml => res_partner_view.xml} | 0 .../base/res/{partner => }/wizard/__init__.py | 0 .../{partner => }/wizard/partner_clear_ids.py | 0 .../wizard/partner_clear_ids_view.xml | 0 .../{partner => }/wizard/partner_sms_send.py | 0 .../wizard/partner_sms_send_view.xml | 0 .../wizard/partner_wizard_ean_check.py | 0 .../wizard/partner_wizard_ean_check_view.xml | 0 .../wizard/partner_wizard_spam.py | 0 .../wizard/partner_wizard_spam_view.xml | 0 30 files changed, 31 insertions(+), 58 deletions(-) delete mode 100644 openerp/addons/base/res/partner/__init__.py delete mode 100644 openerp/addons/base/res/partner/partner_report.xml rename openerp/addons/base/res/{partner => }/report/__init__.py (100%) rename openerp/addons/base/res/{partner => }/report/business_card.xml (100%) rename openerp/addons/base/res/{partner => }/report/business_card.xsl (100%) rename openerp/addons/base/res/{partner => }/report/partner_address.xml (100%) rename openerp/addons/base/res/{partner => }/report/partner_address.xsl (100%) rename openerp/addons/base/res/{partner/bank.py => res_bank.py} (100%) rename openerp/addons/base/res/{partner/bank_view.xml => res_bank_view.xml} (100%) rename openerp/addons/base/res/{country.py => res_country.py} (100%) rename openerp/addons/base/res/{country_view.xml => res_country_view.xml} (100%) rename openerp/addons/base/res/{partner/partner.py => res_partner.py} (100%) rename openerp/addons/base/res/{partner/partner_data.xml => res_partner_data.xml} (100%) rename openerp/addons/base/res/{partner/partner_demo.xml => res_partner_demo.xml} (100%) rename openerp/addons/base/res/{partner/crm.py => res_partner_event.py} (100%) rename openerp/addons/base/res/{partner/crm_view.xml => res_partner_event_view.xml} (100%) create mode 100644 openerp/addons/base/res/res_partner_report.xml rename openerp/addons/base/res/{partner/partner_shortcut_data.xml => res_partner_shortcut_data.xml} (100%) rename openerp/addons/base/res/{partner/partner_view.xml => res_partner_view.xml} (100%) rename openerp/addons/base/res/{partner => }/wizard/__init__.py (100%) rename openerp/addons/base/res/{partner => }/wizard/partner_clear_ids.py (100%) rename openerp/addons/base/res/{partner => }/wizard/partner_clear_ids_view.xml (100%) rename openerp/addons/base/res/{partner => }/wizard/partner_sms_send.py (100%) rename openerp/addons/base/res/{partner => }/wizard/partner_sms_send_view.xml (100%) rename openerp/addons/base/res/{partner => }/wizard/partner_wizard_ean_check.py (100%) rename openerp/addons/base/res/{partner => }/wizard/partner_wizard_ean_check_view.xml (100%) rename openerp/addons/base/res/{partner => }/wizard/partner_wizard_spam.py (100%) rename openerp/addons/base/res/{partner => }/wizard/partner_wizard_spam_view.xml (100%) diff --git a/openerp/addons/base/__openerp__.py b/openerp/addons/base/__openerp__.py index d7c73930b5f..37f26edc177 100644 --- a/openerp/addons/base/__openerp__.py +++ b/openerp/addons/base/__openerp__.py @@ -59,18 +59,18 @@ 'res/res_request_view.xml', 'res/res_lang_view.xml', 'res/res_log_view.xml', - 'res/partner/partner_report.xml', - 'res/partner/partner_view.xml', - 'res/partner/partner_shortcut_data.xml', - 'res/partner/bank_view.xml', - 'res/country_view.xml', + 'res/res_partner_report.xml', + 'res/res_partner_view.xml', + 'res/res_partner_shortcut_data.xml', + 'res/res_bank_view.xml', + 'res/res_country_view.xml', 'res/res_currency_view.xml', - 'res/partner/crm_view.xml', - 'res/partner/wizard/partner_sms_send_view.xml', - 'res/partner/wizard/partner_wizard_spam_view.xml', - 'res/partner/wizard/partner_clear_ids_view.xml', - 'res/partner/wizard/partner_wizard_ean_check_view.xml', - 'res/partner/partner_data.xml', + 'res/res_partner_event_view.xml', + 'res/wizard/partner_sms_send_view.xml', + 'res/wizard/partner_wizard_spam_view.xml', + 'res/wizard/partner_clear_ids_view.xml', + 'res/wizard/partner_wizard_ean_check_view.xml', + 'res/res_partner_data.xml', 'res/ir_property_view.xml', 'security/base_security.xml', 'publisher_warranty/publisher_warranty_view.xml', @@ -81,7 +81,7 @@ ], 'demo_xml': [ 'base_demo.xml', - 'res/partner/partner_demo.xml', + 'res/res_partner_demo.xml', 'res/res_widget_demo.xml', ], 'test': [ diff --git a/openerp/addons/base/res/__init__.py b/openerp/addons/base/res/__init__.py index de00fc54153..9ce69f0c317 100644 --- a/openerp/addons/base/res/__init__.py +++ b/openerp/addons/base/res/__init__.py @@ -21,9 +21,11 @@ import tools -import country +import res_country import res_lang -import partner +import res_partner +import res_partner_event +import res_bank import res_config import res_currency import res_company @@ -31,6 +33,11 @@ import res_user import res_request import res_lang import res_log -import ir_property import res_widget +import ir_property + +import wizard +import report + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/addons/base/res/partner/__init__.py b/openerp/addons/base/res/partner/__init__.py deleted file mode 100644 index 3a9b989162f..00000000000 --- a/openerp/addons/base/res/partner/__init__.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2009 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -import tools - -from partner import * -from bank import * -from crm import * - -import wizard -import report - - - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/openerp/addons/base/res/partner/partner_report.xml b/openerp/addons/base/res/partner/partner_report.xml deleted file mode 100644 index 61e3876527f..00000000000 --- a/openerp/addons/base/res/partner/partner_report.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - diff --git a/openerp/addons/base/res/partner/report/__init__.py b/openerp/addons/base/res/report/__init__.py similarity index 100% rename from openerp/addons/base/res/partner/report/__init__.py rename to openerp/addons/base/res/report/__init__.py diff --git a/openerp/addons/base/res/partner/report/business_card.xml b/openerp/addons/base/res/report/business_card.xml similarity index 100% rename from openerp/addons/base/res/partner/report/business_card.xml rename to openerp/addons/base/res/report/business_card.xml diff --git a/openerp/addons/base/res/partner/report/business_card.xsl b/openerp/addons/base/res/report/business_card.xsl similarity index 100% rename from openerp/addons/base/res/partner/report/business_card.xsl rename to openerp/addons/base/res/report/business_card.xsl diff --git a/openerp/addons/base/res/partner/report/partner_address.xml b/openerp/addons/base/res/report/partner_address.xml similarity index 100% rename from openerp/addons/base/res/partner/report/partner_address.xml rename to openerp/addons/base/res/report/partner_address.xml diff --git a/openerp/addons/base/res/partner/report/partner_address.xsl b/openerp/addons/base/res/report/partner_address.xsl similarity index 100% rename from openerp/addons/base/res/partner/report/partner_address.xsl rename to openerp/addons/base/res/report/partner_address.xsl diff --git a/openerp/addons/base/res/partner/bank.py b/openerp/addons/base/res/res_bank.py similarity index 100% rename from openerp/addons/base/res/partner/bank.py rename to openerp/addons/base/res/res_bank.py diff --git a/openerp/addons/base/res/partner/bank_view.xml b/openerp/addons/base/res/res_bank_view.xml similarity index 100% rename from openerp/addons/base/res/partner/bank_view.xml rename to openerp/addons/base/res/res_bank_view.xml diff --git a/openerp/addons/base/res/country.py b/openerp/addons/base/res/res_country.py similarity index 100% rename from openerp/addons/base/res/country.py rename to openerp/addons/base/res/res_country.py diff --git a/openerp/addons/base/res/country_view.xml b/openerp/addons/base/res/res_country_view.xml similarity index 100% rename from openerp/addons/base/res/country_view.xml rename to openerp/addons/base/res/res_country_view.xml diff --git a/openerp/addons/base/res/partner/partner.py b/openerp/addons/base/res/res_partner.py similarity index 100% rename from openerp/addons/base/res/partner/partner.py rename to openerp/addons/base/res/res_partner.py diff --git a/openerp/addons/base/res/partner/partner_data.xml b/openerp/addons/base/res/res_partner_data.xml similarity index 100% rename from openerp/addons/base/res/partner/partner_data.xml rename to openerp/addons/base/res/res_partner_data.xml diff --git a/openerp/addons/base/res/partner/partner_demo.xml b/openerp/addons/base/res/res_partner_demo.xml similarity index 100% rename from openerp/addons/base/res/partner/partner_demo.xml rename to openerp/addons/base/res/res_partner_demo.xml diff --git a/openerp/addons/base/res/partner/crm.py b/openerp/addons/base/res/res_partner_event.py similarity index 100% rename from openerp/addons/base/res/partner/crm.py rename to openerp/addons/base/res/res_partner_event.py diff --git a/openerp/addons/base/res/partner/crm_view.xml b/openerp/addons/base/res/res_partner_event_view.xml similarity index 100% rename from openerp/addons/base/res/partner/crm_view.xml rename to openerp/addons/base/res/res_partner_event_view.xml diff --git a/openerp/addons/base/res/res_partner_report.xml b/openerp/addons/base/res/res_partner_report.xml new file mode 100644 index 00000000000..06ea859d007 --- /dev/null +++ b/openerp/addons/base/res/res_partner_report.xml @@ -0,0 +1,9 @@ + + + + + + + diff --git a/openerp/addons/base/res/partner/partner_shortcut_data.xml b/openerp/addons/base/res/res_partner_shortcut_data.xml similarity index 100% rename from openerp/addons/base/res/partner/partner_shortcut_data.xml rename to openerp/addons/base/res/res_partner_shortcut_data.xml diff --git a/openerp/addons/base/res/partner/partner_view.xml b/openerp/addons/base/res/res_partner_view.xml similarity index 100% rename from openerp/addons/base/res/partner/partner_view.xml rename to openerp/addons/base/res/res_partner_view.xml diff --git a/openerp/addons/base/res/partner/wizard/__init__.py b/openerp/addons/base/res/wizard/__init__.py similarity index 100% rename from openerp/addons/base/res/partner/wizard/__init__.py rename to openerp/addons/base/res/wizard/__init__.py diff --git a/openerp/addons/base/res/partner/wizard/partner_clear_ids.py b/openerp/addons/base/res/wizard/partner_clear_ids.py similarity index 100% rename from openerp/addons/base/res/partner/wizard/partner_clear_ids.py rename to openerp/addons/base/res/wizard/partner_clear_ids.py diff --git a/openerp/addons/base/res/partner/wizard/partner_clear_ids_view.xml b/openerp/addons/base/res/wizard/partner_clear_ids_view.xml similarity index 100% rename from openerp/addons/base/res/partner/wizard/partner_clear_ids_view.xml rename to openerp/addons/base/res/wizard/partner_clear_ids_view.xml diff --git a/openerp/addons/base/res/partner/wizard/partner_sms_send.py b/openerp/addons/base/res/wizard/partner_sms_send.py similarity index 100% rename from openerp/addons/base/res/partner/wizard/partner_sms_send.py rename to openerp/addons/base/res/wizard/partner_sms_send.py diff --git a/openerp/addons/base/res/partner/wizard/partner_sms_send_view.xml b/openerp/addons/base/res/wizard/partner_sms_send_view.xml similarity index 100% rename from openerp/addons/base/res/partner/wizard/partner_sms_send_view.xml rename to openerp/addons/base/res/wizard/partner_sms_send_view.xml diff --git a/openerp/addons/base/res/partner/wizard/partner_wizard_ean_check.py b/openerp/addons/base/res/wizard/partner_wizard_ean_check.py similarity index 100% rename from openerp/addons/base/res/partner/wizard/partner_wizard_ean_check.py rename to openerp/addons/base/res/wizard/partner_wizard_ean_check.py diff --git a/openerp/addons/base/res/partner/wizard/partner_wizard_ean_check_view.xml b/openerp/addons/base/res/wizard/partner_wizard_ean_check_view.xml similarity index 100% rename from openerp/addons/base/res/partner/wizard/partner_wizard_ean_check_view.xml rename to openerp/addons/base/res/wizard/partner_wizard_ean_check_view.xml diff --git a/openerp/addons/base/res/partner/wizard/partner_wizard_spam.py b/openerp/addons/base/res/wizard/partner_wizard_spam.py similarity index 100% rename from openerp/addons/base/res/partner/wizard/partner_wizard_spam.py rename to openerp/addons/base/res/wizard/partner_wizard_spam.py diff --git a/openerp/addons/base/res/partner/wizard/partner_wizard_spam_view.xml b/openerp/addons/base/res/wizard/partner_wizard_spam_view.xml similarity index 100% rename from openerp/addons/base/res/partner/wizard/partner_wizard_spam_view.xml rename to openerp/addons/base/res/wizard/partner_wizard_spam_view.xml From 863fdc0808da90278ed86ee18877aca37045e387 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 29 Aug 2011 10:29:29 +0200 Subject: [PATCH 05/13] [FIX] reinstate bail out in clean_action in case the action is not an act_window bzr revid: xmo@openerp.com-20110829082929-c6uhkcq0wmiis2wp --- addons/base/controllers/main.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index 56ce25476c5..562571f10de 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -432,10 +432,13 @@ def load_actions_from_ir_values(req, key, key2, models, meta): for id, name, action in actions] def clean_action(req, action): + action.setdefault('flags', {}) + if action['type'] != 'ir.actions.act_window': + return action + context = req.session.eval_context(req.context) eval_ctx = req.session.evaluation_context(context) - action.setdefault('flags', {}) - + # values come from the server, we can just eval them if isinstance(action.get('context'), basestring): action['context'] = eval( action['context'], eval_ctx ) or {} From 3d3783d7407d8700e90d0829932b733f817d5036 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Mon, 29 Aug 2011 14:13:30 +0200 Subject: [PATCH 06/13] [fix] fixed problem with o2m when we re-open a previously created row bzr revid: nicolas.vanhoren@openerp.com-20110829121330-ulj3hnyo3jfs9fq4 --- addons/base/static/src/js/form.js | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js index 212f48717bd..818a69bf093 100644 --- a/addons/base/static/src/js/form.js +++ b/addons/base/static/src/js/form.js @@ -1863,7 +1863,10 @@ openerp.base.form.One2ManyListView = openerp.base.ListView.extend({ pop.show_element(self.o2m.field.relation, id, self.o2m.build_context(),{ auto_write: false, alternative_form_view: self.o2m.field.views ? self.o2m.field.views["form"] : undefined, - parent_view: self.o2m.view + parent_view: self.o2m.view, + read_function: function() { + return self.o2m.dataset.read_ids.apply(self.o2m.dataset, arguments); + } }); pop.on_write.add(function(id, data) { self.o2m.dataset.write(id, data, function(r) { @@ -2135,6 +2138,7 @@ openerp.base.form.FormOpenPopup = openerp.base.OldWidget.extend({ * options: * - alternative_form_view * - auto_write (default true) + * - read_function * - parent_view */ show_element: function(model, row_id, context, options) { @@ -2150,7 +2154,8 @@ openerp.base.form.FormOpenPopup = openerp.base.OldWidget.extend({ }, start: function() { this._super(); - this.dataset = new openerp.base.ReadOnlyDataSetSearch(this, this.model, this.context); + this.dataset = new openerp.base.form.FormOpenDataset(this, this.model, this.context); + this.dataset.fop = this; this.dataset.ids = [this.row_id]; this.dataset.index = 0; this.dataset.parent_view = this.options.parent_view; @@ -2192,6 +2197,16 @@ openerp.base.form.FormOpenPopup = openerp.base.OldWidget.extend({ } }); +openerp.base.form.FormOpenDataset = openerp.base.ReadOnlyDataSetSearch.extend({ + read_ids: function() { + if (this.fop.options.read_function) { + return this.fop.options.read_function.apply(null, arguments); + } else { + this._super.apply(this, arguments); + } + } +}); + openerp.base.form.FieldReference = openerp.base.form.Field.extend({ init: function(view, node) { this._super(view, node); From 550387fd919a7b2e458a5cd8d1cd846ca26d2ae6 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Mon, 29 Aug 2011 14:28:37 +0200 Subject: [PATCH 07/13] [fix] small thing i forgot in the preceding fix bzr revid: nicolas.vanhoren@openerp.com-20110829122837-ahv6bhb6720jk0ld --- addons/base/static/src/js/form.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js index 818a69bf093..581ec4a2456 100644 --- a/addons/base/static/src/js/form.js +++ b/addons/base/static/src/js/form.js @@ -2202,7 +2202,7 @@ openerp.base.form.FormOpenDataset = openerp.base.ReadOnlyDataSetSearch.extend({ if (this.fop.options.read_function) { return this.fop.options.read_function.apply(null, arguments); } else { - this._super.apply(this, arguments); + return this._super.apply(this, arguments); } } }); From 61809cf537e4e173d9661afee1ebef1d5fcd65ec Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Mon, 29 Aug 2011 14:40:06 +0200 Subject: [PATCH 08/13] [fix] problem with context menu being displayed under the popups bzr revid: nicolas.vanhoren@openerp.com-20110829124006-ct7semd2cxddus0n --- .../lib/jquery.contextmenu/jquery.contextmenu.r2.packed.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/base/static/lib/jquery.contextmenu/jquery.contextmenu.r2.packed.js b/addons/base/static/lib/jquery.contextmenu/jquery.contextmenu.r2.packed.js index cb456eed14c..2356f3b606b 100644 --- a/addons/base/static/lib/jquery.contextmenu/jquery.contextmenu.r2.packed.js +++ b/addons/base/static/lib/jquery.contextmenu/jquery.contextmenu.r2.packed.js @@ -32,7 +32,7 @@ if(!menu) { menu=$('
').hide().css({ position:'absolute', - zIndex:'500' + zIndex:'2000' }).appendTo('body').bind('click', function(e) { e.stopPropagation() }) From 1ada45a439b830c806ba520e38e952a1a73a1e68 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Mon, 29 Aug 2011 15:25:03 +0200 Subject: [PATCH 09/13] [fix] problem with m2o that doesn't validate correctly if they were not modified by the user bzr revid: nicolas.vanhoren@openerp.com-20110829132503-p4tfevsfxyea3ytr --- addons/base/static/src/js/form.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js index 581ec4a2456..23e9617c3ba 100644 --- a/addons/base/static/src/js/form.js +++ b/addons/base/static/src/js/form.js @@ -1519,12 +1519,14 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({ }, set_value: function(value) { value = value || null; + this.invalid = false; var self = this; - var _super = this._super; this.tmp_value = value; + self.update_dom(); + self.on_value_changed(); var real_set_value = function(rval) { self.tmp_value = undefined; - _super.apply(self, rval); + self.value = rval; self.original_value = undefined; self._change_int_ext_value(rval); }; @@ -1550,7 +1552,8 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({ }, validate: function() { this.invalid = false; - if (this.value === null) { + var val = this.tmp_value !== undefined ? this.tmp_value : this.value; + if (val === null) { this.invalid = this.required; } }, From a24d5ee08d35401b42606849965728b4440c3cbd Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Mon, 29 Aug 2011 16:08:39 +0200 Subject: [PATCH 10/13] [IMP] Improved translate dialog bzr revid: fme@openerp.com-20110829140839-vr0mvylotmm9w5hg --- addons/base/static/src/css/base.css | 3 ++ addons/base/static/src/js/data.js | 5 +- addons/base/static/src/js/form.js | 10 ++-- addons/base/static/src/js/views.js | 54 +++++++++++++++---- addons/base/static/src/xml/base.xml | 4 +- .../base_calendar/static/src/js/calendar.js | 2 +- .../base_dashboard/static/src/js/dashboard.js | 2 +- addons/base_gantt/static/src/js/gantt.js | 2 +- 8 files changed, 61 insertions(+), 21 deletions(-) diff --git a/addons/base/static/src/css/base.css b/addons/base/static/src/css/base.css index 46364c4fa1d..b0a7dd3c8c8 100644 --- a/addons/base/static/src/css/base.css +++ b/addons/base/static/src/css/base.css @@ -895,6 +895,9 @@ label.error { position: relative; top: 4px; } +.openerp .oe_trad_field.touched { + border: 1px solid green !important; +} /* http://www.quirksmode.org/dom/inputfile.html * http://stackoverflow.com/questions/2855589/replace-input-type-file-by-an-image diff --git a/addons/base/static/src/js/data.js b/addons/base/static/src/js/data.js index 668898dd66c..e95adaf8870 100644 --- a/addons/base/static/src/js/data.js +++ b/addons/base/static/src/js/data.js @@ -355,12 +355,13 @@ openerp.base.DataSet = openerp.base.Widget.extend( /** @lends openerp.base.Data * @param {Function} error_callback function called in case of write error * @returns {$.Deferred} */ - write: function (id, data, callback, error_callback) { + write: function (id, data, options, callback, error_callback) { + var options = options || {}; return this.rpc('/base/dataset/save', { model: this.model, id: id, data: data, - context: this.get_context() + context: this.get_context(options.context) }, callback, error_callback); }, /** diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js index 23e9617c3ba..7970173780e 100644 --- a/addons/base/static/src/js/form.js +++ b/addons/base/static/src/js/form.js @@ -157,6 +157,7 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormVi this.do_update_pager(record.id == null); if (this.sidebar) { this.sidebar.attachments.do_update(); + this.sidebar.$element.find('.oe_sidebar_translate').toggleClass('oe_hide', !record.id); } if (this.default_focus_field && !this.embedded_view) { this.default_focus_field.focus(); @@ -342,7 +343,7 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormVi self.on_created(r, success, prepend_on_create); }); } else { - return this.dataset.write(this.datarecord.id, values, function(r) { + return this.dataset.write(this.datarecord.id, values, {}, function(r) { self.on_saved(r, success); }); } @@ -879,6 +880,9 @@ openerp.base.form.Field = openerp.base.form.Widget.extend({ }, update_dom: function() { this._super.apply(this, arguments); + if (this.field.translate) { + this.$element.find('.oe_field_translate').toggle(!!this.view.datarecord.id); + } if (!this.disable_utility_classes) { this.$element.toggleClass('disabled', this.readonly); this.$element.toggleClass('required', this.required); @@ -1872,7 +1876,7 @@ openerp.base.form.One2ManyListView = openerp.base.ListView.extend({ } }); pop.on_write.add(function(id, data) { - self.o2m.dataset.write(id, data, function(r) { + self.o2m.dataset.write(id, data, {}, function(r) { self.o2m.reload_current_view(); }); }); @@ -2171,7 +2175,7 @@ openerp.base.form.FormOpenPopup = openerp.base.OldWidget.extend({ var self = this; var wdataset = new openerp.base.DataSetSearch(this, this.model, this.context, this.domain); wdataset.parent_view = this.options.parent_view; - wdataset.write(id, data, function(r) { + wdataset.write(id, data, {}, function(r) { self.on_write_completed(); }); }, diff --git a/addons/base/static/src/js/views.js b/addons/base/static/src/js/views.js index 689a72ef7f1..0fd3df3998d 100644 --- a/addons/base/static/src/js/views.js +++ b/addons/base/static/src/js/views.js @@ -472,6 +472,9 @@ openerp.base.Sidebar = openerp.base.Widget.extend({ openerp.base.TranslateDialog = openerp.base.Dialog.extend({ dialog_title: _t("Translations"), init: function(view) { + // TODO fme: should add the language to fields_view_get because between the fields view get + // and the moment the user opens the translation dialog, the user language could have been changed + this.view_language = view.session.user_context.lang; this['on_button' + _t("Save")] = this.on_button_Save; this['on_button' + _t("Close")] = this.on_button_Close; this._super(view, { @@ -500,6 +503,9 @@ openerp.base.TranslateDialog = openerp.base.Dialog.extend({ self.select_tab('view'); } self.$fields_form = self.$element.find('.oe_translation_form'); + self.$fields_form.find('.oe_trad_field').change(function() { + $(this).toggleClass('touched', ($(this).val() != $(this).attr('data-value'))); + }); }); return this; }, @@ -514,19 +520,27 @@ openerp.base.TranslateDialog = openerp.base.Dialog.extend({ _.each(self.languages, function(lg) { var deff = $.Deferred(); deffered.push(deff); - self.rpc('/base/dataset/get', { - model: self.view.dataset.model, - ids: [self.view.datarecord.id], - fields: self.translatable_fields_keys, - context: self.view.dataset.get_context({ - 'lang': lg.code - }) - }, function(values) { + var callback = function(values) { _.each(self.translatable_fields_keys, function(f) { - self.$fields_form.find('.oe_trad_field[name="' + lg.code + '-' + f + '"]').val(values[0][f] || ''); + self.$fields_form.find('.oe_trad_field[name="' + lg.code + '-' + f + '"]').val(values[0][f] || '').attr('data-value', values[0][f] || ''); }); deff.resolve(); - }); + } + if (lg.code === self.view_language) { + var values = {}; + _.each(self.translatable_fields_keys, function(field) { + values[field] = self.view.fields[field].get_value(); + }); + callback([values]); + } else { + self.rpc('/base/dataset/get', { + model: self.view.dataset.model, + ids: [self.view.datarecord.id], + fields: self.translatable_fields_keys, + context: self.view.dataset.get_context({ + 'lang': lg.code + })}, callback); + } }); $.when.apply(null, deffered).then(callback); }, @@ -562,6 +576,24 @@ openerp.base.TranslateDialog = openerp.base.Dialog.extend({ }); }, on_button_Save: function() { + var trads = {}, + self = this; + self.$fields_form.find('.oe_trad_field.touched').each(function() { + var field = $(this).attr('name').split('-'); + if (!trads[field[0]]) { + trads[field[0]] = {}; + } + trads[field[0]][field[1]] = $(this).val(); + }); + _.each(trads, function(data, code) { + if (code === self.view_language) { + _.each(data, function(value, field) { + self.view.fields[field].set_value(value); + }); + } else { + self.view.dataset.write(self.view.datarecord.id, data, { 'lang': code }); + } + }); this.close(); }, on_button_Close: function() { @@ -667,7 +699,7 @@ openerp.base.View = openerp.base.Widget.extend({ }, { label: "Translate", callback: this.on_sidebar_translate, - classname: 'oe_sidebar_translate' + classname: 'oe_sidebar_translate oe_hide' }, { label: "View Log", callback: this.on_sidebar_view_log, diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml index 0c17e70cfc7..40bc7cb4c5a 100644 --- a/addons/base/static/src/xml/base.xml +++ b/addons/base/static/src/xml/base.xml @@ -474,8 +474,8 @@ - - + + diff --git a/addons/base_calendar/static/src/js/calendar.js b/addons/base_calendar/static/src/js/calendar.js index 7a0b561ccef..808c1ba31ab 100644 --- a/addons/base_calendar/static/src/js/calendar.js +++ b/addons/base_calendar/static/src/js/calendar.js @@ -251,7 +251,7 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ do_save_event: function(event_id, event_obj) { var self = this, data = this.get_event_data(event_obj); - this.dataset.write(parseInt(event_id, 10), data, function() { + this.dataset.write(parseInt(event_id, 10), data, {}, function() { self.refresh_minical(); }); }, diff --git a/addons/base_dashboard/static/src/js/dashboard.js b/addons/base_dashboard/static/src/js/dashboard.js index 3f9da51b157..f83d841d19a 100644 --- a/addons/base_dashboard/static/src/js/dashboard.js +++ b/addons/base_dashboard/static/src/js/dashboard.js @@ -327,7 +327,7 @@ openerp.base_dashboard.ConfigOverview = openerp.base.View.extend({ e.stopImmediatePropagation(); var new_state = this.checked ? 'done' : 'open', todo_id = parseInt($(this).val(), 10); - self.dataset.write(todo_id, {state: new_state}, function () { + self.dataset.write(todo_id, {state: new_state}, {}, function () { self.start(); }); }) diff --git a/addons/base_gantt/static/src/js/gantt.js b/addons/base_gantt/static/src/js/gantt.js index ed28785c90b..ad44382397b 100644 --- a/addons/base_gantt/static/src/js/gantt.js +++ b/addons/base_gantt/static/src/js/gantt.js @@ -459,7 +459,7 @@ init: function(parent, element_id, dataset, view_id) { }else{ data[this.date_delay] = task.getDuration(); } - this.dataset.write(event_id, data, function(result) {}); + this.dataset.write(event_id, data, {}, function(result) {}); }, From 4836945bc9aeafe855b20777f566b620c3d3078d Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Mon, 29 Aug 2011 17:24:38 +0200 Subject: [PATCH 11/13] [imp] default setup for reports + put active_id in all actions coming from the sidebar bzr revid: nicolas.vanhoren@openerp.com-20110829152438-47y13wwh01ssq9ts --- addons/base/controllers/main.py | 12 ++++++++++++ addons/base/static/src/js/views.js | 21 ++++++++++++++++----- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index 562571f10de..a198fbde0d1 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -1275,3 +1275,15 @@ class Export(View): return export_xls(field, result) else: return export_csv(field, result) + +class Export(View): + _cp_path = "/base/report" + + @openerpweb.jsonrequest + def get_report(self, req, action): + report_srv = req.session.proxy("report") + context = req.session.eval_context(openerpweb.nonliterals.CompoundContext(req.context, \ + action["context"])) + return False + #report_srv.report(req.session._db, req.session._uid, req.session._password) + diff --git a/addons/base/static/src/js/views.js b/addons/base/static/src/js/views.js index 0fd3df3998d..1fc04bf8965 100644 --- a/addons/base/static/src/js/views.js +++ b/addons/base/static/src/js/views.js @@ -123,6 +123,14 @@ openerp.base.ActionManager = openerp.base.Widget.extend({ this.content_stop(); var ClientWidget = openerp.base.client_actions.get_object(action.tag); (this.client_widget = new ClientWidget(this, action.params)).appendTo(this); + }, + ir_actions_report_xml: function(action) { + this.rpc('/base/report/get_report', { + action: action, + context: {} + }).then(function(result) { + debugger; + }); } }); @@ -438,14 +446,17 @@ openerp.base.Sidebar = openerp.base.Widget.extend({ //TODO niv: maybe show a warning? return false; } + var additional_context = { + active_id: ids[0], + active_ids: ids, + active_model: self.widget_parent.dataset.model + }; self.rpc("/base/action/load", { action_id: item.action.id, - context: { - active_id: ids[0], - active_ids: ids, - active_model: self.widget_parent.dataset.model - } + context: additional_context }, function(result) { + result.result.context = _.extend(result.result.context || {}, + additional_context); result.result.flags = result.result.flags || {}; result.result.flags.new_window = true; self.do_action(result.result); From 73d5d3eaf8d93078e1e5259f397cc9612843653c Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Mon, 29 Aug 2011 17:26:43 +0200 Subject: [PATCH 12/13] [imp] added active_id in related coming from m2o bzr revid: nicolas.vanhoren@openerp.com-20110829152643-2yy0p52fqxd6chre --- addons/base/static/src/js/form.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js index 7970173780e..e2a99e9b8c5 100644 --- a/addons/base/static/src/js/form.js +++ b/addons/base/static/src/js/form.js @@ -1565,14 +1565,16 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({ var self = this; if (!self.value) return; - self.rpc("/base/action/load", { - action_id: related[2].id, - context: { + var additional_context = { active_id: self.value[0], active_ids: [self.value[0]], active_model: self.field.relation - } + }; + self.rpc("/base/action/load", { + action_id: related[2].id, + context: additional_context }, function(result) { + result.result.context = _.extend(result.result.context || {}, additional_context); self.do_action(result.result); }); } From b479464a36840cd7f83220e182b36cac7f30372e Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Mon, 29 Aug 2011 17:52:56 +0200 Subject: [PATCH 13/13] [imp] made web server able to get a report, but still can't get it from the browser bzr revid: nicolas.vanhoren@openerp.com-20110829155256-myi3mr8wlp006u0i --- addons/base/controllers/main.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index a198fbde0d1..c9bd7ddfeab 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -9,6 +9,7 @@ import re import simplejson import textwrap import xmlrpclib +import time from xml.etree import ElementTree from cStringIO import StringIO @@ -20,6 +21,8 @@ import openerpweb.nonliterals from babel.messages.pofile import read_po +_REPORT_POLLER_DELAY = 0.05 + # Should move to openerpweb.Xml2Json class Xml2Json: # xml2json-direct @@ -1284,6 +1287,16 @@ class Export(View): report_srv = req.session.proxy("report") context = req.session.eval_context(openerpweb.nonliterals.CompoundContext(req.context, \ action["context"])) - return False - #report_srv.report(req.session._db, req.session._uid, req.session._password) + + args = [req.session._db, req.session._uid, req.session._password, action["report_name"], context["active_ids"], {"id": context["active_id"], "model": context["active_model"], "report_type": action["report_type"]}, context] + report_id = report_srv.report(*args) + report = None + while True: + args2 = [req.session._db, req.session._uid, req.session._password, report_id] + report = report_srv.report_get(*args2) + if report["state"]: + break + time.sleep(_REPORT_POLLER_DELAY) + #TODO: ok now we've got the report, and so what? + return False