[MERGE] Merged from the main trunk server.
bzr revid: ach@tinyerp.com-20100611111846-drnurfb0apoam02x
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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')]}">
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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={}):
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
|
@@ -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
@@ -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
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user