diff --git a/openerp/addons/base/ir/ir_actions.py b/openerp/addons/base/ir/ir_actions.py index a130ab13a32..aaaa8513925 100644 --- a/openerp/addons/base/ir/ir_actions.py +++ b/openerp/addons/base/ir/ir_actions.py @@ -657,7 +657,7 @@ class actions_server(osv.osv): if action.state=='client_action': if not action.action_id: - raise osv.except_osv(_('Error'), _("Please specify an action to launch !")) + raise osv.except_osv(_('Error'), _("Please specify an action to launch!")) return self.pool[action.action_id.type].read(cr, uid, action.action_id.id, context=context) if action.state=='code': diff --git a/openerp/addons/base/ir/ir_actions.xml b/openerp/addons/base/ir/ir_actions.xml index 82514692c06..145627058ef 100644 --- a/openerp/addons/base/ir/ir_actions.xml +++ b/openerp/addons/base/ir/ir_actions.xml @@ -297,7 +297,7 @@ Property multi-company - + ['|',('company_id','child_of',[user.company_id.id]),('company_id','=',False)] diff --git a/openerp/addons/base/ir/ir_filters.xml b/openerp/addons/base/ir/ir_filters.xml index 72c5dad8885..88cc4b9838a 100644 --- a/openerp/addons/base/ir/ir_filters.xml +++ b/openerp/addons/base/ir/ir_filters.xml @@ -4,7 +4,7 @@ ir.filters.owner - + [('user_id','in',[False,user.id])] diff --git a/openerp/addons/base/ir/ir_mail_server.py b/openerp/addons/base/ir/ir_mail_server.py index 0ca587f42ab..0805a5f8891 100644 --- a/openerp/addons/base/ir/ir_mail_server.py +++ b/openerp/addons/base/ir/ir_mail_server.py @@ -213,14 +213,14 @@ class ir_mail_server(osv.osv): password=smtp_server.smtp_pass, encryption=smtp_server.smtp_encryption, smtp_debug=smtp_server.smtp_debug) except Exception, e: - raise osv.except_osv(_("Connection test failed!"), _("Here is what we got instead:\n %s") % tools.ustr(e)) + raise osv.except_osv(_("Connection Test Failed!"), _("Here is what we got instead:\n %s") % tools.ustr(e)) finally: try: if smtp: smtp.quit() except Exception: # ignored, just a consequence of the previous exception pass - raise osv.except_osv(_("Connection test succeeded!"), _("Everything seems properly set up!")) + raise osv.except_osv(_("Connection Test Succeeded!"), _("Everything seems properly set up!")) def connect(self, host, port, user=None, password=None, encryption=False, smtp_debug=False): """Returns a new SMTP connection to the give SMTP server, authenticated diff --git a/openerp/addons/base/ir/ir_model.py b/openerp/addons/base/ir/ir_model.py index 222d8f34c9c..165fd8a4be9 100644 --- a/openerp/addons/base/ir/ir_model.py +++ b/openerp/addons/base/ir/ir_model.py @@ -82,7 +82,7 @@ class ir_model(osv.osv): return [] __, operator, value = domain[0] if operator not in ['=', '!=']: - raise osv.except_osv(_('Invalid search criterions'), _('The osv_memory field can only be compared with = and != operator.')) + raise osv.except_osv(_("Invalid Search Criteria"), _('The osv_memory field can only be compared with = and != operator.')) value = bool(value) if operator == '=' else not bool(value) all_model_ids = self.search(cr, uid, [], context=context) is_osv_mem = self._is_osv_memory(cr, uid, all_model_ids, 'osv_memory', arg=None, context=context) diff --git a/openerp/addons/base/ir/ir_values.py b/openerp/addons/base/ir/ir_values.py index dd8501230ec..a21b034d1b0 100644 --- a/openerp/addons/base/ir/ir_values.py +++ b/openerp/addons/base/ir/ir_values.py @@ -411,8 +411,8 @@ class ir_values(osv.osv): (tuple(groups), uid)) if not cr.fetchone(): if action['name'] == 'Menuitem': - raise osv.except_osv('Error !', - 'You do not have the permission to perform this operation !!!') + raise osv.except_osv('Error!', + 'You do not have the permission to perform this operation!!!') continue # keep only the first action registered for each action name results[action['name']] = (action['id'], action['name'], action_def) diff --git a/openerp/addons/base/ir/workflow/workflow.py b/openerp/addons/base/ir/workflow/workflow.py index 0ce951940a9..a7e792072e3 100644 --- a/openerp/addons/base/ir/workflow/workflow.py +++ b/openerp/addons/base/ir/workflow/workflow.py @@ -94,7 +94,7 @@ class wkf_activity(osv.osv): def unlink(self, cr, uid, ids, context=None): if context is None: context = {} if not context.get('_force_unlink') and self.pool.get('workflow.workitem').search(cr, uid, [('act_id', 'in', ids)]): - raise osv.except_osv(_('Operation forbidden'), + raise osv.except_osv(_('Operation Forbidden'), _('Please make sure no workitems refer to an activity before deleting it!')) super(wkf_activity, self).unlink(cr, uid, ids, context=context) diff --git a/openerp/addons/base/module/module_data.xml b/openerp/addons/base/module/module_data.xml index 247c2caa145..f59de0af973 100644 --- a/openerp/addons/base/module/module_data.xml +++ b/openerp/addons/base/module/module_data.xml @@ -84,6 +84,12 @@ 11 + + Survey + Lets you create, send, share and answer to surveys. + 11 + + Marketing Helps you manage your marketing campaigns step by step. @@ -132,11 +138,11 @@ - + - + diff --git a/openerp/addons/base/module/wizard/base_module_import.py b/openerp/addons/base/module/wizard/base_module_import.py index 67408b60669..61694d5f8c3 100644 --- a/openerp/addons/base/module/wizard/base_module_import.py +++ b/openerp/addons/base/module/wizard/base_module_import.py @@ -55,7 +55,7 @@ class base_module_import(osv.osv_memory): try: file_data = zipfile.ZipFile(fp, 'r') except zipfile.BadZipfile: - raise osv.except_osv(_('Error !'), _('File is not a zip file!')) + raise osv.except_osv(_('Error!'), _('File is not a zip file!')) init_file_name = sorted(file_data.namelist())[0] module_name = os.path.split(init_file_name)[0] @@ -63,8 +63,8 @@ class base_module_import(osv.osv_memory): try: zip_file = open(file_path, 'wb') except IOError: - raise osv.except_osv(_('Error !'), - _('Can not create the module file: %s !') % \ + raise osv.except_osv(_('Error!'), + _('Can not create the module file: %s!') % \ (file_path,) ) zip_file.write(zip_data) zip_file.close() diff --git a/openerp/addons/base/module/wizard/base_module_upgrade.py b/openerp/addons/base/module/wizard/base_module_upgrade.py index c081663d8ed..c75058ab835 100644 --- a/openerp/addons/base/module/wizard/base_module_upgrade.py +++ b/openerp/addons/base/module/wizard/base_module_upgrade.py @@ -81,7 +81,7 @@ class base_module_upgrade(osv.osv_memory): (tuple(ids), ('uninstalled',))) unmet_packages = [x[0] for x in cr.fetchall()] if unmet_packages: - raise osv.except_osv(_('Unmet dependency !'), + raise osv.except_osv(_('Unmet Dependency!'), _('Following modules are not installed or unknown: %s') % ('\n\n' + '\n'.join(unmet_packages))) ir_module.download(cr, uid, ids, context=context) diff --git a/openerp/addons/base/res/res_lang.py b/openerp/addons/base/res/res_lang.py index 9abab79e46c..160e86fd8d2 100644 --- a/openerp/addons/base/res/res_lang.py +++ b/openerp/addons/base/res/res_lang.py @@ -182,11 +182,11 @@ class lang(osv.osv): for language in languages: ctx_lang = context.get('lang') if language['code']=='en_US': - raise osv.except_osv(_('User Error'), _("Base Language 'en_US' can not be deleted !")) + raise osv.except_osv(_('User Error'), _("Base Language 'en_US' can not be deleted!")) if ctx_lang and (language['code']==ctx_lang): - raise osv.except_osv(_('User Error'), _("You cannot delete the language which is User's Preferred Language !")) + raise osv.except_osv(_('User Error'), _("You cannot delete the language which is User's Preferred Language!")) if language['active']: - raise osv.except_osv(_('User Error'), _("You cannot delete the language which is Active !\nPlease de-activate the language first.")) + raise osv.except_osv(_('User Error'), _("You cannot delete the language which is Active!\nPlease de-activate the language first.")) trans_obj = self.pool.get('ir.translation') trans_ids = trans_obj.search(cr, uid, [('lang','=',language['code'])], context=context) trans_obj.unlink(cr, uid, trans_ids, context=context) diff --git a/openerp/addons/base/res/res_partner.py b/openerp/addons/base/res/res_partner.py index d140fe62ccc..01108939195 100644 --- a/openerp/addons/base/res/res_partner.py +++ b/openerp/addons/base/res/res_partner.py @@ -120,7 +120,7 @@ class res_partner_category(osv.osv): res = self.name_get(cr, uid, ids, context=context) return dict(res) - _description = 'Partner Categories' + _description = 'Partner Tags' _name = 'res.partner.category' _columns = { 'name': fields.char('Category Name', required=True, size=64, translate=True), @@ -259,8 +259,8 @@ class res_partner(osv.osv, format_address): 'street2': fields.char('Street2', size=128), 'zip': fields.char('Zip', change_default=True, size=24), 'city': fields.char('City', size=128), - 'state_id': fields.many2one("res.country.state", 'State'), - 'country_id': fields.many2one('res.country', 'Country'), + 'state_id': fields.many2one("res.country.state", 'State', ondelete='restrict'), + 'country_id': fields.many2one('res.country', 'Country', ondelete='restrict'), 'country': fields.related('country_id', type='many2one', relation='res.country', string='Country', deprecated="This field will be removed as of OpenERP 7.1, use country_id instead"), 'email': fields.char('Email', size=240), @@ -575,7 +575,7 @@ class res_partner(osv.osv, format_address): context = {} name, email = self._parse_partner_name(name, context=context) if context.get('force_email') and not email: - raise osv.except_osv(_('Warning'), _("Couldn't create contact without email address !")) + raise osv.except_osv(_('Warning'), _("Couldn't create contact without email address!")) if not name and email: name = email rec_id = self.create(cr, uid, {self._rec_name: name or email, 'email': email or False}, context=context) diff --git a/openerp/addons/base/res/res_partner_view.xml b/openerp/addons/base/res/res_partner_view.xml index 9755d78a7ca..ccf74206967 100644 --- a/openerp/addons/base/res/res_partner_view.xml +++ b/openerp/addons/base/res/res_partner_view.xml @@ -139,7 +139,7 @@ @@ -188,7 +188,7 @@ - + @@ -288,6 +288,7 @@ + @@ -512,10 +513,10 @@ - Partner Categories + Partner Tags res.partner.category -
+ @@ -525,11 +526,11 @@ - Partner Categories + Partner Tags res.partner.category - + @@ -539,7 +540,7 @@ res.partner.category child_ids - + @@ -558,7 +559,7 @@ --> - Partner Categories + Partner Tags res.partner form tree,form @@ -575,11 +576,11 @@ - Partner Categories + Partner Tags ir.actions.act_window res.partner.category form - 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. + Manage the partner tags to better classify them for tracking and analysis purposes. A partner may have several tags and tags have a hierarchical structure: a partner with a tag has also the parent tags. diff --git a/openerp/addons/base/res/res_security.xml b/openerp/addons/base/res/res_security.xml index 783243411ef..0c8c0202d60 100644 --- a/openerp/addons/base/res/res_security.xml +++ b/openerp/addons/base/res/res_security.xml @@ -16,7 +16,7 @@ company rule - + [('id','child_of',[user.company_id.id])] @@ -25,7 +25,7 @@ user rule - + [('company_ids','child_of',[user.company_id.id])] diff --git a/openerp/addons/base/res/res_users_view.xml b/openerp/addons/base/res/res_users_view.xml index 81be40bd3ad..20106fa48f7 100644 --- a/openerp/addons/base/res/res_users_view.xml +++ b/openerp/addons/base/res/res_users_view.xml @@ -187,7 +187,7 @@ - + @@ -255,7 +255,7 @@
-
diff --git a/openerp/import_xml.rng b/openerp/import_xml.rng index 5f4c40b65d3..716a525b496 100644 --- a/openerp/import_xml.rng +++ b/openerp/import_xml.rng @@ -1,17 +1,18 @@ - + - - - - - + - - - - - + + + + + + + + + @@ -125,19 +126,66 @@ - - - - - - - - - - + + + + + char + file + + - - + + + int + + + None + + + + float + + + + + + list + tuple + + + + + + + + html + xml + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index 31b3bf5c807..d0a8e8e3a7e 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -282,6 +282,9 @@ class browse_null(object): def __unicode__(self): return u'' + def __iter__(self): + raise NotImplementedError("Iteration is not allowed on %s" % self) + # # TODO: execute an object method on browse_record_list @@ -2971,7 +2974,7 @@ class BaseModel(object): update_custom_fields = context.get('update_custom_fields', False) self._field_create(cr, context=context) create = not self._table_exist(cr) - if getattr(self, '_auto', True): + if self._auto: if create: self._create_table(cr) @@ -3205,7 +3208,8 @@ class BaseModel(object): cr.commit() # start a new transaction - self._add_sql_constraints(cr) + if self._auto: + self._add_sql_constraints(cr) if create: self._execute_sql(cr) diff --git a/openerp/service/db.py b/openerp/service/db.py index a480b65440a..4901ceef4d6 100644 --- a/openerp/service/db.py +++ b/openerp/service/db.py @@ -197,7 +197,7 @@ def exp_drop(db_name): return True @contextlib.contextmanager -def _set_pg_password_in_environment(self): +def _set_pg_password_in_environment(): """ On systems where pg_restore/pg_dump require an explicit password (i.e. when not connecting via unix sockets, and most importantly on Windows), it is necessary to pass the PG user @@ -213,10 +213,10 @@ def _set_pg_password_in_environment(self): SaaS (giving SaaS users the super-admin password is not a good idea anyway) """ - if os.environ.get('PGPASSWORD') or not tools.config['db_password']: + if os.environ.get('PGPASSWORD') or not openerp.tools.config['db_password']: yield else: - os.environ['PGPASSWORD'] = tools.config['db_password'] + os.environ['PGPASSWORD'] = openerp.tools.config['db_password'] try: yield finally: diff --git a/openerp/tools/convert.py b/openerp/tools/convert.py index 1feea2f08d3..616abb23fa7 100644 --- a/openerp/tools/convert.py +++ b/openerp/tools/convert.py @@ -48,6 +48,7 @@ except: from datetime import datetime, timedelta +from dateutil.relativedelta import relativedelta from lxml import etree import misc from config import config @@ -86,7 +87,9 @@ def _get_idref(self, cr, uid, model_str, context, idref): idref2 = dict(idref, time=time, DateTime=datetime, + datetime=datetime, timedelta=timedelta, + relativedelta=relativedelta, version=openerp.release.major_version, ref=_ref(self, cr), pytz=pytz)