bzr revid: christophe@tinyerp.com-20080904142534-lgeqx2imzehzmhxf
This commit is contained in:
Christophe Simonis 2008-09-04 16:25:34 +02:00
commit db3e946b50
13 changed files with 60 additions and 64 deletions

View File

@ -284,28 +284,13 @@ def load_module_graph(cr, graph, status=None, **kwargs):
modobj = pool.get('ir.module.module')
modobj.update_translations(cr, 1, [mid], None)
# check if all model of the module have at least a access rule.
# TODO: improve this query which is very slow !!!
cr.execute(""" SELECT name
FROM ir_model m
WHERE EXISTS (SELECT 1
FROM ir_model_data
WHERE module = %s
AND model = m.name
)
AND NOT EXISTS (SELECT 1
FROM ir_model_access
WHERE model_id = m.id
)
""", (m,))
for (model,) in cr.fetchall():
logger.notifyChannel('init', netsvc.LOG_WARNING, 'addon:%s:object %s has no access rules!' % (m,model,))
cr.commit()
statusi+=1
cr.execute("""select model,name from ir_model where id not in (select model_id from ir_model_access)""")
for (model,name) in cr.fetchall():
logger.notifyChannel('init', netsvc.LOG_WARNING, 'addon:object %s (%s) has no access rules!' % (model,name))
pool = pooler.get_pool(cr.dbname)
cr.execute('select * from ir_model where state=%s', ('manual',))
for model in cr.dictfetchall():

View File

@ -6,11 +6,11 @@
Users Groups
-->
<record model="res.groups" id="group_system">
<field name="name">System</field>
<field name="name">Administrator / Configuration</field>
</record>
<record model="res.groups" id="group_erp_manager">
<field name="name">ERP Manager</field>
<field name="name">Administrator / Access Rights</field>
</record>
<record model="res.groups" id="group_user">
@ -21,20 +21,12 @@
<field name="name">Account Manager</field>
</record>
<record model="res.groups" id="group_request">
<field name="name">Request</field>
</record>
<record model="res.groups" id="group_cron">
<field name="name">Cron Jobs</field>
</record>
<record model="res.groups" id="group_extended">
<field name="name">Extended View</field>
<field name="name">Useability / Extended View</field>
</record>
<record model="res.groups" id="group_no_one">
<field name="name">No One</field>
<field name="name">Useability / No One</field>
</record>
<!--

View File

@ -48,9 +48,6 @@
</form>
</field>
</page>
<page string="Menus">
<field colspan="4" name="menu_access"/>
</page>
<page string="Rules">
<field colspan="4" name="rule_groups" nolabel="1">
<tree string="Rules">

View File

