bzr revid: fp@tinyerp.com-20081226193455-6aq5sjab1lhr94g7
This commit is contained in:
Fabien Pinckaers 2008-12-26 20:34:55 +01:00
commit 08d49b8c5b
29 changed files with 92 additions and 32 deletions

View File

@ -451,8 +451,9 @@ class account_journal(osv.osv):
'view_id': fields.many2one('account.journal.view', 'View', required=True, help="Gives the view used when writing or browsing entries in this journal. The view tell Open ERP which fields should be visible, required or readonly and in which order. You can create your own view for a faster encoding in each journal."), 'view_id': fields.many2one('account.journal.view', 'View', required=True, help="Gives the view used when writing or browsing entries in this journal. The view tell Open ERP which fields should be visible, required or readonly and in which order. You can create your own view for a faster encoding in each journal."),
'default_credit_account_id': fields.many2one('account.account', 'Default Credit Account'), 'default_credit_account_id': fields.many2one('account.account', 'Default Credit Account'),
'default_debit_account_id': fields.many2one('account.account', 'Default Debit Account'), 'default_debit_account_id': fields.many2one('account.account', 'Default Debit Account'),
'centralisation': fields.boolean('Centralised counterpart', help="Check this box if you want that each entry doesn't create a counterpart but share the same counterpart for each entry of this journal."), 'centralisation': fields.boolean('Centralised counterpart', help="Check this box if you want that each entry doesn't create a counterpart but share the same counterpart for each entry of this journal. This is used in fiscal year closing."),
'update_posted': fields.boolean('Allow Cancelling Entries'), 'update_posted': fields.boolean('Allow Cancelling Entries'),
'group_invoice_lines': fields.boolean('Group invoice lines', help="If this box is cheked, the system will try to group the accouting lines when generating them from invoices."),
'sequence_id': fields.many2one('ir.sequence', 'Entry Sequence', help="The sequence gives the display order for a list of journals", required=True), 'sequence_id': fields.many2one('ir.sequence', 'Entry Sequence', help="The sequence gives the display order for a list of journals", required=True),
'user_id': fields.many2one('res.users', 'User', help="The responsible user of this journal"), 'user_id': fields.many2one('res.users', 'User', help="The responsible user of this journal"),
'groups_id': fields.many2many('res.groups', 'account_journal_group_rel', 'journal_id', 'group_id', 'Groups'), 'groups_id': fields.many2many('res.groups', 'account_journal_group_rel', 'journal_id', 'group_id', 'Groups'),

View File

