diff --git a/CHANGELOG b/CHANGELOG
index 77db37a660..d7ac057beb 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,4 @@
+* Remove ir.default
* Add type, last user and last modification on ir.attachment
* Rename datas into data on ir.attachment
* Add new configuration option to prevent database listing
diff --git a/trytond/ir/__init__.py b/trytond/ir/__init__.py
index ee6e216edd..efd3b51f9c 100644
--- a/trytond/ir/__init__.py
+++ b/trytond/ir/__init__.py
@@ -12,7 +12,6 @@ from translation import *
from export import *
from rule import *
import module
-from default import *
from cache import *
from date import *
from trigger import *
diff --git a/trytond/ir/__tryton__.py b/trytond/ir/__tryton__.py
index 48413ba1ae..cb6c5b1d1c 100644
--- a/trytond/ir/__tryton__.py
+++ b/trytond/ir/__tryton__.py
@@ -45,7 +45,6 @@ Fournit les concepts et l'administration des modèles, actions, séquences, loca
'rule.xml',
'property.xml',
'module/module.xml',
- 'default.xml',
'trigger.xml',
],
'translation': [
diff --git a/trytond/ir/default.py b/trytond/ir/default.py
deleted file mode 100644
index 1a0fe0ec3a..0000000000
--- a/trytond/ir/default.py
+++ /dev/null
@@ -1,147 +0,0 @@
-#This file is part of Tryton. The COPYRIGHT file at the top level of
-#this repository contains the full copyright notices and license terms.
-from decimal import Decimal
-import datetime
-import time
-from trytond.model import ModelView, ModelSQL, fields
-from trytond.tools import safe_eval
-from trytond.pyson import Eval
-from trytond.transaction import Transaction
-from trytond.cache import Cache
-
-
-class Default(ModelSQL, ModelView):
- "Default"
- _name = 'ir.default'
- _description = __doc__
- _rec_name = 'value'
- model = fields.Many2One('ir.model', 'Model', required=True,
- ondelete='CASCADE')
- field = fields.Many2One('ir.model.field', 'Field', required=True,
- ondelete='CASCADE', domain=[('model', '=', Eval('model'))])
- value = fields.Text('Value')
- clause = fields.Text('Clause')
- user = fields.Many2One('res.user', 'User', ondelete='CASCADE')
-
- def __init__(self):
- super(Default, self).__init__()
- self._rpc.update({
- 'get_default': False,
- 'set_default': True,
- 'reset_default': True,
- })
-
- @Cache('ir_default.get_default')
- def get_default(self, model, clause):
- res = {}
- test_user = Transaction().user
- test_clause = clause
- default_ids = []
- while True:
- default_ids += self.search([
- ('model.model', '=', model),
- ('clause', '=', test_clause),
- ('user', '=', test_user),
- ])
- if test_user:
- test_user = False
- continue
- if test_clause:
- test_clause = False
- continue
- break
- for default in self.browse(default_ids):
- if default.field.name not in res:
- if default.field.ttype in ('reference', 'char', 'sha', 'text',
- 'time', 'selection'):
- res[default.field.name] = default.value
- elif default.field.ttype in ('integer', 'biginteger'):
- res[default.field.name] = int(default.value)
- elif default.field.ttype == 'float':
- res[default.field.name] = float(default.value)
- elif default.field.ttype == 'numeric':
- res[default.field.name] = Decimal(default.value)
- elif default.field.ttype == 'date':
- res[default.field.name] = datetime.date(*time.strptime(
- default.value, '%Y-%m-%d')[:3])
- elif default.field.ttype == 'datetime':
- res[default.field.name] = datetime.datetime(*time.strptime(
- default.value, '%Y-%m-%d %H:%M:%S')[:6])
- else:
- res[default.field.name] = safe_eval(default.value)
- return res
-
- def set_default(self, model, field, clause, value, user_default):
- ir_model_obj = self.pool.get('ir.model')
- ir_field_obj = self.pool.get('ir.model.field')
-
- model_obj = self.pool.get(model)
- if field not in model_obj._columns:
- model = self.pool.get(model_obj._inherit_fields[field][0])._name
-
- model_id = ir_model_obj.search([
- ('model', '=', model),
- ])[0]
- field_id = ir_field_obj.search([
- ('name', '=', field),
- ('model', '=', model_id),
- ])[0]
- default_ids = self.search([
- ('model', '=', model_id),
- ('field', '=', field_id),
- ('clause', '=', clause),
- ('user', '=', user_default),
- ])
- if default_ids:
- self.delete(default_ids)
- self.create({
- 'model': model_id,
- 'field': field_id,
- 'value': str(value),
- 'clause': clause,
- 'user': user_default,
- })
-
- def reset_default(self, model, field, clause, value, user_default):
- ir_model_obj = self.pool.get('ir.model')
- ir_field_obj = self.pool.get('ir.model.field')
-
- model_obj = self.pool.get(model)
- if field not in model_obj._columns:
- model = self.pool.get(model_obj._inherit_fields[field][0])._name
-
- model_id = ir_model_obj.search([
- ('model', '=', model),
- ])[0]
- field_id = ir_field_obj.search([
- ('name', '=', field),
- ('model', '=', model_id),
- ])[0]
- default_ids = self.search([
- ('model', '=', model_id),
- ('field', '=', field_id),
- ('clause', '=', clause),
- ('user', '=', user_default),
- ])
- if default_ids:
- self.delete(default_ids)
-
- def create(self, vals):
- res = super(Default, self).create(vals)
- # Restart the cache for get_default method
- self.get_default.reset()
- return res
-
- def write(self, ids, vals):
- res = super(Default, self).write(ids, vals)
- # Restart the cache for get_default method
- self.get_default.reset()
- return res
-
- def delete(self, ids):
- res = super(Default, self).delete(ids)
- # Restart the cache for get_default method
- self.get_default.reset()
- return res
-
-Default()
diff --git a/trytond/ir/default.xml b/trytond/ir/default.xml
deleted file mode 100644
index b4f7abcada..0000000000
--- a/trytond/ir/default.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-
-
-
-
-
- ir.default
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ]]>
-
-
-
- ir.default
- tree
-
-
-
-
-
-
- ]]>
-
-
-
- Defaults
- ir.default
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/trytond/model/model.py b/trytond/model/model.py
index d63a8eee2a..2d6b7c3dc0 100644
--- a/trytond/model/model.py
+++ b/trytond/model/model.py
@@ -384,7 +384,6 @@ class Model(WarningErrorMixin):
and default value as value
'''
property_obj = self.pool.get('ir.property')
- ir_default_obj = self.pool.get('ir.default')
value = {}
# get the default values defined in the object
@@ -408,70 +407,6 @@ class Model(WarningErrorMixin):
value[field_name + '.rec_name'] = obj.browse(
value[field_name]).rec_name
- # get the default values set by the user and override the default
- # values defined in the object
- for name in (self._inherits.keys() + [self._name]):
- defaults = ir_default_obj.get_default(name, False)
- for field_name, field_value in defaults.items():
- if field_name in fields_names:
- if field_name in self._columns:
- field = self._columns[field_name]
- else:
- field = self._inherit_fields[field_name][2]
- if field._type in ('many2one', 'one2one'):
- if not isinstance(field_value, (int, long)):
- continue
- obj = self.pool.get(field.model_name)
- if not hasattr(obj, 'search') \
- or not obj.search([
- ('id', '=', field_value),
- ]):
- continue
- if with_rec_name and 'rec_name' in obj._columns:
- value[field_name + '.rec_name'] = obj.browse(
- field_value).rec_name
- if field._type in ('many2many'):
- if not isinstance(field_value, list):
- continue
- obj = field.get_target(self.pool)
- field_value2 = []
- for i in range(len(field_value)):
- if not hasattr(obj, 'search') \
- or not obj.search([
- ('id', '=', field_value[i]),
- ]):
- continue
- field_value2.append(field_value[i])
- field_value = field_value2
- if field._type in ('one2many'):
- if not isinstance(field_value, list):
- continue
- obj = self.pool.get(field.model_name)
- field_value2 = []
- for i in range(len(field_value or [])):
- field_value2.append({})
- for field2 in field_value[i].keys():
- if (field2 in obj._columns
- and obj._columns[field2]._type
- in ('many2one',)):
- obj2 = self.pool.get(
- obj._columns[field2].model_name)
- if not hasattr(obj2, 'search'):
- continue
- if not obj2.search([
- ('id', '=', field_value[i][field2]),
- ]):
- continue
- if (with_rec_name
- and 'rec_name' in obj2._columns):
- field_value[i][field2 + '.rec_name'] = (
- obj2.browse(
- field_value[i][field2],
- ).rec_name)
- # TODO add test for many2many and one2many
- field_value2[i][field2] = field_value[i][field2]
- field_value = field_value2
- value[field_name] = field_value
value = self._default_on_change(value)
if not with_rec_name:
for field in value.keys():
diff --git a/trytond/res/ir.xml b/trytond/res/ir.xml
index 59bfc54b9d..6db4d4c05c 100644
--- a/trytond/res/ir.xml
+++ b/trytond/res/ir.xml
@@ -558,9 +558,6 @@ this repository contains the full copyright notices and license terms. -->
-