@ -1,6 +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,group_system,1,0,0,0
access_ir_cron_group_cron,ir_cron group_cron,model_ir_cron,group_cron,1,1,1,1
access_ir_cron_group_cron,ir_cron group_cron,model_ir_cron,group_system,1,1,1,1
access_ir_default_group_system,ir_default group_system,model_ir_default,group_system,1,0,0,0
access_ir_exports_group_system,ir_exports group_system,model_ir_exports,group_system,1,0,0,0
access_ir_exports_line_group_system,ir_exports_line group_system,model_ir_exports_line,group_system,1,0,0,0
@ -36,7 +36,7 @@ access_res_company_group_user,res_company group_user,model_res_company,group_use
access_res_country_group_user,res_country group_user,model_res_country,group_user,1,0,0,0
access_res_country_state_group_user,res_country_state group_user,model_res_country_state,group_user,1,0,0,0
access_res_currency_group_user,res_currency group_user,model_res_currency,group_user,1,0,0,0
access_res_currency_rate_group_account_manager,res_currency_rate group_account_manager,model_res_currency_rate,group_account_manager,1,1,1,1
access_res_currency_rate_group_user,res_currency_rate group_user,model_res_currency_rate,group_user,1,1,1,1
access_res_currency_rate_group_user,res_currency_rate group_user,model_res_currency_rate,group_user,1,0,0,0
access_res_groups_group_erp_manager,res_groups group_erp_manager,model_res_groups,group_erp_manager,1,1,1,1
access_res_groups_group_user,res_groups group_user,model_res_groups,group_user,1,0,0,0
@ -65,8 +65,7 @@ access_res_partner_som_group_user,res_partner_som group_user,model_res_partner_s
access_res_partner_som_group_partner_manager,res_partner_som group_partner_manager,model_res_partner_som,group_partner_manager,0,0,0,1
access_res_partner_title_group_user,res_partner_title group_user,model_res_partner_title,group_user,1,1,1,0
access_res_partner_title_group_partner_manager,res_partner_title group_partner_manager,model_res_partner_title,group_partner_manager,0,0,0,1
access_res_request_group_user,res_request group_user,model_res_request,group_user,1,0,0,0
access_res_request_group_request,res_request group_request,model_res_request,group_request,1,1,1,1
access_res_request_group_user,res_request group_user,model_res_request,group_user,1,1,1,1
access_res_request_history_group_user,res_request_history group_user,model_res_request_history,group_user,1,0,0,0
access_res_request_link_group_user,res_request_link group_user,model_res_request_link,group_user,1,0,0,0
access_res_users_group_user,res_users group_user,model_res_users,group_user,1,1,0,0

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_ir_attachment_group_system ir_attachment group_system model_ir_attachment group_system 1 0 0 0
3 access_ir_cron_group_cron ir_cron group_cron model_ir_cron group_cron group_system 1 1 1 1
4 access_ir_default_group_system ir_default group_system model_ir_default group_system 1 0 0 0
5 access_ir_exports_group_system ir_exports group_system model_ir_exports group_system 1 0 0 0
6 access_ir_exports_line_group_system ir_exports_line group_system model_ir_exports_line group_system 1 0 0 0
36 access_res_country_group_user res_country group_user model_res_country group_user 1 0 0 0
37 access_res_country_state_group_user res_country_state group_user model_res_country_state group_user 1 0 0 0
38 access_res_currency_group_user res_currency group_user model_res_currency group_user 1 0 0 0
39 access_res_currency_rate_group_account_manager access_res_currency_rate_group_user res_currency_rate group_account_manager res_currency_rate group_user model_res_currency_rate group_account_manager group_user 1 1 1 1
40 access_res_currency_rate_group_user res_currency_rate group_user model_res_currency_rate group_user 1 0 0 0
41 access_res_groups_group_erp_manager res_groups group_erp_manager model_res_groups group_erp_manager 1 1 1 1
42 access_res_groups_group_user res_groups group_user model_res_groups group_user 1 0 0 0
65 access_res_partner_som_group_partner_manager res_partner_som group_partner_manager model_res_partner_som group_partner_manager 0 0 0 1
66 access_res_partner_title_group_user res_partner_title group_user model_res_partner_title group_user 1 1 1 0
67 access_res_partner_title_group_partner_manager res_partner_title group_partner_manager model_res_partner_title group_partner_manager 0 0 0 1
68 access_res_request_group_user res_request group_user model_res_request group_user 1 0 1 0 1 0 1
access_res_request_group_request res_request group_request model_res_request group_request 1 1 1 1
69 access_res_request_history_group_user res_request_history group_user model_res_request_history group_user 1 0 0 0
70 access_res_request_link_group_user res_request_link group_user model_res_request_link group_user 1 0 0 0
71 access_res_users_group_user res_users group_user model_res_users group_user 1 1 0 0

View File

@ -211,6 +211,7 @@
<field name="usage"/>
<field name="header"/>
<field name="report_type"/>
<field name="attachment"/>
<field colspan="4" name="groups_id"/>
</form>
</field>
@ -224,6 +225,8 @@
<field name="name"/>
<field name="type"/>
<field name="report_name"/>
<field name="report_type"/>
<field name="attachment"/>
</tree>
</field>
</record>

View File

