[MERGE] Merged from the main trunk server.

bzr revid: ach@tinyerp.com-20100611111846-drnurfb0apoam02x
This commit is contained in:
Anup (OpenERP)
2010-06-11 16:48:46 +05:30
16 changed files with 127 additions and 72 deletions
+5 -5
View File
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-12-18 08:39+0000\n"
"PO-Revision-Date: 2010-06-08 04:33+0000\n"
"Last-Translator: goranc <goranc@gmail.com>\n"
"PO-Revision-Date: 2010-06-10 07:58+0000\n"
"Last-Translator: Goran Kliska <gkliska@gmail.com>\n"
"Language-Team: openerp-translators\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-06-09 03:34+0000\n"
"X-Launchpad-Export-Date: 2010-06-11 03:41+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
"Language: hr\n"
@@ -1381,7 +1381,7 @@ msgstr "Gruzija"
#. module: base
#: model:res.country,name:base.pl
msgid "Poland"
msgstr ""
msgstr "Poljska"
#. module: base
#: selection:ir.module.module,state:0
@@ -2703,7 +2703,7 @@ msgstr ""
#: help:ir.values,key2:0
msgid ""
"The kind of action or button in the client side that will trigger the action."
msgstr ""
msgstr "Vrsta akcije ili gumba na klijentskoj strani koja će okinuti akciju."
#. module: base
#: selection:ir.ui.menu,icon:0
+2 -2
View File
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-server\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2009-12-18 08:39+0000\n"
"PO-Revision-Date: 2010-06-08 04:29+0000\n"
"PO-Revision-Date: 2010-06-10 04:00+0000\n"
"Last-Translator: Harry (Open ERP) <hmo@tinyerp.com>\n"
"Language-Team: Japanese <ja@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-06-09 03:34+0000\n"
"X-Launchpad-Export-Date: 2010-06-11 03:41+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: base
+2 -2
View File
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-12-18 08:39+0000\n"
"PO-Revision-Date: 2010-06-08 04:08+0000\n"
"PO-Revision-Date: 2010-06-10 04:02+0000\n"
"Last-Translator: Anders Wallenquist <anders.wallenquist@vertel.se>\n"
"Language-Team: <>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-06-09 03:34+0000\n"
"X-Launchpad-Export-Date: 2010-06-11 03:41+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: base
+2 -2
View File
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-12-18 08:39+0000\n"
"PO-Revision-Date: 2010-06-08 04:37+0000\n"
"PO-Revision-Date: 2010-06-10 03:58+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-06-09 03:34+0000\n"
"X-Launchpad-Export-Date: 2010-06-11 03:42+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: base
+2 -2
View File
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-12-18 08:39+0000\n"
"PO-Revision-Date: 2010-06-08 04:26+0000\n"
"PO-Revision-Date: 2010-06-10 03:59+0000\n"
"Last-Translator: Eleanor Chen <chenyueg@gmail.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-06-09 03:35+0000\n"
"X-Launchpad-Export-Date: 2010-06-11 03:42+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: base
+24 -7
View File
@@ -21,11 +21,14 @@
from osv import fields,osv
import time
from operator import itemgetter
from functools import partial
import tools
from tools.safe_eval import safe_eval as eval
class ir_rule(osv.osv):
_name = 'ir.rule'
_MODES = ['read', 'write', 'create', 'unlink']
def _domain_force_get(self, cr, uid, ids, field_name, arg, context={}):
res = {}
@@ -45,13 +48,7 @@ class ir_rule(osv.osv):
return res
def _check_model_obj(self, cr, uid, ids, context={}):
model_obj = self.pool.get('ir.model')
for rule in self.browse(cr, uid, ids, context):
model = model_obj.browse(cr, uid, rule.model_id.id, context).model
obj = self.pool.get(model)
if isinstance(obj, osv.osv_memory):
return False
return True
return not any(isinstance(self.pool.get(rule.model_id.model), osv.osv_memory) for rule in self.browse(cr, uid, ids, context))
_columns = {
'name': fields.char('Name', size=128, select=1),
@@ -90,6 +87,8 @@ class ir_rule(osv.osv):
@tools.cache()
def _compute_domain(self, cr, uid, model_name, mode="read"):
if mode not in self._MODES:
raise ValueError('Invalid mode: %r' % (mode,))
group_rule = {}
global_rules = []
@@ -115,6 +114,24 @@ class ir_rule(osv.osv):
dom += self.domain_create(cr, uid, value)
return dom
def clear_cache(self, cr, uid):
cr.execute("""SELECT DISTINCT m.model
FROM ir_rule r
JOIN ir_model m
ON r.model_id = m.id
WHERE r.global
OR EXISTS (SELECT 1
FROM rule_group_rel g_rel
JOIN res_groups_users_rel u_rel
ON g_rel.group_id = u_rel.gid
WHERE g_rel.rule_group_id = r.id
AND u_rel.uid = %s)
""", (uid,))
models = map(itemgetter(0), cr.fetchall())
clear = partial(self._compute_domain.clear_cache, cr.dbname, uid)
[clear(model, mode) for model in models for mode in self._MODES]
def domain_get(self, cr, uid, model_name, mode='read', context={}):
dom = self._compute_domain(cr, uid, model_name, mode=mode)
if dom:
+30 -6
View File
@@ -63,6 +63,7 @@ class ir_property(osv.osv):
'type' : fields.selection([('char', 'Char'),
('float', 'Float'),
('boolean', 'Boolean'),
('integer', 'Integer'),
('integer_big', 'Integer Big'),
('text', 'Text'),
@@ -84,10 +85,20 @@ class ir_property(osv.osv):
value = values.pop('value', None)
if not value:
return values
type_ = values.get('type', 'many2one')
prop = None
type_ = values.get('type')
if not type_:
if ids:
prop = self.browse(cr, uid, ids[0])
type_ = prop.type
else:
type_ = self._defaults['type']
type2field = {
'char': 'value_text',
'float': 'value_float',
'boolean' : 'value_integer',
'integer': 'value_integer',
'integer_big': 'value_integer',
'text': 'value_text',
@@ -106,9 +117,9 @@ class ir_property(osv.osv):
elif isinstance(value, (int, long)):
field_id = values.get('fields_id')
if not field_id:
if not ids:
if not prop:
raise ValueError()
field_id = self.browse(cr, uid, ids[0]).fields_id
field_id = prop.fields_id
else:
field_id = self.pool.get('ir.model.fields').browse(cr, uid, field_id)
@@ -137,6 +148,8 @@ class ir_property(osv.osv):
return record.value_text
elif record.type == 'float':
return record.value_float
elif record.type == 'boolean':
return bool(record.value_integer)
elif record.type in ('integer', 'integer_big'):
return record.value_integer
elif record.type == 'binary':
@@ -146,6 +159,8 @@ class ir_property(osv.osv):
elif record.type == 'datetime':
return record.value_datetime
elif record.type == 'date':
if not record.value_datetime:
return False
return time.strftime('%Y-%m-%d', time.strptime(record.value_datetime, '%Y-%m-%d %H:%M:%S'))
return False
@@ -158,18 +173,27 @@ class ir_property(osv.osv):
return self.get_by_id(cr, uid, nid, context=context)
return False
def _get_domain_default(self, cr, uid, prop_name, model, context=None):
domain = self._get_domain(cr, uid, prop_name, model, context=context)
if domain is None:
return None
return ['&', ('res_id', '=', False)] + domain
def _get_domain(self, cr, uid, prop_name, model, context=None):
cr.execute('select id from ir_model_fields where name=%s and model=%s', (prop_name, model))
res = cr.fetchone()
if not res:
return None
company = self.pool.get('res.company')
cid = company._company_default_get(cr, uid, model, res[0],
if 'force_company' in context and context['force_company']:
cid = context['force_company']
else:
company = self.pool.get('res.company')
cid = company._company_default_get(cr, uid, model, res[0],
context=context)
domain = ['&', ('fields_id', '=', res[0]),
'|', ('company_id', '=', cid), ('company_id', '=', False)]
'|', ('company_id', '=', cid), ('company_id', '=', False)]
return domain
ir_property()
+1 -1
View File
@@ -30,7 +30,7 @@
<field name="company_id" select="1" groups="base.group_multi_company"/>
<field colspan="4" name="fields_id" select="1"/>
<field colspan="4" name="type"/>
<group colspan="4" attrs="{'invisible' : [('type', 'not in', ('integer', 'integer_big'))]}">
<group colspan="4" attrs="{'invisible' : [('type', 'not in', ('integer', 'integer_big', 'boolean'))]}">
<field colspan="4" name="value_integer" widget="integer"/>
</group>
<group colspan="4" attrs="{'invisible' : [('type', '!=', 'float')]}">
+1 -1
View File
@@ -278,7 +278,7 @@ class res_partner_address(osv.osv):
_description ='Partner Addresses'
_name = 'res.partner.address'
_columns = {
'partner_id': fields.many2one('res.partner', 'Company Name', ondelete='set null', select=True, help="Keep empty for a private address, not related to partner."),
'partner_id': fields.many2one('res.partner', 'Partner Name', ondelete='set null', select=True, help="Keep empty for a private address, not related to partner."),
'type': fields.selection( [ ('default','Default'),('invoice','Invoice'), ('delivery','Delivery'), ('contact','Contact'), ('other','Other') ],'Address Type', help="Used to select automatically the right address according to the context in sales and purchases documents."),
'function': fields.char('Function', size=64),
'title': fields.selection(_contact_title_get, 'Title', size=32),
+10 -17
View File
@@ -5,7 +5,7 @@
<menuitem id="menu_address_book" name="Address Book" parent="menu_base_partner" sequence="2"/>
<menuitem id="menu_base_config" name="Configuration" parent="menu_base_partner" sequence="9"
<menuitem id="menu_base_config" name="Configuration" parent="menu_base_partner" sequence="11"
groups="group_system"/>
<menuitem id="menu_config_address_book" name="Address Book" parent="menu_base_config" sequence="3"
@@ -317,9 +317,9 @@
<page string="Notes">
<field colspan="4" name="comment" nolabel="1"/>
</page>
<page string="History">
<field colspan="4" name="events" nolabel="1" widget="one2many_list" string="Event Logs"/>
</page>
<!-- <page string="History">-->
<!-- <field colspan="4" name="events" nolabel="1" widget="one2many_list" string="Event Logs"/>-->
<!-- </page>-->
</notebook>
</form>
@@ -333,8 +333,8 @@
<field name="arch" type="xml">
<search string="Search Partner">
<group col='10' colspan='4'>
<filter string="Customers" icon="terp-personal" domain="[('customer','=',1)]" help="Customer Partners"/>
<filter string="Suppliers" icon="terp-personal" domain="[('supplier','=',1)]" help="Supplier Partners"/>
<filter string="Customers" name="customer" icon="terp-personal" domain="[('customer','=',1)]" help="Customer Partners"/>
<filter string="Suppliers" name="supplier" icon="terp-personal" domain="[('supplier','=',1)]" help="Supplier Partners"/>
<separator orientation="vertical"/>
<field name="name" select="1"/>
<field name="address" select="1"/>
@@ -357,7 +357,7 @@
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner</field>
<field name="view_type">form</field>
<field name="context">{"search_default_supplier":supplier}</field>
<field name="context">{"search_default_customer":1}</field>
<field name="search_view_id" ref="view_res_partner_filter"/>
</record>
<record id="action_partner_form_view1" model="ir.actions.act_window.view">
@@ -384,7 +384,7 @@
<field name="res_model">res.partner</field>
<field name="view_type">form</field>
<field name="domain">[('customer','=',1)]</field>
<field name="context">{'default_customer':1}</field>
<field name="context">{'default_customer':1, 'search_default_customer':1}</field>
<field name="filter" eval="True"/>
</record>
@@ -417,15 +417,6 @@
<field name="filter" eval="True"/>
</record>
<record id="action_partner_customer_form_new" model="ir.actions.act_window">
<field name="name">New Partner</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner</field>
<field name="view_type">form</field>
<field name="view_mode">form,tree</field>
<field name="view_id" ref="view_partner_form"/>
</record>
<record id="view_payterm_form" model="ir.ui.view">
<field name="name">res.payterm</field>
<field name="model">res.payterm</field>
@@ -549,6 +540,7 @@
</tree>
</field>
</record>
<!--
<record id="action_partner_category" model="ir.actions.act_window">
<field name="name">Partners by Categories</field>
<field name="type">ir.actions.act_window</field>
@@ -559,6 +551,7 @@
</record>
<menuitem action="action_partner_category" id="menu_partner_category_main" parent="base.menu_address_book" sequence="1"
groups="base.group_extended"/>
-->
<record id="action_partner_by_category" model="ir.actions.act_window">
<field name="name">Partner Categories</field>
+1 -2
View File
@@ -133,12 +133,12 @@ class res_company(osv.osv):
ids = self._get_company_children(cr, uid, company)
return ids
@tools.cache()
def _get_company_children(self, cr, uid=None, company=None):
if not company:
return []
ids = self.search(cr, uid, [('parent_id','child_of',[company])])
return ids
_get_company_children = tools.cache()(_get_company_children)
def _get_partner_hierarchy(self, cr, uid, company_id, context={}):
if company_id:
@@ -168,7 +168,6 @@ class res_company(osv.osv):
def write(self, cr, *args, **argv):
self.cache_restart(cr)
# Restart the cache on the company_get method
return super(res_company, self).write(cr, *args, **argv)
def _get_euro(self, cr, uid, context={}):
+11 -5
View File
@@ -20,9 +20,9 @@
##############################################################################
from osv import fields,osv
from osv.orm import except_orm, browse_record
from osv.orm import browse_record
import tools
import operator
from functools import partial
import pytz
import pooler
from tools.translate import _
@@ -55,7 +55,6 @@ class groups(osv.osv):
raise osv.except_osv(_('Error'),
_('The name of the group can not start with "-"'))
res = super(groups, self).write(cr, uid, ids, vals, context=context)
# Restart the cache on the company_get method
self.pool.get('ir.model.access').call_cache_clearing_methods(cr)
return res
@@ -332,11 +331,14 @@ class users(osv.osv):
'groups_id': _get_group,
'address_id': False,
}
@tools.cache()
def company_get(self, cr, uid, uid2, context=None):
return self._get_company(cr, uid, context=context, uid2=uid2)
company_get = tools.cache()(company_get)
def write(self, cr, uid, ids, values, context=None):
if not hasattr(ids, '__iter__'):
ids = [ids]
if ids == [uid]:
for key in values.keys():
if not (key in ('view', 'password','signature','action_id', 'company_id') or key.startswith('context_')):
@@ -344,9 +346,13 @@ class users(osv.osv):
else:
uid = 1
res = super(users, self).write(cr, uid, ids, values, context=context)
# clear caches linked to the users
self.company_get.clear_cache(cr.dbname)
# Restart the cache on the company_get method
self.pool.get('ir.model.access').call_cache_clearing_methods(cr)
clear = partial(self.pool.get('ir.rule').clear_cache, cr)
map(clear, ids)
return res
def unlink(self, cr, uid, ids, context=None):
+7 -5
View File
@@ -1,5 +1,6 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"access_ir_attachment_group_system","ir_attachment group_system","model_ir_attachment",,1,1,1,1
"access_ir_attachment_all","ir_attachment all","model_ir_attachment",,1,0,0,0
"access_ir_attachment_group_user","ir_attachment group_user","model_ir_attachment",group_user,1,1,1,1
"access_ir_cron_group_cron","ir_cron group_cron","model_ir_cron","group_system",1,1,1,1
"access_ir_cron_user","ir_cron user","model_ir_cron","group_user",1,0,0,0
"access_ir_default_group_system","ir_default group_system","model_ir_default",,1,1,1,1
@@ -26,8 +27,9 @@
"access_ir_rule_group_erp_manager","ir_rule group_erp_manager","model_ir_rule","group_erp_manager",1,1,1,1
"access_ir_sequence_group_user","ir_sequence group_user","model_ir_sequence",,1,1,1,1
"access_ir_sequence_type_group_user","ir_sequence_type group_user","model_ir_sequence_type",,1,0,0,0
"access_ir_translation_group_system","ir_translation group_system","model_ir_translation",,1,1,1,1
"access_ir_ui_menu_group_user","ir_ui_menu group_user","model_ir_ui_menu",,1,0,1,0
"access_ir_translation_all","ir_translation all","model_ir_translation",,1,0,0,0
"access_ir_translation_group_system","ir_translation group_system","model_ir_translation","group_system",1,1,1,1
"access_ir_ui_menu_group_user","ir_ui_menu group_user","model_ir_ui_menu",,1,0,0,0
"access_ir_ui_menu_group_system","ir_ui_menu group_system","model_ir_ui_menu","group_system",1,1,1,1
"access_ir_ui_view_group_user","ir_ui_view group_user","model_ir_ui_view",,1,0,0,0
"access_ir_ui_view_group_system","ir_ui_view group_system","model_ir_ui_view","group_system",1,1,1,1
@@ -97,7 +99,7 @@
"access_workflow_group_system","workflow_group_system","model_workflow","group_system",1,1,1,1
"access_workflow_activity_all","workflow_activity_all","model_workflow_activity",,1,0,0,0
"access_workflow_activity_group_system","workflow_activity_group_system","model_workflow_activity","group_system",1,1,1,1
"access_workflow_instance_all","workflow_instance_all","model_workflow_instance",,1,1,1,1
"access_workflow_instance_all","workflow_instance_all","model_workflow_instance",,1,0,0,0
"access_workflow_transition_all","workflow_transition_all","model_workflow_transition",,1,0,0,0
"access_workflow_transition_group_system","workflow_transition_group_system","model_workflow_transition","group_system",1,1,1,1
"access_workflow_triggers_all","workflow_triggers_all","model_workflow_triggers",,1,0,0,0
@@ -125,5 +127,5 @@
"access_maintenance_group_user","maintenance_contract group_user","model_maintenance_contract","group_maintenance_manager",1,1,1,1
"access_maintenance_contract_module","maintenance.contract.module","model_maintenance_contract_module","group_maintenance_manager",1,1,1,1
"access_maintenance_contract_wizard","maintenance.contract.wizard","model_maintenance_contract_wizard","group_maintenance_manager",1,1,1,1
"access_multi_company_default user","multi_company_default User","model_multi_company_default","group_user",1,0,0,0
"access_multi_company_default user","multi_company_default all","model_multi_company_default",,1,0,0,0
"access_multi_company_default manager","multi_company_default Manager","model_multi_company_default","group_erp_manager",1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_ir_attachment_group_system access_ir_attachment_all ir_attachment group_system ir_attachment all model_ir_attachment 1 1 0 1 0 1 0
3 access_ir_attachment_group_user ir_attachment group_user model_ir_attachment group_user 1 1 1 1
4 access_ir_cron_group_cron ir_cron group_cron model_ir_cron group_system 1 1 1 1
5 access_ir_cron_user ir_cron user model_ir_cron group_user 1 0 0 0
6 access_ir_default_group_system ir_default group_system model_ir_default 1 1 1 1
27 access_ir_rule_group_erp_manager ir_rule group_erp_manager model_ir_rule group_erp_manager 1 1 1 1
28 access_ir_sequence_group_user ir_sequence group_user model_ir_sequence 1 1 1 1
29 access_ir_sequence_type_group_user ir_sequence_type group_user model_ir_sequence_type 1 0 0 0
30 access_ir_translation_group_system access_ir_translation_all ir_translation group_system ir_translation all model_ir_translation 1 1 0 1 0 1 0
31 access_ir_ui_menu_group_user access_ir_translation_group_system ir_ui_menu group_user ir_translation group_system model_ir_ui_menu model_ir_translation group_system 1 0 1 1 0 1
32 access_ir_ui_menu_group_user ir_ui_menu group_user model_ir_ui_menu 1 0 0 0
33 access_ir_ui_menu_group_system ir_ui_menu group_system model_ir_ui_menu group_system 1 1 1 1
34 access_ir_ui_view_group_user ir_ui_view group_user model_ir_ui_view 1 0 0 0
35 access_ir_ui_view_group_system ir_ui_view group_system model_ir_ui_view group_system 1 1 1 1
99 access_workflow_group_system workflow_group_system model_workflow group_system 1 1 1 1
100 access_workflow_activity_all workflow_activity_all model_workflow_activity 1 0 0 0
101 access_workflow_activity_group_system workflow_activity_group_system model_workflow_activity group_system 1 1 1 1
102 access_workflow_instance_all workflow_instance_all model_workflow_instance 1 1 0 1 0 1 0
103 access_workflow_transition_all workflow_transition_all model_workflow_transition 1 0 0 0
104 access_workflow_transition_group_system workflow_transition_group_system model_workflow_transition group_system 1 1 1 1
105 access_workflow_triggers_all workflow_triggers_all model_workflow_triggers 1 0 0 0
127 access_maintenance_group_user maintenance_contract group_user model_maintenance_contract group_maintenance_manager 1 1 1 1
128 access_maintenance_contract_module maintenance.contract.module model_maintenance_contract_module group_maintenance_manager 1 1 1 1
129 access_maintenance_contract_wizard maintenance.contract.wizard model_maintenance_contract_wizard group_maintenance_manager 1 1 1 1
130 access_multi_company_default user multi_company_default User multi_company_default all model_multi_company_default group_user 1 0 0 0
131 access_multi_company_default manager multi_company_default Manager model_multi_company_default group_erp_manager 1 1 1 1
+3
View File
@@ -201,6 +201,9 @@
<rng:optional> <rng:attribute name="target"/> </rng:optional>
<rng:optional> <rng:attribute name="key2"/> </rng:optional>
<rng:optional> <rng:attribute name="groups"/> </rng:optional>
<rng:optional> <rng:attribute name="limit"/> </rng:optional>
<rng:optional> <rng:attribute name="usage"/> </rng:optional>
<rng:optional> <rng:attribute name="auto_refresh"/> </rng:optional>
<rng:empty />
</rng:element>
</rng:define>
+10 -12
View File
@@ -874,12 +874,17 @@ class serialized(_column):
class property(function):
def _get_default(self, obj, cr, uid, prop_name, context=None):
from orm import browse_record
prop = obj.pool.get('ir.property')
domain = prop._get_domain(cr, uid, prop_name, obj._name, context)
domain = prop._get_domain_default(cr, uid, prop_name, obj._name, context)
ids = prop.search(cr, uid, domain, order='company_id', context=context)
if not ids:
return False
return prop.get_by_id(cr, uid, ids, context=context)
default_value = prop.get_by_id(cr, uid, ids, context=context)
if isinstance(default_value, browse_record):
return default_value.id
return default_value
def _get_by_id(self, obj, cr, uid, prop_name, ids, context=None):
prop = obj.pool.get('ir.property')
@@ -903,7 +908,7 @@ class property(function):
default_val = self._get_default(obj, cr, uid, prop_name, context)
if id_val and id_val != default_val:
if id_val is not default_val:
def_id = self._field_get(cr, uid, obj._name, prop_name)
company = obj.pool.get('res.company')
cid = company._company_default_get(cr, uid, obj._name, def_id,
@@ -924,23 +929,16 @@ class property(function):
def _fnct_read(self, obj, cr, uid, ids, prop_name, obj_dest, context=None):
from orm import browse_record
if context is None:
context = {}
property = obj.pool.get('ir.property')
properties = obj.pool.get('ir.property')
default_val = self._get_default(obj, cr, uid, prop_name, context)
if isinstance(default_val, browse_record):
default_val = default_val.id
else:
default_val = False
nids = self._get_by_id(obj, cr, uid, prop_name, ids, context)
res = {}
for id in ids:
res[id] = default_val
for prop in property.browse(cr, uid, nids):
for prop in properties.browse(cr, uid, nids):
value = prop.get_by_id(context=context)
if isinstance(value, browse_record):
if not value.exists():
+16 -3
View File
@@ -3118,9 +3118,10 @@ class orm(orm_template):
ids = [ids]
self._check_concurrency(cr, ids, context)
self.pool.get('ir.model.access').check(cr, user, self._name, 'write', context=context)
result = self._store_get_values(cr, user, ids, vals.keys(), context) or []
# No direct update of parent_left/right
vals.pop('parent_left', None)
vals.pop('parent_right', None)
@@ -3208,7 +3209,6 @@ class orm(orm_template):
if c[0].startswith('default_'):
del rel_context[c[0]]
result = []
for field in upd_todo:
for id in ids:
result += self._columns[field].set(cr, self, id, field, vals[field], user, context=rel_context) or []
@@ -3279,8 +3279,19 @@ class orm(orm_template):
cr.execute('update '+self._table+' set parent_left=parent_left-%s, parent_right=parent_right-%s where parent_left>=%s and parent_left<%s', (pleft-position+distance,pleft-position+distance, pleft+distance, pright+distance))
result += self._store_get_values(cr, user, ids, vals.keys(), context)
result.sort()
done = {}
for order, object, ids, fields in result:
self.pool.get(object)._store_set_values(cr, user, ids, fields, context)
key = (object,tuple(fields))
done.setdefault(key, {})
# avoid to do several times the same computation
todo = []
for id in ids:
if id not in done[key]:
done[key][id] = True
todo.append(id)
self.pool.get(object)._store_set_values(cr, user, todo, fields, context)
wf_service = netsvc.LocalService("workflow")
for id in ids:
@@ -3543,6 +3554,8 @@ class orm(orm_template):
return result2
def _store_set_values(self, cr, uid, ids, fields, context):
if not ids:
return True
field_flag = False
field_dict = {}
if self._log_access: