Add ir.default and fix where_calc for null value
This commit is contained in:
1 parent
d0801dc281
commit
e61dd52d26
5 files changed
+133
-5
No files matched your search
@@ -10,3 +10,4 @@ from exports import *
|
||||
from rule import *
|
||||
from property import *
|
||||
import module
|
||||
from default import *
|
||||
@@ -19,5 +19,6 @@
|
||||
'module/module.xml',
|
||||
'module/repository.xml',
|
||||
'module/category.xml',
|
||||
'default.xml',
|
||||
],
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
"Default"
|
||||
from trytond.osv import fields, OSV
|
||||
|
||||
|
||||
class Default(OSV):
|
||||
"Default"
|
||||
_name = 'ir.default'
|
||||
_description = __doc__
|
||||
_rec_name = 'value'
|
||||
_columns = {
|
||||
'model': fields.Many2One('ir.model', 'Model', required=True,
|
||||
ondelete='cascade'),
|
||||
'field': fields.Many2One('ir.model.fields', 'Field', required=True,
|
||||
ondelete='cascade'),
|
||||
'value': fields.Text('Value'),
|
||||
'clause': fields.Text('Clause'),
|
||||
'user': fields.Many2One('res.user', 'User', ondelete='cascade'),
|
||||
}
|
||||
|
||||
def get_default(self, cursor, user, model, clause, context=None):
|
||||
res = {}
|
||||
test_user = user
|
||||
test_clause = clause
|
||||
default_ids = []
|
||||
while True:
|
||||
default_ids += self.search(cursor, user, [
|
||||
('model.model', '=', model),
|
||||
('clause', '=', test_clause),
|
||||
('user', '=', test_user),
|
||||
], context=context)
|
||||
if test_user:
|
||||
test_user = False
|
||||
continue
|
||||
if test_clause:
|
||||
test_clause = False
|
||||
continue
|
||||
break
|
||||
for default in self.browse(cursor, user, default_ids, context=context):
|
||||
if default.field.name not in res:
|
||||
res[default.field.name] = default.value
|
||||
return res
|
||||
|
||||
def set_default(self, cursor, user, model, field, clause, value,
|
||||
user_default, context=None):
|
||||
model_obj = self.pool.get('ir.model')
|
||||
field_obj = self.pool.get('ir.model.fields')
|
||||
model_id = model_obj.search(cursor, user, [
|
||||
('model', '=', model),
|
||||
], context=context)[0]
|
||||
field_id = field_obj.search(cursor, user, [
|
||||
('name', '=', field),
|
||||
], context=context)[0]
|
||||
default_ids = self.search(cursor, user, [
|
||||
('model', '=', model_id),
|
||||
('field', '=', field_id),
|
||||
('clause', '=', clause),
|
||||
('user', '=', user_default),
|
||||
], context=context)
|
||||
if default_ids:
|
||||
self.unlink(cursor, user, default_ids, context=context)
|
||||
self.create(cursor, user, {
|
||||
'model': model_id,
|
||||
'field': field_id,
|
||||
'value': str(value),
|
||||
'clause': clause,
|
||||
'user': user_default,
|
||||
}, context=context)
|
||||
|
||||
Default()
|
||||
@@ -0,0 +1,52 @@
|
||||
<?xml version="1.0"?>
|
||||
<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">
|
||||
<field name="model" select="1"/>
|
||||
<field name="field" select="1"/>
|
||||
<field name="user" select="1"/>
|
||||
<field name="value" colspan="4"/>
|
||||
<field name="clause" colspan="4"/>
|
||||
</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"/>
|
||||
<field name="field"/>
|
||||
<field name="user"/>
|
||||
</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_id" ref="default_view_tree"/>
|
||||
<field name="act_window_id" 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_id" ref="default_view_form"/>
|
||||
<field name="act_window_id" ref="act_default_form"/>
|
||||
</record>
|
||||
<menuitem parent_id="ir.menu_ir"
|
||||
action="act_default_form" id="menu_default_form"/>
|
||||
</data>
|
||||
</tryton>
|
||||
+10
-5
@@ -1124,9 +1124,12 @@ class ORM(object):
|
||||
|
||||
# get the default values set by the user and override the default
|
||||
# values defined in the object
|
||||
ir_values_obj = self.pool.get('ir.values')
|
||||
res = ir_values_obj.get(cursor, user, 'default', False, [self._name])
|
||||
for value_id, field, field_value in res:
|
||||
#ir_values_obj = self.pool.get('ir.values')
|
||||
#res = ir_values_obj.get(cursor, user, 'default', False, [self._name])
|
||||
ir_default_obj = self.pool.get('ir.default')
|
||||
defaults = ir_default_obj.get_default(cursor, user,
|
||||
self._name, False, context=context)
|
||||
for field, field_value in defaults.items():
|
||||
if field in fields_names:
|
||||
fld_def = (field in self._columns) and self._columns[field] \
|
||||
or self._inherit_fields[field][2]
|
||||
@@ -2024,9 +2027,11 @@ class ORM(object):
|
||||
table = arg[3]
|
||||
if arg[1] != 'in':
|
||||
if (arg[2] is False) and (arg[1] == '='):
|
||||
qu1.append(arg[0] + ' is null')
|
||||
qu1.append('(%s.%s IS NULL)' % \
|
||||
(table._table, arg[0]))
|
||||
elif (arg[2] is False) and (arg[1] == '<>' or arg[1] == '!='):
|
||||
qu1.append(arg[0] + ' is not null')
|
||||
qu1.append('(%s.%s IS NOT NULL)' % \
|
||||
(table._table, arg[0]))
|
||||
else:
|
||||
if arg[0] == 'id':
|
||||
if arg[1] == 'join':
|
||||
|
||||
Reference in new issue
Block a user