Remove ir.default
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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 *
|
||||
|
||||
@@ -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': [
|
||||
|
||||
@@ -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()
|
||||
@@ -1,61 +0,0 @@
|
||||
<?xml version="1.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. -->
|
||||
<tryton>
|
||||
<data>
|
||||
<record model="ir.ui.view" id="default_view_form">
|
||||
<field name="model">ir.default</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<![CDATA[
|
||||
<form string="Default" col="6">
|
||||
<label name="model"/>
|
||||
<field name="model"/>
|
||||
<label name="field"/>
|
||||
<field name="field"/>
|
||||
<label name="user"/>
|
||||
<field name="user"/>
|
||||
<group col="2" colspan="6" expand="1" id="value_clause">
|
||||
<separator name="value"/>
|
||||
<separator name="clause"/>
|
||||
<field name="value"/>
|
||||
<field name="clause"/>
|
||||
</group>
|
||||
</form>
|
||||
]]>
|
||||
</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="default_view_tree">
|
||||
<field name="model">ir.default</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<![CDATA[
|
||||
<tree string="Defaults">
|
||||
<field name="model" select="1"/>
|
||||
<field name="field" select="1"/>
|
||||
<field name="user" select="1"/>
|
||||
</tree>
|
||||
]]>
|
||||
</field>
|
||||
</record>
|
||||
<record model="ir.action.act_window" id="act_default_form">
|
||||
<field name="name">Defaults</field>
|
||||
<field name="res_model">ir.default</field>
|
||||
<field name="view_type">form</field>
|
||||
</record>
|
||||
<record model="ir.action.act_window.view"
|
||||
id="act_default_form_view1">
|
||||
<field name="sequence" eval="1"/>
|
||||
<field name="view" ref="default_view_tree"/>
|
||||
<field name="act_window" ref="act_default_form"/>
|
||||
</record>
|
||||
<record model="ir.action.act_window.view"
|
||||
id="act_default_form_view2">
|
||||
<field name="sequence" eval="2"/>
|
||||
<field name="view" ref="default_view_form"/>
|
||||
<field name="act_window" ref="act_default_form"/>
|
||||
</record>
|
||||
<menuitem parent="ir.menu_models"
|
||||
action="act_default_form" id="menu_default_form"/>
|
||||
</data>
|
||||
</tryton>
|
||||
@@ -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():
|
||||
|
||||
@@ -558,9 +558,6 @@ this repository contains the full copyright notices and license terms. -->
|
||||
<record model="ir.ui.menu" id="ir.menu_module_install_upgrade">
|
||||
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
|
||||
</record>
|
||||
<record model="ir.ui.menu" id="ir.menu_default_form">
|
||||
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
|
||||
</record>
|
||||
<record model="ir.ui.menu" id="ir.menu_trigger_form">
|
||||
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
|
||||
</record>
|
||||
|
||||
Reference in New Issue
Block a user