@ -128,8 +128,8 @@ class report_xml(osv.osv):
('raw', 'raw'),
('sxw', 'sxw'),
], string='Type', required=True),
'groups_id': fields.many2many('res.groups', 'res_groups_report_rel', 'uid', 'gid', 'Groups')
'groups_id': fields.many2many('res.groups', 'res_groups_report_rel', 'uid', 'gid', 'Groups'),
'attachment': fields.char('Save As Attachment Prefix', size=32, help='This is the prefix of the file name the print will be saved as attachement. Keep empty to not save the printed reports')
}
_defaults = {
'type': lambda *a: 'ir.actions.report.xml',
@ -138,6 +138,7 @@ class report_xml(osv.osv):
'header': lambda *a: True,
'report_sxw_content': lambda *a: False,
'report_type': lambda *a: 'pdf',
'attachment': lambda *a: False,
}
report_xml()
@ -560,7 +561,3 @@ class act_window_close(osv.osv):
'type': lambda *a: 'ir.actions.act_window_close',
}
act_window_close()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -113,9 +113,9 @@ class ir_model_grid(osv.osv):
def unlink(self, *args, **argv):
raise osv.except_osv('Error !', 'You cannot add an entry to this view !')
def read(self, cr, uid, ids, fields=None, context=None, load='_classic_read'):
result = super(osv.osv, self).read(cr, uid, ids, fields, context, load)
result = super(osv.osv, self).read(cr, uid, ids, fields, context, load)
allgr = self.pool.get('res.groups').search(cr, uid, [], context=context)
acc_obj = self.pool.get('ir.model.access')
for res in result:
@ -134,7 +134,10 @@ class ir_model_grid(osv.osv):
if rule.perm_unlink:
perm_list.append('u')
perms = ",".join(perm_list)
res['group_%i'%rule.group_id.id] = perms
if rule.group_id:
res['group_%d'%rule.group_id.id] = perms
else:
res['group_0'] = perms
return result
#
@ -151,7 +154,7 @@ class ir_model_grid(osv.osv):
for val in vals:
if not val[:6]=='group_':
continue
group_id = int(val[6:])
group_id = int(val[6:]) or False
rules = acc_obj.search(cr, uid, [('model_id', '=', model_id),('group_id', '=', group_id)])
if not rules:
rules = [acc_obj.create(cr, uid, {
@ -167,8 +170,9 @@ class ir_model_grid(osv.osv):
result = super(ir_model_grid, self).fields_get(cr, uid, fields, context)
groups = self.pool.get('res.groups').search(cr, uid, [])
groups_br = self.pool.get('res.groups').browse(cr, uid, groups)
result['group_0'] = {'string': 'All Users','type': 'char','size': 7}
for group in groups_br:
result['group_%i'%group.id] = {'string': '%s'%group.name,'type': 'char','size': 7}
result['group_%d'%group.id] = {'string': '%s'%group.name,'type': 'char','size': 7}
return result
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context={}, toolbar=False):
@ -179,9 +183,11 @@ class ir_model_grid(osv.osv):
xml = '''<?xml version="1.0"?>
<%s editable="bottom">
<field name="name" select="1" readonly="1"/>
<field name="model" select="1" readonly="1"/>''' % (view_type,)
<field name="model" select="1" readonly="1"/>
<field name="group_0"/>
''' % (view_type,)
for group in groups_br:
xml += '''<field name="group_%i" sum="%s"/>''' % (group.id, group.name)
xml += '''<field name="group_%d"/>''' % (group.id, )
xml += '''</%s>''' % (view_type,)
result['arch'] = xml
result['fields'] = self.fields_get(cr, uid, cols, context)
@ -359,7 +365,7 @@ class ir_model_data(osv.osv):
def _get_id(self,cr, uid, module, xml_id):
ids = self.search(cr, uid, [('module','=',module),('name','=', xml_id)])
assert len(ids)==1, '%d reference(s) to %s. You should have only one !' % (len(ids),xml_id)
assert len(ids)==1, '%d reference(s) to %s. You should have one and only one !' % (len(ids),xml_id)
return ids[0]
_get_id = tools.cache()(_get_id)

View File

@ -1,9 +1,10 @@
<?xml version="1.0" encoding="utf-8"?><terp><data noupdate="1">
<record model="res.groups" id="group_account_manager">
<field name="name">Account Manager</field>
</record>
<?xml version="1.0" encoding="utf-8"?>
<terp>
<data noupdate="1">
<record model="res.groups" id="group_partner_manager">
<field name="name">Partner Manager</field>
</record>
</data></terp>
</data>
</terp>

View File

@ -36,6 +36,7 @@ import pytz
class groups(osv.osv):
_name = "res.groups"
_order = 'name'
_columns = {
'name': fields.char('Group Name', size=64, required=True),
'model_access': fields.one2many('ir.model.access', 'group_id', 'Access Controls'),

View File

@ -103,6 +103,7 @@
<rng:optional><rng:attribute name="xsl"/></rng:optional>
<rng:optional> <rng:attribute name="auto" /> </rng:optional>
<rng:optional> <rng:attribute name="header" /> </rng:optional>
<rng:optional> <rng:attribute name="attachment" /> </rng:optional>
<rng:empty />
</rng:element>
</rng:define>

View File

@ -493,6 +493,8 @@ class orm_template(object):
(prefix == field[0:len(prefix)]):
if fields_def[field[len(prefix)]]['type'] == 'integer':
res = line[i] and int(line[i])
elif fields_def[field[len(prefix)]]['type'] == 'boolean':
res = line[i] and eval(line[i])
elif fields_def[field[len(prefix)]]['type'] == 'float':
res = line[i] and float(line[i])
elif fields_def[field[len(prefix)]]['type'] == 'selection':

View File

@ -550,11 +550,12 @@ class rml_parse(object):
return res
class report_sxw(report_rml):
def __init__(self, name, table, rml, parser=rml_parse, header=True):
def __init__(self, name, table, rml, parser=rml_parse, header=True, store=False):
report_rml.__init__(self, name, table, rml, '')
self.name = name
self.parser = parser
self.header = header
self.store = store
def getObjects(self, cr, uid, ids, context):
table_obj = pooler.get_pool(cr.dbname).get(self.table)
@ -572,10 +573,12 @@ class report_sxw(report_rml):
report_type = 'pdf'
report_xml = None
title=''
attach = False
if report_xml_ids:
title = ir_actions_report_xml_obj.browse(cr,uid,report_xml_ids)[0].name
report_xml = ir_actions_report_xml_obj.browse(cr, uid, report_xml_ids[0],
context=context)
title = report_xml.name
attach = report_xml.attachment
rml = report_xml.report_rml_content
report_type = report_xml.report_type
else:
@ -654,15 +657,24 @@ class report_sxw(report_rml):
rml_parser.preprocess(objs, data, ids)
rml_dom = xml.dom.minidom.parseString(rml)
rml2 = rml_parser._parse(rml_dom, objs, data, header=self.header)
#if os.name != "nt":
# f = file("/tmp/debug.rml", "w")
# f.write(rml2)
# f.close()
if rml_parser.logo:
logo = base64.decodestring(rml_parser.logo)
create_doc = self.generators[report_type]
pdf = create_doc(rml2, logo,title)
if attach:
# TODO: save multiple print with symbolic links in attach
pool.get('ir.attachment').create(cr, uid, {
'name': title or _('print'),
'datas': pdf,
'datas_fname': attach+time.strftime('%Y-%m-%d')+'.'+report_type,
'res_model': self.table,
'res_id': ids[0]
}, context=context
)
cr.commit()
return (pdf, report_type)

View File

@ -256,7 +256,7 @@ form: module.record_id""" % (xml_id,)
for dest,f in (('name','string'),('model','model'),('report_name','name')):
res[dest] = rec.getAttribute(f).encode('utf8')
assert res[dest], "Attribute %s of report is empty !" % (f,)
for field,dest in (('rml','report_rml'),('xml','report_xml'),('xsl','report_xsl')):
for field,dest in (('rml','report_rml'),('xml','report_xml'),('xsl','report_xsl'),('attachment','attachment')):
if rec.hasAttribute(field):
res[dest] = rec.getAttribute(field).encode('utf8')
if rec.hasAttribute('auto'):