@ -61,6 +61,8 @@ class account_move_line(osv.osv):
def create_analytic_lines(self, cr, uid, ids, context={}): def create_analytic_lines(self, cr, uid, ids, context={}):
for obj_line in self.browse(cr, uid, ids, context): for obj_line in self.browse(cr, uid, ids, context):
if obj_line.analytic_account_id: if obj_line.analytic_account_id:
if not obj_line.journal_id.analytic_journal_id:
raise osv.except_osv(_('No Analytic Journal !'),_("You have to define an analytic journal on the '%s' journal!") % (obj_line.journal_id.name,))
amt = (obj_line.credit or 0.0) - (obj_line.debit or 0.0) amt = (obj_line.credit or 0.0) - (obj_line.debit or 0.0)
vals_lines={ vals_lines={
'name': obj_line.name, 'name': obj_line.name,

View File

@ -267,6 +267,8 @@
<field name="user_id" groups="base.group_extended"/> <field name="user_id" groups="base.group_extended"/>
<newline/> <newline/>
<field name="centralisation"/> <field name="centralisation"/>
<field name="group_invoice_lines"/>
<field name="update_posted"/> <field name="update_posted"/>
<field name="entry_posted"/> <field name="entry_posted"/>
</page> </page>

View File

@ -68,7 +68,7 @@ class account_invoice(osv.osv):
tt = type2journal.get(type_inv, 'sale') tt = type2journal.get(type_inv, 'sale')
result = self.pool.get('account.analytic.journal').search(cr, uid, [('type','=',tt)], context=context) result = self.pool.get('account.analytic.journal').search(cr, uid, [('type','=',tt)], context=context)
if not result: if not result:
raise osv.except_osv(_('No Analytic Journal !'),("You have to define an analytic journal of type '%s' !") % (tt,)) raise osv.except_osv(_('No Analytic Journal !'),_("You have to define an analytic journal of type '%s' !") % (tt,))
return result[0] return result[0]
def _get_type(self, cr, uid, context={}): def _get_type(self, cr, uid, context={}):
@ -448,7 +448,7 @@ class account_invoice(osv.osv):
ait_obj = self.pool.get('account.invoice.tax') ait_obj = self.pool.get('account.invoice.tax')
cur_obj = self.pool.get('res.currency') cur_obj = self.pool.get('res.currency')
acc_obj = self.pool.get('account.account') acc_obj = self.pool.get('account.account')
self.button_compute(cr, uid, ids, context={}, set_total=True) self.button_compute(cr, uid, ids, context={}, set_total=False)
for inv in self.browse(cr, uid, ids): for inv in self.browse(cr, uid, ids):
if inv.move_id: if inv.move_id:
continue continue
@ -598,14 +598,34 @@ class account_invoice(osv.osv):
date = inv.date_invoice or time.strftime('%Y-%m-%d') date = inv.date_invoice or time.strftime('%Y-%m-%d')
part = inv.partner_id.id part = inv.partner_id.id
line = map(lambda x:(0,0,self.line_get_convert(cr, uid, x, part, date, context={})) ,iml) line = map(lambda x:(0,0,self.line_get_convert(cr, uid, x, part, date, context={})) ,iml)
if inv.journal_id.group_invoice_lines:
line2 = {}
for x, y, l in line:
tmp = str(l['account_id'])
tmp += '-'+str('tax_code_id' in l and l['tax_code_id'] or "False")
tmp += '-'+str('product_id' in l and l['product_id'] or "False")
tmp += '-'+str('analytic_account_id' in l and l['analytic_account_id'] or "False")
if tmp in line2:
am = line2[tmp]['debit'] - line2[tmp]['credit'] + (l['debit'] - l['credit'])
line2[tmp]['debit'] = (am > 0) and am or 0.0
line2[tmp]['credit'] = (am < 0) and -am or 0.0
line2[tmp]['tax_amount'] += l['tax_amount']
line2[tmp]['analytic_lines'] += l['analytic_lines']
else:
line2[tmp] = l
line = []
for key, val in line2.items():
line.append((0,0,val))
journal_id = inv.journal_id.id #self._get_journal(cr, uid, {'type': inv['type']}) journal_id = inv.journal_id.id #self._get_journal(cr, uid, {'type': inv['type']})
journal = self.pool.get('account.journal').browse(cr, uid, journal_id) journal = self.pool.get('account.journal').browse(cr, uid, journal_id)
if journal.centralisation: if journal.centralisation:
raise osv.except_osv(_('UserError'), raise osv.except_osv(_('UserError'),
_('Can not create invoice move on centralized journal')) _('Can not create invoice move on centralized journal'))
move = {'ref': inv.number, 'line_id': line, 'journal_id': journal_id, 'date': date} move = {'ref': inv.number, 'line_id': line, 'journal_id': journal_id, 'date': date}
period_id=inv.period_id and inv.period_id.id or False period_id=inv.period_id and inv.period_id.id or False
if not period_id: if not period_id:

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<openerp> <openerp>
<data> <data>
<wizard string="Invoice + Message" <wizard string="Invoices with Layout and Message"
model="account.invoice" model="account.invoice"
name="wizard.notify_message" name="wizard.notify_message"
id="wizard_notify_message" id="wizard_notify_message"
@ -9,7 +9,7 @@
/> />
<report id="account_invoices_1" <report id="account_invoices_1"
string="Invoice" string="Invoices with Layout"
model="account.invoice" model="account.invoice"
name="account.invoice.layout" name="account.invoice.layout"
rml="account_invoice_layout/report/report_account_invoice_layout.rml" rml="account_invoice_layout/report/report_account_invoice_layout.rml"

View File

@ -97,7 +97,7 @@ class account_invoice_with_message(report_sxw.rml_parse):
def spcl_msg(self, form): def spcl_msg(self, form):
account_msg_data = pooler.get_pool(self.cr.dbname).get('notify.message').browse(self.cr, self.uid, form['message']) account_msg_data = pooler.get_pool(self.cr.dbname).get('notify.message').browse(self.cr, self.uid, form['message'])
msg = account_msg_data.msg msg = account_msg_data.msg
return msg return msg

View File

@ -292,9 +292,10 @@
<font color="white"> </font> <font color="white"> </font>
</para> </para>
<para style="P19">[[ format((o.payment_term and o.payment_term.note) or '') ]]</para> <para style="P19">[[ format((o.payment_term and o.payment_term.note) or '') ]]</para>
<section>
<para style="P19">[[ repeatIn((spcl_msg(data['form']) and spcl_msg(data['form']).splitlines()) or [], 'note') ]]</para> <para style="P19">[[ repeatIn((spcl_msg(data['form']) and spcl_msg(data['form']).splitlines()) or [], 'note') ]]</para>
<para style="P19">[[ note or removeParentNode('table') ]]</para> <para style="P19">[[ note or removeParentNode('para') ]]</para>
</section>
</story> </story>
</document> </document>

View File

@ -43,6 +43,7 @@ Basic Accounting, plus new things which available are:
], ],
"update_xml" : [ "update_xml" : [
"security/ir.model.access.csv",
"account_voucher_sequence.xml", "account_voucher_sequence.xml",
"account_view.xml", "account_view.xml",
"account_report.xml", "account_report.xml",

View File

@ -0,0 +1,6 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"access_account_voucher_user","account.voucher","model_account_voucher","account.group_account_user",1,0,0,0
"access_account_voucher_line_user","account.voucher.line","model_account_voucher_line","account.group_account_user",1,0,0,0
"access_account_voucher_manager","account.voucher","model_account_voucher","account.group_account_manager",1,1,1,1
"access_account_voucher_line_manager","account.voucher.line","model_account_voucher_line","account.group_account_manager",1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_account_voucher_user account.voucher model_account_voucher account.group_account_user 1 0 0 0
3 access_account_voucher_line_user account.voucher.line model_account_voucher_line account.group_account_user 1 0 0 0
4 access_account_voucher_manager account.voucher model_account_voucher account.group_account_manager 1 1 1 1
5 access_account_voucher_line_manager account.voucher.line model_account_voucher_line account.group_account_manager 1 1 1 1

View File

@ -22,8 +22,14 @@
{ {
"name" : "Auction module", "name" : "Auction module",
"version" : "1.0", "version" : "1.0",
"author" : "Tiny",
"category" : "Generic Modules/Auction", "category" : "Generic Modules/Auction",
"depends" : ["base","account","hr_attendance"], "depends" : ["base","account","hr_attendance"],
"description": '''This module provides functionality to
manage artists, articles, sellers, buyers and auction.
Manage bids, track of sold, paid and unpaid objects.
Delivery Management.
''',
"update_xml" : [ "update_xml" : [
# FIXME: review security rules... # FIXME: review security rules...
"security/ir.model.access.csv", "security/ir.model.access.csv",

View File

@ -25,9 +25,8 @@ from osv.osv import osv, orm
from report.interface import report_rml from report.interface import report_rml
#FIXME: use the one from tools and delete the one from report #FIXME: use the one from tools and delete the one from report
from report.int_to_text import int_to_text from report.int_to_text import int_to_text
from tools import to_xml as toxml
def toxml(val): from tools import ustr
return val.replace('&', '&amp;').replace('<','&lt;').replace('>','&gt;').decode('utf-8').encode('latin1', 'replace')
class report_custom(report_rml): class report_custom(report_rml):
def __init__(self, name, table, tmpl, xsl): def __init__(self, name, table, tmpl, xsl):
@ -38,7 +37,7 @@ class report_custom(report_rml):
lots = pool.get('auction.lots').browse(cr, uid, ids) lots = pool.get('auction.lots').browse(cr, uid, ids)
auction = lots[0].auction_id auction = lots[0].auction_id
xml = '''<?xml version="1.0" encoding="ISO-8859-1"?> xml = '''<?xml version="1.0" encoding="UTF-8"?>
<report> <report>
<auction> <auction>
<name>%s</name> <name>%s</name>
@ -49,7 +48,7 @@ class report_custom(report_rml):
for l in lots: for l in lots:
# l['id_cont'] = str(i) # l['id_cont'] = str(i)
if l['obj_price']==0: if l['obj_price']==0:
price_french = 'retiré' price_french = u'retiré'
else: else:
price_french = int_to_text(int(l['obj_price'] or 0.0))+' eur' price_french = int_to_text(int(l['obj_price'] or 0.0))+' eur'
i+=1 i+=1
@ -59,10 +58,9 @@ class report_custom(report_rml):
<lot_desc>%s</lot_desc> <lot_desc>%s</lot_desc>
<price>%s</price> <price>%s</price>
<obj_price>%s</obj_price> <obj_price>%s</obj_price>
</object>''' % (i, l['obj_num'], toxml(l['name']), price_french, str(l['obj_price'] or '/')) </object>''' % (i, l['obj_num'], ustr(toxml(l['name'])), ustr(price_french), ustr(l['obj_price'] or '/'))
xml += '</report>' xml += '</report>'
# file('/tmp/terp.xml','wb+').write(xml)
return xml return xml
report_custom('report.flagey.huissier', 'auction.lots', '', 'addons/auction/report/huissier.xsl') report_custom('report.flagey.huissier', 'auction.lots', '', 'addons/auction/report/huissier.xsl')

View File

@ -63,6 +63,7 @@
"author" : "Seath Solutions Ltd", "author" : "Seath Solutions Ltd",
"website": "http://www.seathsolutions.com", "website": "http://www.seathsolutions.com",
"category" : "Localisation/Account Charts", "category" : "Localisation/Account Charts",
"description": "This is the base module to manage the accounting chart for United Kingdom in Open ERP.",
"depends" : ["base", "account", "base_iban", "base_vat", "account_chart"], "depends" : ["base", "account", "base_iban", "base_vat", "account_chart"],
"init_xml" : [], "init_xml" : [],
"demo_xml" : [], "demo_xml" : [],

View File

@ -37,6 +37,7 @@ With this module:
""", """,
"demo_xml" : [], "demo_xml" : [],
"update_xml" : [ "update_xml" : [
"security/ir.model.access.csv",
"mrp_subproduct_view.xml", "mrp_subproduct_view.xml",
], ],
"active": False, "active": False,

View File

@ -0,0 +1,3 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"access_mrp_subproduct_user","mrp.subproduct","model_mrp_subproduct","mrp.group_mrp_user",1,0,0,0
"access_mrp_subproduct_manager","mrp.subproduct","model_mrp_subproduct","mrp.group_mrp_manager",1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_mrp_subproduct_user mrp.subproduct model_mrp_subproduct mrp.group_mrp_user 1 0 0 0
3 access_mrp_subproduct_manager mrp.subproduct model_mrp_subproduct mrp.group_mrp_manager 1 1 1 1

View File

@ -91,11 +91,15 @@ class product_pricelist(osv.osv):
'version_id': fields.one2many('product.pricelist.version', 'pricelist_id', 'Pricelist Versions'), 'version_id': fields.one2many('product.pricelist.version', 'pricelist_id', 'Pricelist Versions'),
'currency_id': fields.many2one('res.currency', 'Currency', required=True), 'currency_id': fields.many2one('res.currency', 'Currency', required=True),
} }
def name_get(self, cr, uid, ids, context={}): def name_get(self, cr, uid, ids, context={}):
result= {} result= []
for pl in self.browse(cr, uid, ids, context): for pl in self.browse(cr, uid, ids, context):
result[pl.id] = pl.name + ' ('+ pl.currency_id.name + ')' name = str(pl.name) + ' ('+ str(pl.currency_id.name) + ')'
result.append((pl.id,name))
return result return result
def _get_currency(self, cr, uid, ctx): def _get_currency(self, cr, uid, ctx):
comp = self.pool.get('res.users').browse(cr,uid,uid).company_id comp = self.pool.get('res.users').browse(cr,uid,uid).company_id

View File

@ -24,6 +24,7 @@
"version":"1.0", "version":"1.0",
"author":"Tiny", "author":"Tiny",
"category":"Profile", "category":"Profile",
"description": "Profile for Accounting",
"depends":["account","report_analytic","board_account","account_followup"], "depends":["account","report_analytic","board_account","account_followup"],
"demo_xml":[], "demo_xml":[],
"update_xml":[ "update_xml":[

View File

@ -24,6 +24,7 @@
"version":"0.1", "version":"0.1",
"author":"Tiny", "author":"Tiny",
"category":"Profile", "category":"Profile",
"description": "Profile for Associates",
"depends":["membership", "board_association"], "depends":["membership", "board_association"],
"demo_xml":[], "demo_xml":[],
"update_xml":[ "update_xml":[

View File

@ -24,6 +24,7 @@
"version":"1.0", "version":"1.0",
"author":"Tiny", "author":"Tiny",
"category":"Profile", "category":"Profile",
"description": "Profile for Auction house",
"depends":["auction", "board_auction","account","hr_timesheet_sheet"], "depends":["auction", "board_auction","account","hr_timesheet_sheet"],
"demo_xml":[], "demo_xml":[],
"update_xml":[], "update_xml":[],

View File

@ -24,6 +24,7 @@
"version":"1.0", "version":"1.0",
"author":"Tiny", "author":"Tiny",
"category":"Profile", "category":"Profile",
"description": "Profile for CRM",
"depends":[ "depends":[
"crm_vertical", "board_crm_configuration", "crm_vertical", "board_crm_configuration",
], ],

View File

@ -24,6 +24,7 @@
"version":"1.0", "version":"1.0",
"author":"Tiny", "author":"Tiny",
"category":"Profile", "category":"Profile",
"description": "Profile for manufacturing industries",
"depends":["mrp", "sale", "delivery","board_manufacturing","product_margin"], "depends":["mrp", "sale", "delivery","board_manufacturing","product_margin"],
"demo_xml":[], "demo_xml":[],
"update_xml":[ "update_xml":[

View File

@ -24,6 +24,7 @@
"version":"1.0", "version":"1.0",
"author":"Tiny", "author":"Tiny",
"category":"Profile", "category":"Profile",
"description": "Profile for service companies",
"depends":[ "depends":[
"hr", "hr",
"project", "project",

View File

@ -33,7 +33,7 @@ class wiz_timebox_open(wizard.interface):
pool = pooler.get_pool(cr.dbname) pool = pooler.get_pool(cr.dbname)
ids = pool.get('project.gtd.timebox').search(cr, uid, [('user_id','=',uid),('type','=',tbtype)]) ids = pool.get('project.gtd.timebox').search(cr, uid, [('user_id','=',uid),('type','=',tbtype)])
if not len(ids): if not len(ids):
raise wizard.except_wizard('Error !', 'No timebox of the type "%s" defined !') raise wizard.except_wizard('Error !', 'No timebox of the type "%s" defined !' % (tbtype,))
view_type = 'form,tree' view_type = 'form,tree'
if len(ids) >= 1: if len(ids) >= 1:
domain = "[('id','in',["+','.join(map(str,ids))+"])]" domain = "[('id','in',["+','.join(map(str,ids))+"])]"

View File

@ -26,6 +26,7 @@
"website" : "http://www.openerp.com", "website" : "http://www.openerp.com",
"depends" : ["base", "account", "stock", "process"], "depends" : ["base", "account", "stock", "process"],
"category" : "Generic Modules/Sales & Purchases", "category" : "Generic Modules/Sales & Purchases",
"description": "Module for purchase management",
"init_xml" : [], "init_xml" : [],
"demo_xml" : ["purchase_demo.xml", "demo_xml" : ["purchase_demo.xml",
#"purchase_unit_test.xml" #"purchase_unit_test.xml"

View File

@ -20,12 +20,14 @@
# #
############################################################################## ##############################################################################
{ {
"name" : "Sales Management - Reporting", "name" : "Purchase Management - Reporting",
"version" : "1.0", "version" : "1.0",
"author" : "Tiny", "author" : "Tiny",
"website" : "http://www.openerp.com", "website" : "http://www.openerp.com",
"depends" : ["purchase"], "depends" : ["purchase"],
"category" : "Generic Modules/Sales & Purchases", "category" : "Generic Modules/Sales & Purchases",
"description": '''Module to add views like
Purchase By Product, Purchase By Category of Product, All Months, Current Month.''',
"init_xml" : [], "init_xml" : [],
"demo_xml" : [], "demo_xml" : [],
"update_xml" : [ "update_xml" : [

View File

@ -24,6 +24,8 @@
"version" : "1.0", "version" : "1.0",
"author" : "Tiny", "author" : "Tiny",
"website" : "http://www.openerp.com", "website" : "http://www.openerp.com",
"description": '''Module to add timesheet views like
All Month, Timesheet By User, Timesheet Of Month, Timesheet By Account''',
"depends" : ["hr_timesheet",'hr_timesheet_invoice'], "depends" : ["hr_timesheet",'hr_timesheet_invoice'],
"category" : "Generic Modules/Human Resources", "category" : "Generic Modules/Human Resources",
"init_xml" : [], "init_xml" : [],

View File

@ -26,6 +26,10 @@
"website" : "http://www.openerp.com", "website" : "http://www.openerp.com",
"depends" : ["product", "account"], "depends" : ["product", "account"],
"category" : "Generic Modules/Inventory Control", "category" : "Generic Modules/Inventory Control",
"description": '''Module provides Inventory Management, define warehouse, stock location, Pickings,
Incoming products, Outgoing products, Internal movements of product, Traceability.
Reports for stock like lots by location, Stock Forecast, Item Labels, Picking List etc..
''',
"init_xml" : [], "init_xml" : [],
"demo_xml" : ["stock_demo.xml"], "demo_xml" : ["stock_demo.xml"],
"update_xml" : [ "update_xml" : [

View File

@ -1062,20 +1062,16 @@ class stock_move(osv.osv):
if move.state in ('confirmed','waiting','assigned','draft'): if move.state in ('confirmed','waiting','assigned','draft'):
if move.picking_id: if move.picking_id:
pickings[move.picking_id.id] = True pickings[move.picking_id.id] = True
if move.move_dest_id and move.move_dest_id.state=='waiting': if move.move_dest_id and move.move_dest_id.state=='waiting':
self.write(cr, uid, [move.move_dest_id.id], {'state':'assigned'}) self.write(cr, uid, [move.move_dest_id.id], {'state':'assigned'})
if move.move_dest_id.picking_id: if move.move_dest_id.picking_id:
wf_service = netsvc.LocalService("workflow") wf_service = netsvc.LocalService("workflow")
wf_service.trg_write(uid, 'stock.picking', move.move_dest_id.picking_id.id, cr) wf_service.trg_write(uid, 'stock.picking', move.move_dest_id.picking_id.id, cr)
self.write(cr, uid, ids, {'state':'cancel', 'move_dest_id': False}) self.write(cr, uid, ids, {'state':'cancel', 'move_dest_id': False})
#for pick_id in pickings: for pick in self.pool.get('stock.picking').browse(cr,uid,pickings.keys()):
# wf_service = netsvc.LocalService("workflow") if all(move.state == 'cancle' for move in pick.move_lines):
# wf_service.trg_validate(uid, 'stock.picking', pick_id, 'button_cancel', cr) self.pool.get('stock.picking').write(cr,uid,[pick.id],{'state':'cancel'})
#ids2 = []
#for res in self.read(cr, uid, ids, ['move_dest_id']):
# if res['move_dest_id']:
# ids2.append(res['move_dest_id'][0])
wf_service = netsvc.LocalService("workflow") wf_service = netsvc.LocalService("workflow")
for id in ids: for id in ids:

View File

@ -24,6 +24,7 @@
"version" : "1.0", "version" : "1.0",
"author" : "Tiny", "author" : "Tiny",
"category" : "Generic Modules/Others", "category" : "Generic Modules/Others",
"description": '''Module allows to create new documents and add subscription on that document.''',
"depends" : ["base"], "depends" : ["base"],
"init_xml" : [], "init_xml" : [],
"demo_xml" : [], "demo_xml" : [],

View File

@ -3,4 +3,6 @@
"wiki_groups_all","wiki.groups","model_wiki_groups",,1,0,0,0 "wiki_groups_all","wiki.groups","model_wiki_groups",,1,0,0,0
"wiki_wiki","wiki.wiki","model_wiki_wiki","base.group_user",1,1,1,1 "wiki_wiki","wiki.wiki","model_wiki_wiki","base.group_user",1,1,1,1
"wiki_groups","wiki.groups","model_wiki_groups","base.group_system",1,1,1,1 "wiki_groups","wiki.groups","model_wiki_groups","base.group_system",1,1,1,1
"wiki_groups_link","wiki.groups.link","model_wiki_groups_link","base.group_system",1,1,1,1
"wiki_wiki_history","wiki.wiki.history","model_wiki_wiki_history","base.group_user",1,0,1,0 "wiki_wiki_history","wiki.wiki.history","model_wiki_wiki_history","base.group_user",1,0,1,0
"wiki_wizard_wiki_history_show_diff","wizard.wiki.history.show_diff","model_wizard_wiki_history_show_diff","base.group_user",1,1,1,1

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
3 wiki_groups_all wiki.groups model_wiki_groups 1 0 0 0
4 wiki_wiki wiki.wiki model_wiki_wiki base.group_user 1 1 1 1
5 wiki_groups wiki.groups model_wiki_groups base.group_system 1 1 1 1
6 wiki_groups_link wiki.groups.link model_wiki_groups_link base.group_system 1 1 1 1
7 wiki_wiki_history wiki.wiki.history model_wiki_wiki_history base.group_user 1 0 1 0
8 wiki_wizard_wiki_history_show_diff wizard.wiki.history.show_diff model_wizard_wiki_history_show_diff base.group_user 1 1 1 1